From e2b9ab704d017285d836963fc1e4e59ad621daf1 Mon Sep 17 00:00:00 2001 From: Kristian295 Date: Wed, 10 Feb 2016 18:00:08 +0100 Subject: [PATCH 001/322] Fixed ll. 572 - 579 Fixed: - lengths of texts (didn't match with page lengths) - orthographic mistakes --- src/main/resources/assets/actuallyadditions/lang/de_DE.lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/de_DE.lang b/src/main/resources/assets/actuallyadditions/lang/de_DE.lang index c24d7ccd8..f76218160 100644 --- a/src/main/resources/assets/actuallyadditions/lang/de_DE.lang +++ b/src/main/resources/assets/actuallyadditions/lang/de_DE.lang @@ -571,9 +571,9 @@ booklet.actuallyadditions.amountOfChars=%s Zeichen insgesamt #Booklet Chapters / Handbuch-Kapitel booklet.actuallyadditions.chapter.intro.name=Einführung zu ActAdd -booklet.actuallyadditions.chapter.intro.text.1=Für eine zu lange Zeit haben die Bewohner von Minecraftien unter der Gewalt einer unerbittlichen Peitsche geschuftet. Eine Peitsche so verletzend und schädlich: einfach lästig. Ja, die millionenfachen Lästigkeiten aus denen diese Plage besteht, die die Spieler dazu zwingt Stunden - nein, sogar Tage! - Bäume zu fällen, Weizen zu farmen und anderen solch stumpfsinnigen Tätigkeiten nachzugehen, nur um augenblicklich der erbarmungslosen Langeweile zu entfliehen und die wirklichen Freuden in Minecraftien zu erleben, zu bauen und die tiefen und fernen Welten zu entdecken bis hin zum unerforschten Reichtum, -booklet.actuallyadditions.chapter.intro.text.2=der in dieser Welt steckt. Noch nicht früher ist jemand in diese kreative Unternehmung eingetaucht als die Unannehmlichkeiten zurückkerhren, wie millionen rasende, lästige Binen, stechend, um dich herrum schwirred bis das Spiel aufhört Spaß zu machen, und du bist bis in alle Ewigkeit vertrieben. Zu diesem Zweck hat ein gewisser Ellpeck dieses Actually Additions geschaffen, welches dem Spieler erlaubt, sich mehr mit den Kernerlebnissen Minecrafts zu beschäftigen - bauen und abenteuern - indem die Monotonie automatisiert und rationalisiert wird, -booklet.actuallyadditions.chapter.intro.text.3=die Minecraft plagt. Deshalb präsentiert dir Ellpeck demütig dieses Handbuch, welches dir die Funktionen dieser Modifikation zeigen und, ultimativ, dir erlauben wird, die Unbequemlichkeiten zu überwinden und Erleuchtung zu erlangen. ~by Tulkas +booklet.actuallyadditions.chapter.intro.text.1=Für eine zu lange Zeit haben die Bewohner von Minecraftien unter der Gewalt einer unerbittlichen Peitsche geschuftet. Eine Peitsche so verletzend und schädlich: einfach lästig. Ja, die millionenfachen Lästigkeiten aus denen diese Plage besteht, die die Spieler dazu zwingt Stunden - nein, sogar Tage! - Bäume zu fällen, Weizen zu farmen und anderen solch stumpfsinnigen Tätigkeiten nachzugehen, nur um augenblicklich der erbarmungslosen Langeweile zu entfliehen und die wirklichen +booklet.actuallyadditions.chapter.intro.text.2=Freuden in Minecraftien zu erleben, zu bauen und die tiefen und fernen Welten zu entdecken bis hin zum unerforschten Reichtum, der in dieser Welt steckt. Noch nicht früher ist jemand in diese kreative Unternehmung eingetaucht als die Unannehmlichkeiten zurückkehren, wie millionen rasende, lästige Bienen, stechend, um dich herum schwirred bis das Spiel aufhört Spaß zu machen, und du bist bis in alle Ewigkeit vertrieben. Zu diesem Zweck hat ein gewisser Ellpeck +booklet.actuallyadditions.chapter.intro.text.3=dieses Actually Additions geschaffen, welches dem Spieler erlaubt, sich mehr mit den Kernerlebnissen Minecrafts zu beschäftigen - bauen und abenteuern - indem die Monotonie automatisiert und rationalisiert wird, die Minecraft plagt. Deshalb präsentiert dir Ellpeck demütig dieses Handbuch, welches dir die Funktionen dieser Modifikation zeigen und, ultimativ, dir erlauben wird, die Unbequemlichkeiten zu überwinden und Erleuchtung zu erlangen. ~by Tulkas booklet.actuallyadditions.chapter.craftingIngs.name=Werkel-Zutaten booklet.actuallyadditions.chapter.craftingIngs.text.1=Actually Additions hat viele Gegenstände, die elementare Werkel-Gegenstände benötigen um hergestellt zu werden. In diesem Kapitel sind diese alle gruppiert, so kannst du sie alle auf einem Mal sehen. From c16629b470a8f9fac0916967ee11b54740a0aeb9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 10 Feb 2016 21:07:48 +0100 Subject: [PATCH 002/322] Revert https://github.com/Ellpeck/ActuallyAdditions/commit/5272d572befbe6c3d75e57bbf2245cd37b34e532 --- .../textures/items/itemRoundedPrism.png | Bin 802 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemRoundedPrism.png diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemRoundedPrism.png b/src/main/resources/assets/actuallyadditions/textures/items/itemRoundedPrism.png deleted file mode 100644 index a2de4029f1a56ead01cf1766d351fb19c1516f28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmV+-1Ks?IP)%03B&m zSad^gZEa<4bN~PV002XBWnpw>WFU8GbZ8()Nlj2>E@cM*00M?dL_t(I%Waasi(OR| zg}<}+Irq)HXN+krRS>jD5go8eZyf?6ii}B&VrRr6iV_V2V}=kER4mLNU}0|&1tCs? zDI{XRQ6v6HBO<|h@7{aP*=Jh}OdNGpt61M+6)W&RI{MUQPy40}!-7C0P%wl~EP)(XG-%#o zW_43!dKZC|dTn@~KMpXFmmqt{j>y(e)JB8@Z_;6%( z)6bq>LBzp@Qk|b}1tKt1Be+s>A$E}m@7sY=0yE>p^Xo{%XI5s3I z0jJNE=`3<%3mT0^MBPyBw)6rP~rBrp|Q|frL+jOqn}s$(UBl{8+VTM z#EC0@?3op|d#E`hA+S6Z#-S3!1Q#d Date: Tue, 16 Feb 2016 20:14:28 +0100 Subject: [PATCH 003/322] Updated Forge to 1747 --- .gitignore | 1 + build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5fabe22c3..ae3937ec4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/rebuild.bat /doAllTheThings.bat /.gradle /build diff --git a/build.gradle b/build.gradle index 922d1dfb2..fe7e280ec 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.8.9-11.15.1.1732" + version = "1.8.9-11.15.1.1747" runDir = "idea" mappings = "stable_20" From 8bdf350a4d002ef2bee02a88ef0b701c3515fa60 Mon Sep 17 00:00:00 2001 From: canitzp Date: Tue, 16 Feb 2016 21:38:11 +0100 Subject: [PATCH 004/322] Updated JEI to 26.0.154 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index fe7e280ec..d0df01af3 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ dependencies { //compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" - deobfCompile "mezz.jei:jei_1.8.9:2.25.6.140" + deobfCompile "mezz.jei:jei_1.8.9:2.26.0.154" } processResources { From 6819c6b34b90ebf5108c153b10483311c50afcd6 Mon Sep 17 00:00:00 2001 From: canitzp Date: Tue, 16 Feb 2016 21:49:44 +0100 Subject: [PATCH 005/322] Updated to the official RF-Api for 1.8 --- src/main/java/cofh/api/CoFHAPIProps.java | 2 +- .../java/cofh/api/energy/EnergyStorage.java | 14 ++++--- .../cofh/api/energy/IEnergyConnection.java | 1 + .../java/cofh/api/energy/IEnergyHandler.java | 37 ++----------------- .../java/cofh/api/energy/IEnergyProvider.java | 13 +------ .../java/cofh/api/energy/IEnergyReceiver.java | 13 +------ .../cofh/api/energy/ItemEnergyContainer.java | 11 ++++-- .../cofh/api/energy/TileEnergyHandler.java | 8 ++-- .../java/cofh/api/energy/package-info.java | 4 +- src/main/java/cofh/api/package-info.java | 5 ++- .../mod/tile/TileEntityPhantomEnergyface.java | 3 +- 11 files changed, 36 insertions(+), 75 deletions(-) diff --git a/src/main/java/cofh/api/CoFHAPIProps.java b/src/main/java/cofh/api/CoFHAPIProps.java index 9b528304a..eb2e05ade 100644 --- a/src/main/java/cofh/api/CoFHAPIProps.java +++ b/src/main/java/cofh/api/CoFHAPIProps.java @@ -6,6 +6,6 @@ public class CoFHAPIProps { } - public static final String VERSION = "1.7.10R1.0.2"; + public static final String VERSION = "1.8.9R1.2.0B1"; } diff --git a/src/main/java/cofh/api/energy/EnergyStorage.java b/src/main/java/cofh/api/energy/EnergyStorage.java index 25e0126ab..dd7dd3e02 100644 --- a/src/main/java/cofh/api/energy/EnergyStorage.java +++ b/src/main/java/cofh/api/energy/EnergyStorage.java @@ -51,29 +51,33 @@ public class EnergyStorage implements IEnergyStorage { return nbt; } - public void setCapacity(int capacity) { + public EnergyStorage setCapacity(int capacity) { this.capacity = capacity; if (energy > capacity) { energy = capacity; } + return this; } - public void setMaxTransfer(int maxTransfer) { + public EnergyStorage setMaxTransfer(int maxTransfer) { setMaxReceive(maxTransfer); setMaxExtract(maxTransfer); + return this; } - public void setMaxReceive(int maxReceive) { + public EnergyStorage setMaxReceive(int maxReceive) { this.maxReceive = maxReceive; + return this; } - public void setMaxExtract(int maxExtract) { + public EnergyStorage setMaxExtract(int maxExtract) { this.maxExtract = maxExtract; + return this; } public int getMaxReceive() { @@ -87,7 +91,7 @@ public class EnergyStorage implements IEnergyStorage { } /** - * This function is included to allow for server -> client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers + * This function is included to allow for server to client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers * are guaranteed to have it. * * @param energy diff --git a/src/main/java/cofh/api/energy/IEnergyConnection.java b/src/main/java/cofh/api/energy/IEnergyConnection.java index 268721a92..29ef0a1ce 100644 --- a/src/main/java/cofh/api/energy/IEnergyConnection.java +++ b/src/main/java/cofh/api/energy/IEnergyConnection.java @@ -2,6 +2,7 @@ package cofh.api.energy; import net.minecraft.util.EnumFacing; + /** * Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not * accept it; otherwise just use IEnergyHandler. diff --git a/src/main/java/cofh/api/energy/IEnergyHandler.java b/src/main/java/cofh/api/energy/IEnergyHandler.java index 1f8967bea..16b236e7a 100644 --- a/src/main/java/cofh/api/energy/IEnergyHandler.java +++ b/src/main/java/cofh/api/energy/IEnergyHandler.java @@ -6,53 +6,22 @@ import net.minecraft.util.EnumFacing; * Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects. *

* A reference implementation is provided {@link TileEnergyHandler}. + *

+ * Note that {@link IEnergyReceiver} and {@link IEnergyProvider} are extensions of this. * * @author King Lemming * */ -public interface IEnergyHandler extends IEnergyProvider, IEnergyReceiver { - - // merely a convenience interface (remove these methods in 1.8; provided here for back-compat via compiler doing things) - - /** - * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver. - * - * @param from - * Orientation the energy is received from. - * @param maxReceive - * Maximum amount of energy to receive. - * @param simulate - * If TRUE, the charge will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) received. - */ - @Override - int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate); - - /** - * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider. - * - * @param from - * Orientation the energy is extracted from. - * @param maxExtract - * Maximum amount of energy to extract. - * @param simulate - * If TRUE, the extraction will only be simulated. - * @return Amount of energy that was (or would have been, if simulated) extracted. - */ - @Override - int extractEnergy(EnumFacing from, int maxExtract, boolean simulate); - +public interface IEnergyHandler extends IEnergyConnection { /** * Returns the amount of energy currently stored. */ - @Override int getEnergyStored(EnumFacing from); /** * Returns the maximum amount of energy that can be stored. */ - @Override int getMaxEnergyStored(EnumFacing from); } diff --git a/src/main/java/cofh/api/energy/IEnergyProvider.java b/src/main/java/cofh/api/energy/IEnergyProvider.java index 584c1ebcf..ef0e09d06 100644 --- a/src/main/java/cofh/api/energy/IEnergyProvider.java +++ b/src/main/java/cofh/api/energy/IEnergyProvider.java @@ -2,6 +2,7 @@ package cofh.api.energy; import net.minecraft.util.EnumFacing; + /** * Implement this interface on Tile Entities which should provide energy, generally storing it in one or more internal {@link IEnergyStorage} objects. *

@@ -10,7 +11,7 @@ import net.minecraft.util.EnumFacing; * @author King Lemming * */ -public interface IEnergyProvider extends IEnergyConnection { +public interface IEnergyProvider extends IEnergyHandler { /** * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider. @@ -25,14 +26,4 @@ public interface IEnergyProvider extends IEnergyConnection { */ int extractEnergy(EnumFacing from, int maxExtract, boolean simulate); - /** - * Returns the amount of energy currently stored. - */ - int getEnergyStored(EnumFacing from); - - /** - * Returns the maximum amount of energy that can be stored. - */ - int getMaxEnergyStored(EnumFacing from); - } diff --git a/src/main/java/cofh/api/energy/IEnergyReceiver.java b/src/main/java/cofh/api/energy/IEnergyReceiver.java index 775cc11b6..989e9baa5 100644 --- a/src/main/java/cofh/api/energy/IEnergyReceiver.java +++ b/src/main/java/cofh/api/energy/IEnergyReceiver.java @@ -2,6 +2,7 @@ package cofh.api.energy; import net.minecraft.util.EnumFacing; + /** * Implement this interface on Tile Entities which should receive energy, generally storing it in one or more internal {@link IEnergyStorage} objects. *

@@ -10,7 +11,7 @@ import net.minecraft.util.EnumFacing; * @author King Lemming * */ -public interface IEnergyReceiver extends IEnergyConnection { +public interface IEnergyReceiver extends IEnergyHandler { /** * Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver. @@ -25,14 +26,4 @@ public interface IEnergyReceiver extends IEnergyConnection { */ int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate); - /** - * Returns the amount of energy currently stored. - */ - int getEnergyStored(EnumFacing from); - - /** - * Returns the maximum amount of energy that can be stored. - */ - int getMaxEnergyStored(EnumFacing from); - } diff --git a/src/main/java/cofh/api/energy/ItemEnergyContainer.java b/src/main/java/cofh/api/energy/ItemEnergyContainer.java index 5fee42639..0fb36dab6 100644 --- a/src/main/java/cofh/api/energy/ItemEnergyContainer.java +++ b/src/main/java/cofh/api/energy/ItemEnergyContainer.java @@ -43,27 +43,30 @@ public class ItemEnergyContainer extends Item implements IEnergyContainerItem { return this; } - public void setMaxTransfer(int maxTransfer) { + public ItemEnergyContainer setMaxTransfer(int maxTransfer) { setMaxReceive(maxTransfer); setMaxExtract(maxTransfer); + return this; } - public void setMaxReceive(int maxReceive) { + public ItemEnergyContainer setMaxReceive(int maxReceive) { this.maxReceive = maxReceive; + return this; } - public void setMaxExtract(int maxExtract) { + public ItemEnergyContainer setMaxExtract(int maxExtract) { this.maxExtract = maxExtract; + return this; } /* IEnergyContainerItem */ @Override public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { - if (container.getTagCompound() == null) { + if (!container.hasTagCompound()) { container.setTagCompound(new NBTTagCompound()); } int energy = container.getTagCompound().getInteger("Energy"); diff --git a/src/main/java/cofh/api/energy/TileEnergyHandler.java b/src/main/java/cofh/api/energy/TileEnergyHandler.java index 175ee6676..3ba60a664 100644 --- a/src/main/java/cofh/api/energy/TileEnergyHandler.java +++ b/src/main/java/cofh/api/energy/TileEnergyHandler.java @@ -5,12 +5,14 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; /** - * Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own. + * Reference implementation of {@link IEnergyReceiver} and {@link IEnergyProvider}. Use/extend this or implement your own. + * + * This class is really meant to summarize how each interface is properly used. * * @author King Lemming * */ -public class TileEnergyHandler extends TileEntity implements IEnergyHandler { +public class TileEnergyHandler extends TileEntity implements IEnergyReceiver, IEnergyProvider { protected EnergyStorage storage = new EnergyStorage(32000); @@ -49,7 +51,7 @@ public class TileEnergyHandler extends TileEntity implements IEnergyHandler { return storage.extractEnergy(maxExtract, simulate); } - /* IEnergyReceiver and IEnergyProvider */ + /* IEnergyHandler */ @Override public int getEnergyStored(EnumFacing from) { diff --git a/src/main/java/cofh/api/energy/package-info.java b/src/main/java/cofh/api/energy/package-info.java index 880844fca..da8566735 100644 --- a/src/main/java/cofh/api/energy/package-info.java +++ b/src/main/java/cofh/api/energy/package-info.java @@ -1,10 +1,10 @@ /** - * (C) 2014 Team CoFH / CoFH / Cult of the Full Hub + * (C) 2014-2016 Team CoFH / CoFH / Cult of the Full Hub * http://www.teamcofh.com */ @API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHAPI", provides = "CoFHAPI|energy") package cofh.api.energy; -import cofh.api.CoFHAPIProps; import net.minecraftforge.fml.common.API; +import cofh.api.CoFHAPIProps; diff --git a/src/main/java/cofh/api/package-info.java b/src/main/java/cofh/api/package-info.java index 25e1ecc5d..e2847daad 100644 --- a/src/main/java/cofh/api/package-info.java +++ b/src/main/java/cofh/api/package-info.java @@ -1,8 +1,9 @@ /** - * (C) 2014 Team CoFH / CoFH / Cult of the Full Hub + * (C) 2014-2016 Team CoFH / CoFH / Cult of the Full Hub * http://www.teamcofh.com */ @API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHLib", provides = "CoFHAPI") package cofh.api; -import net.minecraftforge.fml.common.API; \ No newline at end of file +import net.minecraftforge.fml.common.API; + diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 7d4599288..4c740631c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import cofh.api.energy.IEnergyHandler; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; @@ -18,7 +17,7 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -public class TileEntityPhantomEnergyface extends TileEntityPhantomface implements IEnergyHandler{ +public class TileEntityPhantomEnergyface extends TileEntityPhantomface implements IEnergyReceiver, IEnergyProvider{ public TileEntityPhantomEnergyface(){ super("energyface"); From b9262df154f1cad08cf39197604f41af4bf585f8 Mon Sep 17 00:00:00 2001 From: canitzp Date: Wed, 17 Feb 2016 20:32:02 +0100 Subject: [PATCH 006/322] Fixed the Tool JSONs --- .../actuallyadditions/models/item/itemAxeCrystalBlack.json | 6 +++--- .../actuallyadditions/models/item/itemAxeCrystalBlue.json | 6 +++--- .../actuallyadditions/models/item/itemAxeCrystalGreen.json | 6 +++--- .../models/item/itemAxeCrystalLightBlue.json | 6 +++--- .../actuallyadditions/models/item/itemAxeCrystalRed.json | 6 +++--- .../actuallyadditions/models/item/itemAxeCrystalWhite.json | 6 +++--- .../actuallyadditions/models/item/itemAxeEmerald.json | 6 +++--- .../actuallyadditions/models/item/itemAxeObsidian.json | 6 +++--- .../assets/actuallyadditions/models/item/itemAxeQuartz.json | 6 +++--- .../actuallyadditions/models/item/itemCrafterOnAStick.json | 2 +- .../actuallyadditions/models/item/itemDrillBlack.json | 6 +++--- .../assets/actuallyadditions/models/item/itemDrillBlue.json | 6 +++--- .../actuallyadditions/models/item/itemDrillBrown.json | 6 +++--- .../assets/actuallyadditions/models/item/itemDrillCyan.json | 6 +++--- .../assets/actuallyadditions/models/item/itemDrillGray.json | 6 +++--- .../actuallyadditions/models/item/itemDrillGreen.json | 6 +++--- .../actuallyadditions/models/item/itemDrillLightBlue.json | 6 +++--- .../actuallyadditions/models/item/itemDrillLightGray.json | 6 +++--- .../assets/actuallyadditions/models/item/itemDrillLime.json | 6 +++--- .../actuallyadditions/models/item/itemDrillMagenta.json | 6 +++--- .../actuallyadditions/models/item/itemDrillOrange.json | 6 +++--- .../assets/actuallyadditions/models/item/itemDrillPink.json | 6 +++--- .../actuallyadditions/models/item/itemDrillPurple.json | 6 +++--- .../assets/actuallyadditions/models/item/itemDrillRed.json | 6 +++--- .../actuallyadditions/models/item/itemHoeCrystalBlack.json | 6 +++--- .../actuallyadditions/models/item/itemHoeCrystalGreen.json | 6 +++--- .../models/item/itemHoeCrystalLightBlue.json | 6 +++--- .../actuallyadditions/models/item/itemHoeCrystalRed.json | 6 +++--- .../actuallyadditions/models/item/itemHoeCrystalWhite.json | 6 +++--- .../actuallyadditions/models/item/itemHoeCrystalblue.json | 6 +++--- .../actuallyadditions/models/item/itemHoeEmerald.json | 6 +++--- .../actuallyadditions/models/item/itemHoeObsidian.json | 6 +++--- .../assets/actuallyadditions/models/item/itemHoeQuartz.json | 6 +++--- .../assets/actuallyadditions/models/item/itemKnife.json | 6 +++--- .../actuallyadditions/models/item/itemLaserWrench.json | 4 ++-- .../assets/actuallyadditions/models/item/itemPaxel.json | 6 +++--- .../models/item/itemPickaxeCrystalBlack.json | 6 +++--- .../models/item/itemPickaxeCrystalBlue.json | 6 +++--- .../models/item/itemPickaxeCrystalGreen.json | 6 +++--- .../models/item/itemPickaxeCrystalLightBlue.json | 6 +++--- .../models/item/itemPickaxeCrystalRed.json | 6 +++--- .../models/item/itemPickaxeCrystalWhite.json | 6 +++--- .../actuallyadditions/models/item/itemPickaxeEmerald.json | 6 +++--- .../actuallyadditions/models/item/itemPickaxeObsidian.json | 6 +++--- .../actuallyadditions/models/item/itemPickaxeQuartz.json | 6 +++--- .../models/item/itemShovelCrystalBlack.json | 6 +++--- .../models/item/itemShovelCrystalBlue.json | 6 +++--- .../models/item/itemShovelCrystalGreen.json | 6 +++--- .../models/item/itemShovelCrystalLightBlue.json | 6 +++--- .../actuallyadditions/models/item/itemShovelCrystalRed.json | 6 +++--- .../models/item/itemShovelCrystalWhite.json | 6 +++--- .../actuallyadditions/models/item/itemShovelEmerald.json | 6 +++--- .../actuallyadditions/models/item/itemShovelObsidian.json | 6 +++--- .../actuallyadditions/models/item/itemShovelQuartz.json | 6 +++--- .../models/item/itemSwordCrystalBlack.json | 6 +++--- .../actuallyadditions/models/item/itemSwordCrystalBlue.json | 6 +++--- .../models/item/itemSwordCrystalGreen.json | 6 +++--- .../models/item/itemSwordCrystalLightBlue.json | 6 +++--- .../actuallyadditions/models/item/itemSwordCrystalRed.json | 6 +++--- .../models/item/itemSwordCrystalWhite.json | 6 +++--- .../actuallyadditions/models/item/itemSwordEmerald.json | 6 +++--- .../actuallyadditions/models/item/itemSwordObsidian.json | 6 +++--- .../actuallyadditions/models/item/itemSwordQuartz.json | 6 +++--- 63 files changed, 186 insertions(+), 186 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json index 4f98f4397..842a36f0d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json index 4c212b4ef..1161ff3bd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json index 556a66efd..5d2172cb9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json index 89f49fe1e..95c464ffa 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json index 1cb650176..8f61de42f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json index bee2a16b1..a78093197 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json index 7e6cdc255..07133a050 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json index eec9cf3bf..36ae965b7 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json index f4d64c458..eb6dc3a3d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrafterOnAStick.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrafterOnAStick.json index 81db3445f..f988bba3f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrafterOnAStick.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrafterOnAStick.json @@ -5,7 +5,7 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], + "rotation": [ 0, 90, -35 ], "translation": [ 0, 1, -3 ], "scale": [ 0.55, 0.55, 0.55 ] }, diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json index 681c54fea..dc9878249 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json index f1c323f28..7d20a66b3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json index 5848ed5ca..f6e750431 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json index 54f1e58b6..40a300df5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json index 6d151a083..ddf67eb04 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json index b59b23bf2..02e620bd5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json index 79cf0516d..f2be7ae87 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json index 826c31cb2..bc09f0d84 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json index cf6f8c952..b8c9bd6d5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json index b07f6b08e..2b9e40557 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json index 4de274a3f..30d6f5c66 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json index e90ef690e..38a039ece 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json index fa524fa85..e916e17a3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json index e0a420b9b..98efbe6d9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json index 083f0244f..d7df123a3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json index 38502c282..7b60b1612 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json index c47310bd7..9ef20e126 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json index 3abdd74ad..b99a73bcf 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json index f68baefa5..c752ce004 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalblue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalblue.json index e79636060..7291c5994 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalblue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalblue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json index 62747b29b..a63ca7961 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json index 8f6a3b766..e2d35b754 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json index 74f38d03a..d14b0e1cb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemKnife.json b/src/main/resources/assets/actuallyadditions/models/item/itemKnife.json index 81ffc94b6..732fa7bbb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemKnife.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemKnife.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 180, 90, -35 ], + "translation": [ 0, 0, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json b/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json index 1019bdcd4..a8921e7c8 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json @@ -5,8 +5,8 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], "scale": [ 0.55, 0.55, 0.55 ] }, "firstperson": { diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json b/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json index ff9925e9e..173bf85d1 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json @@ -6,9 +6,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -4.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json index a0712b0a0..a3a260102 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json index b63d3202b..0e9300ed6 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json index 48c186437..f114a7b7c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json index 9e8fd0fc8..9eacb99c4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json index ab913e50d..fc2a24ef1 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json index fb7d66be8..c9258e25c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json index d6278082d..59878c75d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json index 131104662..9c3abf2cc 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json index ffd45f524..4a55157b8 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json index ac520e37c..c14fea2a9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json index da7eb699e..4d229fe2a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json index 615b9a346..8bab6a502 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json index 2c8303371..57df3d027 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json index bdba83a91..b184f813f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json index 28d29b841..b798baf3a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json index f20613711..176d8ed43 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json index 46fc160b3..c28dafe2a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json index ef1374004..a041a770e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json index b72ce7100..d1fec6526 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json index 3db1d6962..db2307a34 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json index dacd56119..fad045c4b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json index 5145fb179..148871f1a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json index 6c05bcefc..8d8985dfd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json index 1aae51b75..4e25faca8 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json index 78805d798..76f90708b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json index bd1439eb6..c288e204f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json index 7cc679035..96efd9828 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json @@ -5,9 +5,9 @@ }, "display": { "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] + "rotation": [ 0, 90, -35 ], + "translation": [ 0, 1.25, -3.5 ], + "scale": [ 0.85, 0.85, 0.85 ] }, "firstperson": { "rotation": [ 0, -135, 25 ], From 1664ce22e3c33665501c21f461f3c77a8fbfd422 Mon Sep 17 00:00:00 2001 From: canitzp Date: Wed, 17 Feb 2016 21:45:02 +0100 Subject: [PATCH 007/322] Reactivated AtomicReconstructor Lens Renderer --- .../mod/blocks/render/RenderSmileyCloud.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 36ded7504..3c2f5e3ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -10,17 +10,22 @@ package de.ellpeck.actuallyadditions.mod.blocks.render; +import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; //TODO Fix Smiley Cloud public class RenderSmileyCloud extends TileEntitySpecialRenderer{ - //private static final ResourceLocation resLocValentine = new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/blocks/models/modelPinkFluffyUnicloud.png"); + private static final ResourceLocation resLocValentine = new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/blocks/models/modelPinkFluffyUnicloud.png"); @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int partial){ - /*if(!(tile instanceof TileEntitySmileyCloud)){ + if(!(tile instanceof TileEntitySmileyCloud)){ return; } TileEntitySmileyCloud theCloud = (TileEntitySmileyCloud)tile; @@ -49,6 +54,7 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GlStateManager.translate(0.0F, -2F, 0.0F); + /* GlStateManager.pushMatrix(); { if(theModel.doesRotate()){ @@ -90,6 +96,7 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ } } GlStateManager.popMatrix(); + */ if(theCloud.name != null && !theCloud.name.isEmpty() && !Minecraft.getMinecraft().gameSettings.hideGUI){ GlStateManager.pushMatrix(); @@ -108,10 +115,11 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ GlStateManager.depthMask(false); GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + /* //TODO Fix nameplate with Smiley Cloud - Tessellator tessellator = Tessellator.getInstance(); - GlStateManager.glDisable(GlStateManager.GL_TEXTURE_2D); - tessellator.startDrawingQuads(); + WorldRenderer tessy = Tessellator.getInstance().getWorldRenderer(); + //GlStateManager.disable(GlStateManager.GL_TEXTURE_2D); + tessy.st int i = Minecraft.getMinecraft().fontRendererObj.getStringWidth(theCloud.name)/2; tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); tessellator.addVertex(-i-1, -1.0D, 0.0D); @@ -128,12 +136,12 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ GlStateManager.disableBlend(); GlStateManager.color(1F, 1F, 1F, 1F); GlStateManager.scale(1F/-f1, 1F/-f1, 1F/f1); + */ } GlStateManager.popMatrix(); } } GlStateManager.popMatrix(); - */ } } From 0600c56355c4fcd90e9c49fa6a5ce9c4e6b7653f Mon Sep 17 00:00:00 2001 From: canitzp Date: Wed, 17 Feb 2016 21:45:19 +0100 Subject: [PATCH 008/322] Reactivated AtomicReconstructor Lens Renderer --- .../render/RenderReconstructorLens.java | 10 ++- .../mod/proxy/ClientProxy.java | 15 +++-- .../models/block/blockCompost.json | 66 +++++++++---------- 3 files changed, 52 insertions(+), 39 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index 627119a37..ff9ec5112 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -11,7 +11,13 @@ package de.ellpeck.actuallyadditions.mod.blocks.render; +import de.ellpeck.actuallyadditions.api.lens.ILensItem; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; //TODO Fix Reconstructor Lens rendering @@ -19,7 +25,7 @@ public class RenderReconstructorLens extends TileEntitySpecialRenderer{ @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int par6){ - /*if(!(tile instanceof TileEntityAtomicReconstructor)){ + if(!(tile instanceof TileEntityAtomicReconstructor)){ return; } ItemStack stack = ((TileEntityAtomicReconstructor)tile).getStackInSlot(0); @@ -61,6 +67,6 @@ public class RenderReconstructorLens extends TileEntitySpecialRenderer{ AssetUtil.renderItemInWorld(stack); GlStateManager.popMatrix(); - }*/ + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index a33b7322e..1c3d380a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -15,16 +15,22 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; +import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; +import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; +import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; @@ -35,9 +41,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.client.registry.ClientRegistry; 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.registry.VillagerRegistry; import java.io.File; import java.util.Calendar; @@ -127,15 +135,14 @@ public class ClientProxy implements IProxy{ //TODO Fix Tile rendering /*ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompost.class, new RenderTileEntity(new ModelCompost())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFishingNet.class, new RenderTileEntity(new ModelFishingNet())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFurnaceSolar.class, new RenderTileEntity(new ModelFurnaceSolar())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCoffeeMachine.class, new RenderTileEntity(new ModelCoffeeMachine())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPhantomBooster.class, new RenderTileEntity(new ModelPhantomBooster())); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud(new ModelSmileyCloud())); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaserRelay.class, new RenderLaserRelay(new ModelLaserRelay())); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBookletStand.class, new RenderTileEntity(new ModelBookletStand())); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens());*/ + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud()); + //TODO Fix villager //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/entity/villager/jamVillager.png")); diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCompost.json b/src/main/resources/assets/actuallyadditions/models/block/blockCompost.json index cfbf9d3b0..66fa0bc77 100644 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCompost.json +++ b/src/main/resources/assets/actuallyadditions/models/block/blockCompost.json @@ -1,6 +1,6 @@ { "__createdBy": "canitzp", - "ambientocclusion": true, + "ambientocclusion": false, "textures": { "particle": "blocks/planks_oak", "compost": "actuallyadditions:blocks/models/modelCompost" @@ -16,7 +16,7 @@ }, "down": { "uv": [0.0,0.0,2.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0,0.2,1.2,3.625], @@ -46,7 +46,7 @@ }, "down": { "uv": [0.0,0.0,2.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0,0.4,1.2,3.625], @@ -76,7 +76,7 @@ }, "down": { "uv": [0.0,0.0,2.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0,0.2,1.2,3.625], @@ -106,7 +106,7 @@ }, "down": { "uv": [0.0,0.0,2.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0,0.2,1.2,3.625], @@ -136,7 +136,7 @@ }, "down": { "uv": [0.0,0.0,1.0,10.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0,0.6,8.4,1.6], @@ -148,11 +148,11 @@ }, "north": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "south": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" } } }, @@ -166,15 +166,15 @@ }, "down": { "uv": [0.0,0.0,10.0,1.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "east": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "north": { "uv": [0,1.375,7.5,2.125], @@ -196,7 +196,7 @@ }, "down": { "uv": [0.0,0.0,1.0,10.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0,1.375,7.5,2.125], @@ -208,11 +208,11 @@ }, "north": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "south": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" } } }, @@ -226,15 +226,15 @@ }, "down": { "uv": [0.0,0.0,10.0,1.0], - "texture": "missingtexture" + "texture": "#compost" }, "west": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "east": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "north": { "uv": [0,1.375,7.5,2.125], @@ -260,11 +260,11 @@ }, "west": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "east": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "north": { "uv": [0,1.375,7.5,2.125], @@ -328,11 +328,11 @@ }, "north": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "south": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" } } }, @@ -350,11 +350,11 @@ }, "west": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "east": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "north": { "uv": [0,1.375,7.5,2.125], @@ -388,11 +388,11 @@ }, "north": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "south": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" } } }, @@ -418,11 +418,11 @@ }, "north": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "south": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" } } }, @@ -440,11 +440,11 @@ }, "west": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "east": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "north": { "uv": [0,1.375,7.5,2], @@ -470,11 +470,11 @@ }, "west": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "east": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "north": { "uv": [0,1.375,7.5,2], @@ -508,11 +508,11 @@ }, "north": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" }, "south": { "uv": [0.0,0.0,1.0,2.0], - "texture": "missingtexture" + "texture": "#compost" } } } From 57c37cb9008d208780b8d4500c3dff6c5377c13b Mon Sep 17 00:00:00 2001 From: canitzp Date: Wed, 17 Feb 2016 23:15:56 +0100 Subject: [PATCH 009/322] Rewrite the SmileyCloud Renderer --- .../mod/blocks/BlockSmileyCloud.java | 2 +- .../mod/blocks/render/RenderSmileyCloud.java | 132 ++---- .../mod/misc/cloud/SmileyCloudEasterEggs.java | 10 +- .../mod/tile/TileEntitySmileyCloud.java | 13 + .../actuallyadditions/mod/util/AssetUtil.java | 41 ++ .../blockstates/blockSmileyCloud.json | 6 +- .../models/block/blockSmileyCloudFluffy.json | 411 ++++++++++++++++++ 7 files changed, 521 insertions(+), 94 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockSmileyCloudFluffy.json diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index dadc6f880..708696175 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -38,7 +38,7 @@ import java.util.Random; public class BlockSmileyCloud extends BlockContainerBase{ - private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, 7); public BlockSmileyCloud(String name){ super(Material.cloth, name); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 3c2f5e3ae..5387cd9ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -10,28 +10,24 @@ package de.ellpeck.actuallyadditions.mod.blocks.render; +import de.ellpeck.actuallyadditions.mod.misc.cloud.ISmileyCloudEasterEgg; +import de.ellpeck.actuallyadditions.mod.misc.cloud.SmileyCloudEasterEggs; +import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -//TODO Fix Smiley Cloud public class RenderSmileyCloud extends TileEntitySpecialRenderer{ - private static final ResourceLocation resLocValentine = new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/blocks/models/modelPinkFluffyUnicloud.png"); - @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int partial){ - if(!(tile instanceof TileEntitySmileyCloud)){ - return; - } - TileEntitySmileyCloud theCloud = (TileEntitySmileyCloud)tile; - - GlStateManager.pushMatrix(); - { + if(tile instanceof TileEntitySmileyCloud){ + TileEntitySmileyCloud theCloud = (TileEntitySmileyCloud)tile; if(theCloud.flyHeight == 0){ theCloud.flyHeight = tile.getWorld().rand.nextInt(30)+30; } @@ -42,6 +38,7 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ if(time-bobHeight >= theCloud.lastFlyHeight){ theCloud.lastFlyHeight = time; } + GlStateManager.pushMatrix(); if(time-(bobHeight/2) >= theCloud.lastFlyHeight){ GlStateManager.translate(0, (time-theCloud.lastFlyHeight)/300, 0); @@ -50,98 +47,55 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ GlStateManager.translate(0, -(time-theCloud.lastFlyHeight)/300+(double)bobHeight/300, 0); } + GlStateManager.translate((float)x+0.5F, (float)y-0.5F, (float)z+0.5F); GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GlStateManager.translate(0.0F, -2F, 0.0F); - /* - GlStateManager.pushMatrix(); - { - if(theModel.doesRotate()){ - int meta = PosUtil.getMetadata(tile.getPos(), tile.getWorld()); - if(meta == 0){ - GlStateManager.rotate(180F, 0F, 1F, 0F); - } - if(meta == 1){ - GlStateManager.rotate(90F, 0F, 1F, 0F); - } - if(meta == 3){ - GlStateManager.rotate(270F, 0F, 1F, 0F); - } - } + if(ClientProxy.bulletForMyValentine || (theCloud.name != null && !theCloud.name.isEmpty() && theCloud.name.equals("Pink Fluffy Unicloud"))){ + theCloud.setPinkAndFluffy(); + } else { + theCloud.setNormalCloud(); + } - if(ClientProxy.bulletForMyValentine || (theCloud.name != null && !theCloud.name.isEmpty() && theCloud.name.equals("Pink Fluffy Unicloud"))){ - this.bindTexture(resLocValentine); - } - else{ - this.bindTexture(resLoc); - } - - theModel.render(0.0625F); - - if(theCloud.name != null && !theCloud.name.isEmpty()){ - for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ - boolean canBreak = false; - for(String triggerName : cloud.getTriggerNames()){ - if(StringUtil.equalsToLowerCase(triggerName, theCloud.name)){ - cloud.renderExtra(0.0625F); - canBreak = true; - break; + if(theCloud.name != null && !theCloud.name.isEmpty()){ + for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ + boolean canBreak = false; + for(String triggerName : cloud.getTriggerNames()){ + if(StringUtil.equalsToLowerCase(triggerName, theCloud.name)){ + GlStateManager.pushMatrix(); + switch (PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ + case 1: { + GlStateManager.rotate(180, 0, 1, 0); + break; + } + case 2: { + GlStateManager.rotate(270, 0, 1, 0); + break; + } + case 3: { + GlStateManager.rotate(90, 0, 1, 0); + break; + } } - } - if(canBreak){ + cloud.renderExtra(0.0625F); + GlStateManager.popMatrix(); + canBreak = true; break; } } + if(canBreak){ + break; + } } } GlStateManager.popMatrix(); - */ - if(theCloud.name != null && !theCloud.name.isEmpty() && !Minecraft.getMinecraft().gameSettings.hideGUI){ - GlStateManager.pushMatrix(); - { - GlStateManager.translate(0F, 0.1F, 0F); - GlStateManager.rotate(180F, 1F, 0F, 0F); - GlStateManager.rotate(180F, 0F, 1F, 0F); - - GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F); - float f = 1.6F; - float f1 = 0.016666668F*f; - GlStateManager.scale(-f1, -f1, f1); - GlStateManager.disableLighting(); - GlStateManager.translate(0.0F, 0F/f1, 0.0F); - GlStateManager.depthMask(false); - GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - /* - //TODO Fix nameplate with Smiley Cloud - WorldRenderer tessy = Tessellator.getInstance().getWorldRenderer(); - //GlStateManager.disable(GlStateManager.GL_TEXTURE_2D); - tessy.st - int i = Minecraft.getMinecraft().fontRendererObj.getStringWidth(theCloud.name)/2; - tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); - tessellator.addVertex(-i-1, -1.0D, 0.0D); - tessellator.addVertex(-i-1, 8.0D, 0.0D); - tessellator.addVertex(i+1, 8.0D, 0.0D); - tessellator.addVertex(i+1, -1.0D, 0.0D); - tessellator.draw(); - GlStateManager.glEnable(GlStateManager.GL_TEXTURE_2D); - GlStateManager.depthMask(true); - - Minecraft.getMinecraft().fontRendererObj.drawString(theCloud.name, -Minecraft.getMinecraft().fontRendererObj.getStringWidth(theCloud.name)/2, 0, StringUtil.DECIMAL_COLOR_WHITE); - - GlStateManager.enableLighting(); - GlStateManager.disableBlend(); - GlStateManager.color(1F, 1F, 1F, 1F); - GlStateManager.scale(1F/-f1, 1F/-f1, 1F/f1); - */ - } - GlStateManager.popMatrix(); + if(theCloud.name != null && !theCloud.name.isEmpty() && !Minecraft.getMinecraft().gameSettings.hideGUI) { + AssetUtil.renderNameTag(theCloud.name, x + 0.5F, y + 1.3F, z + 0.66); } + } - GlStateManager.popMatrix(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 6907bb2ac..9dce6a3b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -10,12 +10,14 @@ package de.ellpeck.actuallyadditions.mod.misc.cloud; +import de.ellpeck.actuallyadditions.mod.blocks.BlockSmileyCloud; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -378,11 +380,10 @@ public class SmileyCloudEasterEggs{ private static void renderHoldingItem(boolean leftHand, ItemStack stack){ GlStateManager.pushMatrix(); - GlStateManager.rotate(180F, 0F, 0F, 1F); - GlStateManager.rotate(270F, 0F, 1F, 0F); + GlStateManager.rotate(90, 0, 1, 0); GlStateManager.translate(0F, -1.5F, 0F); - GlStateManager.translate(-0.5F, 0.2F, leftHand ? 0.55F : -0.5F); + GlStateManager.translate(0, 0.2F, leftHand ? -0.5F : 0.55F); GlStateManager.scale(0.75F, 0.75F, 0.75F); AssetUtil.renderItemInWorld(stack); @@ -398,6 +399,9 @@ public class SmileyCloudEasterEggs{ GlStateManager.rotate(180F, 1F, 0F, 0F); GlStateManager.rotate(rotation, 0F, 1F, 0F); + double boop = Minecraft.getSystemTime()/1000D; + GlStateManager.rotate((float)(((boop*40D)%360)), 0, 1, 0); + AssetUtil.renderBlockInWorld(block, meta); GlStateManager.enableLighting(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index db120168a..10a0b59d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -10,7 +10,9 @@ package de.ellpeck.actuallyadditions.mod.tile; +import de.ellpeck.actuallyadditions.mod.blocks.BlockSmileyCloud; import de.ellpeck.actuallyadditions.mod.network.gui.IStringReactor; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.relauncher.Side; @@ -56,4 +58,15 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac public void onTextReceived(String text, int textID, EntityPlayer player){ this.name = text; } + + public void setPinkAndFluffy(){ + if(PosUtil.getMetadata(this.pos, this.worldObj) <= 3) + PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj) + 4, 2); + } + + public void setNormalCloud(){ + if(PosUtil.getMetadata(this.pos, this.worldObj) >= 4) + PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj) - 4, 2); + } + } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 9babd4f7f..fdcdda71f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -114,4 +114,45 @@ public class AssetUtil{ GlStateManager.enableAlpha(); GlStateManager.enableTexture2D(); } + + public static void renderNameTag(String tag, float x, float y, float z){ + FontRenderer fontrenderer = Minecraft.getMinecraft().fontRendererObj; + float f = 1.6F; + float f1 = 0.016666668F * f; + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, z); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F); + GlStateManager.scale(-f1, -f1, f1); + GlStateManager.disableLighting(); + GlStateManager.depthMask(false); + GlStateManager.disableDepth(); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + int i = 0; + int j = fontrenderer.getStringWidth(tag) / 2; + GlStateManager.disableTexture2D(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); + worldrenderer.pos((double) (-j - 1), (double) (-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + worldrenderer.pos((double) (-j - 1), (double) (8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + worldrenderer.pos((double) (j + 1), (double) (8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + worldrenderer.pos((double) (j + 1), (double) (-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + tessellator.draw(); + GlStateManager.enableTexture2D(); + fontrenderer.drawString(tag, -fontrenderer.getStringWidth(tag) / 2, i, 553648127); + GlStateManager.enableDepth(); + GlStateManager.depthMask(true); + fontrenderer.drawString(tag, -fontrenderer.getStringWidth(tag) / 2, i, -1); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.popMatrix(); + } + + public static void renderNameTag(String tag, double x, double y, double z){ + renderNameTag(tag, (float) x, (float) y, (float) z); + } } diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json b/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json index c4508ef62..200fa9ee3 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json @@ -3,6 +3,10 @@ "meta=0": { "model": "actuallyadditions:blockSmileyCloud", "y": 0 }, "meta=1": { "model": "actuallyadditions:blockSmileyCloud", "y": 180 }, "meta=2": { "model": "actuallyadditions:blockSmileyCloud", "y": -90 }, - "meta=3": { "model": "actuallyadditions:blockSmileyCloud", "y": 90 } + "meta=3": { "model": "actuallyadditions:blockSmileyCloud", "y": 90 }, + "meta=4": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": 0 }, + "meta=5": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": 180 }, + "meta=6": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": -90 }, + "meta=7": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": 90 } } } diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockSmileyCloudFluffy.json b/src/main/resources/assets/actuallyadditions/models/block/blockSmileyCloudFluffy.json new file mode 100644 index 000000000..b665bf730 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockSmileyCloudFluffy.json @@ -0,0 +1,411 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/models/modelPinkFluffyUnicloud", + "smileycloud": "actuallyadditions:blocks/models/modelPinkFluffyUnicloud" + }, + "elements": [ + { + "from": [2,0,3], + "to": [14,10,13], + "faces": { + "up": { + "uv": [5,0.75,8,3.25], + "texture": "#smileycloud" + }, + "down": { + "uv": [3.5,1.5,6.5,4], + "texture": "#smileycloud" + }, + "west": { + "uv": [0,2.5,2.5,5], + "texture": "#smileycloud" + }, + "east": { + "uv": [8.5,2.5,11,5], + "texture": "#smileycloud" + }, + "north": { + "uv": [2.75,0.25,5.75,2.75], + "texture": "#smileycloud" + }, + "south": { + "uv": [5.25,0.25,8.25,2.75], + "texture": "#smileycloud" + } + } + }, + { + "from": [1,1,4], + "to": [15,9,12], + "faces": { + "up": { + "uv": [6.5,2,7,4], + "texture": "#smileycloud" + }, + "down": { + "uv": [1.25,2.75,1.75,4.75], + "texture": "#smileycloud" + }, + "west": { + "uv": [13.75,2,15.75,4], + "texture": "#smileycloud" + }, + "east": { + "uv": [11.25,2,13.25,4], + "texture": "#smileycloud" + }, + "north": { + "uv": [13.75,2.75,14.25,4.75], + "texture": "#smileycloud" + }, + "south": { + "uv": [6.25,1.5,6.75,3.5], + "texture": "#smileycloud" + } + } + }, + { + "from": [0,2,5], + "to": [16,8,11], + "faces": { + "up": { + "uv": [12.75,2.25,13.25,3.75], + "texture": "#smileycloud" + }, + "down": { + "uv": [13.5,2.5,14,4], + "texture": "#smileycloud" + }, + "west": { + "uv": [13.25,4.25,14.75,5.75], + "texture": "#smileycloud" + }, + "east": { + "uv": [11.5,4,13,5.5], + "texture": "#smileycloud" + }, + "north": { + "uv": [13.75,3,14.25,4.5], + "texture": "#smileycloud" + }, + "south": { + "uv": [6.25,1.75,6.75,3.25], + "texture": "#smileycloud" + } + } + }, + { + "from": [3,9,4], + "to": [13,11,12], + "faces": { + "up": { + "uv": [0.25,2.75,2.75,4.75], + "texture": "#smileycloud" + }, + "west": { + "uv": [4,3,6,3.5], + "texture": "#smileycloud" + }, + "east": { + "uv": [0.75,10,2.75,10.5], + "texture": "#smileycloud" + }, + "north": { + "uv": [8.75,7.5,11.25,8], + "texture": "#smileycloud" + }, + "south": { + "uv": [7,5.75,9.5,6.25], + "texture": "#smileycloud" + } + } + }, + { + "from": [4,10,5], + "to": [12,12,11], + "faces": { + "up": { + "uv": [8.75,7,10.75,8.5], + "texture": "#smileycloud" + }, + "west": { + "uv": [8,5.5,9.5,6], + "texture": "#smileycloud" + }, + "east": { + "uv": [7,5.5,8.5,6], + "texture": "#smileycloud" + }, + "north": { + "uv": [12,5,14.25,5.5], + "texture": "#smileycloud" + }, + "south": { + "uv": [3,3.25,5,3.75], + "texture": "#smileycloud" + } + } + }, + { + "from": [3,1,12], + "to": [13,9,14], + "faces": { + "up": { + "uv": [11.75,3.75,14.25,4.25], + "texture": "#smileycloud" + }, + "down": { + "uv": [7.75,3.25,10.25,3.75], + "texture": "#smileycloud" + }, + "west": { + "uv": [13.25,2.5,13.75,4.5], + "texture": "#smileycloud" + }, + "east": { + "uv": [6.75,2,7.25,4], + "texture": "#smileycloud" + }, + "south": { + "uv": [3.75,1,6.25,3], + "texture": "#smileycloud" + } + } + }, + { + "from": [4,2,13], + "to": [12,8,15], + "faces": { + "up": { + "uv": [2,6.25,4,6.75], + "texture": "#smileycloud" + }, + "down": { + "uv": [9.5,7.75,11.5,8.25], + "texture": "#smileycloud" + }, + "west": { + "uv": [14.75,2.25,15.25,3.75], + "texture": "#smileycloud" + }, + "east": { + "uv": [13.25,2.5,13.75,4], + "texture": "#smileycloud" + }, + "south": { + "uv": [3,5.5,5,7], + "texture": "#smileycloud" + } + } + }, + { + "from": [5,3,14], + "to": [11,7,16], + "faces": { + "up": { + "uv": [7.25,5.5,8.75,6], + "texture": "#smileycloud" + }, + "down": { + "uv": [12.75,3,14.25,3.5], + "texture": "#smileycloud" + }, + "west": { + "uv": [8.25,7.25,8.75,8.25], + "texture": "#smileycloud" + }, + "east": { + "uv": [10.75,7,11.25,8], + "texture": "#smileycloud" + }, + "south": { + "uv": [12.5,2.75,14,3.75], + "texture": "#smileycloud" + } + } + }, + { + "from": [5,3,2.5], + "to": [11,4,4.5], + "faces": { + "up": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "down": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "west": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "east": { + "uv": [4.5,10.25,4.75,10.5], + "texture": "#smileycloud" + }, + "north": { + "uv": [4.25,10.25,4.75,10.5], + "texture": "#smileycloud" + } + } + }, + { + "from": [11,4,2.5], + "to": [12,5,4.5], + "faces": { + "up": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "down": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "west": { + "uv": [4.5,10.25,4.75,10.5], + "texture": "#smileycloud" + }, + "east": { + "uv": [4.5,10.25,4.75,10.5], + "texture": "#smileycloud" + }, + "north": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + } + } + }, + { + "from": [4,4,2.5], + "to": [5,5,4.5], + "faces": { + "up": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "down": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "west": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "east": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "north": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + } + } + }, + { + "from": [9,7,2.75], + "to": [11,9,3.75], + "faces": { + "up": { + "uv": [7.75,9.25,8.25,9.5], + "texture": "#smileycloud" + }, + "down": { + "uv": [7.75,9.5,8.25,9.75], + "texture": "#smileycloud" + }, + "west": { + "uv": [7.75,9.25,8,9.75], + "texture": "#smileycloud" + }, + "east": { + "uv": [7.75,9.25,8,9.75], + "texture": "#smileycloud" + }, + "north": { + "uv": [7.75,9.25,8.25,9.75], + "texture": "#smileycloud" + } + } + }, + { + "from": [5,7,2.75], + "to": [7,9,3.75], + "faces": { + "up": { + "uv": [7.75,9.5,8.25,9.75], + "texture": "#smileycloud" + }, + "down": { + "uv": [7.75,9.5,8.25,9.75], + "texture": "#smileycloud" + }, + "west": { + "uv": [8,9.25,8.25,9.75], + "texture": "#smileycloud" + }, + "east": { + "uv": [7.75,9.25,8,9.75], + "texture": "#smileycloud" + }, + "north": { + "uv": [7.75,9.25,8.25,9.75], + "texture": "#smileycloud" + } + } + }, + { + "from": [9.5,7.5,2.5], + "to": [10.5,8.5,3.5], + "faces": { + "up": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "down": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "west": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "east": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "north": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + } + } + }, + { + "from": [5.5,7.5,2.5], + "to": [6.5,8.5,3.5], + "faces": { + "up": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "down": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "west": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "east": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + }, + "north": { + "uv": [4.25,10.25,4.5,10.5], + "texture": "#smileycloud" + } + } + } + ] +} \ No newline at end of file From 8be363ba0802f7adb0f40235442abc5d18d8a932 Mon Sep 17 00:00:00 2001 From: canitzp Date: Thu, 18 Feb 2016 18:43:35 +0100 Subject: [PATCH 010/322] Hopefully fixed a Miner Bug --- .../mod/tile/TileEntityMiner.java | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 1ed6d9606..efd6d6737 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -126,29 +126,32 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } private boolean isMinable(Block block, int meta){ - if(!this.isBlacklisted(block)){ - if(!this.onlyMineOres){ - return true; - } - else{ - int[] ids = OreDictionary.getOreIDs(new ItemStack(block, 1, meta)); - for(int id : ids){ - String name = OreDictionary.getOreName(id); - if(name.startsWith("ore") || name.startsWith("denseore")){ - return true; - } + if(block != null){ + if(!this.isBlacklisted(block)){ + if(!this.onlyMineOres){ + return true; } - - String reg = block.getRegistryName(); - if(reg != null && !reg.isEmpty()){ - for(String string : ConfigValues.minerExtraWhitelist){ - if(reg.equals(string)){ + else{ + int[] ids = OreDictionary.getOreIDs(new ItemStack(block, 1, meta)); + for(int id : ids){ + String name = OreDictionary.getOreName(id); + if(name.startsWith("ore") || name.startsWith("denseore")){ return true; } } + + String reg = block.getRegistryName(); + if(reg != null && !reg.isEmpty()){ + for(String string : ConfigValues.minerExtraWhitelist){ + if(reg.equals(string)){ + return true; + } + } + } } } } + return false; } From 353431827f6f469acb37847f70abe02c238409c8 Mon Sep 17 00:00:00 2001 From: canitzp Date: Thu, 18 Feb 2016 21:55:37 +0100 Subject: [PATCH 011/322] Fixed Double Plant Crash Closes#70 --- .../actuallyadditions/mod/event/WorldDecorationEvent.java | 3 ++- .../java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index 2b5f9da86..9ff353749 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -20,6 +20,7 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; +import net.minecraft.block.BlockDoublePlant; import net.minecraft.block.material.Material; import net.minecraft.util.BlockPos; import net.minecraft.world.biome.BiomeGenOcean; @@ -91,7 +92,7 @@ public class WorldDecorationEvent{ randomPos = event.world.getTopSolidOrLiquidBlock(randomPos); if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.world) == blockBelow){ - if(plant.canPlaceBlockAt(event.world, randomPos)){ + if(plant.canPlaceBlockAt(event.world, randomPos) && WorldUtil.isBlockAir(event.world, randomPos.add(0, 1, 0))){ PosUtil.setBlock(randomPos, event.world, plant, meta, 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index a0a47372c..88fe5b648 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -51,6 +51,10 @@ public class WorldUtil{ } } + public static boolean isBlockAir(World world, BlockPos pos){ + return world.isAirBlock(pos); + } + public static BlockPos getCoordsFromSide(EnumFacing side, BlockPos pos, int offset){ return new BlockPos(pos.getX()+side.getFrontOffsetX()*(offset+1), pos.getY()+side.getFrontOffsetY()*(offset+1), pos.getZ()+side.getFrontOffsetZ()*(offset+1)); } From c0d13ef30fa0b6e028df6eccc6a98991ea4fd3cd Mon Sep 17 00:00:00 2001 From: canitzp Date: Thu, 18 Feb 2016 21:58:19 +0100 Subject: [PATCH 012/322] Fixed Double Plant Crash Closes #70 --- .../actuallyadditions/mod/event/WorldDecorationEvent.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index 9ff353749..dfd3ad113 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -92,7 +92,7 @@ public class WorldDecorationEvent{ randomPos = event.world.getTopSolidOrLiquidBlock(randomPos); if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.world) == blockBelow){ - if(plant.canPlaceBlockAt(event.world, randomPos) && WorldUtil.isBlockAir(event.world, randomPos.add(0, 1, 0))){ + if(plant.canPlaceBlockAt(event.world, randomPos) && event.world.isAirBlock(randomPos)){ PosUtil.setBlock(randomPos, event.world, plant, meta, 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 88fe5b648..a0a47372c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -51,10 +51,6 @@ public class WorldUtil{ } } - public static boolean isBlockAir(World world, BlockPos pos){ - return world.isAirBlock(pos); - } - public static BlockPos getCoordsFromSide(EnumFacing side, BlockPos pos, int offset){ return new BlockPos(pos.getX()+side.getFrontOffsetX()*(offset+1), pos.getY()+side.getFrontOffsetY()*(offset+1), pos.getZ()+side.getFrontOffsetZ()*(offset+1)); } From f0d7585fd90a98107c6637a879cae9600ffad935 Mon Sep 17 00:00:00 2001 From: canitzp Date: Thu, 18 Feb 2016 22:33:44 +0100 Subject: [PATCH 013/322] Fixed JEI Booklet Page Rendering Closes #71 --- .../mod/jei/booklet/BookletRecipeCategory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index fc456a852..969b9cde4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -62,8 +62,8 @@ public class BookletRecipeCategory implements IRecipeCategory{ public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper){ if(recipeWrapper instanceof BookletRecipeWrapper){ BookletRecipeWrapper wrapper = (BookletRecipeWrapper)recipeWrapper; - - recipeLayout.getItemStacks().init(0, true, 62, -3); + boolean isBigScreen = Minecraft.getMinecraft().displayHeight >= 600; + recipeLayout.getItemStacks().init(0, true, 70, isBigScreen ? -3 : -7); recipeLayout.getItemStacks().set(0, Arrays.asList(wrapper.thePage.getItemStacksForPage())); } } From 51de083209f26c88d8175ec4250274f8d42121c5 Mon Sep 17 00:00:00 2001 From: canitzp Date: Thu, 18 Feb 2016 22:48:53 +0100 Subject: [PATCH 014/322] Added a Nullcheck --- .../java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index cf56f862d..88f23185e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -37,7 +37,8 @@ public class PosUtil{ } public static int getMetadata(BlockPos pos, IBlockAccess world){ - return getBlock(pos, world).getMetaFromState(world.getBlockState(pos)); + Block block = getBlock(pos, world); + return block != null ? getBlock(pos, world).getMetaFromState(world.getBlockState(pos)) : 0; } public static BlockPos offset(BlockPos pos, int x, int y, int z){ From 967d180ccac0e52ffbad0a241648e3800a8539c8 Mon Sep 17 00:00:00 2001 From: canitzp Date: Fri, 19 Feb 2016 19:58:26 +0100 Subject: [PATCH 015/322] Replaced some Method calls --- .../actuallyadditions/mod/blocks/BlockCoalGenerator.java | 2 +- .../actuallyadditions/mod/blocks/BlockColoredLamp.java | 4 ++-- .../actuallyadditions/mod/blocks/BlockFurnaceDouble.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java | 2 +- .../actuallyadditions/mod/blocks/BlockOilGenerator.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java | 2 +- .../mod/blocks/render/RenderReconstructorLens.java | 1 - 7 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 9bb60e771..387b1bca3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -54,7 +54,7 @@ public class BlockCoalGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - int meta = PosUtil.getMetadata(pos, world); + int meta = state.getBlock().getMetaFromState(state); if(meta == 1){ for(int i = 0; i < 5; i++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 743dc70d8..1d1c648ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -68,7 +68,7 @@ public class BlockColoredLamp extends BlockBase{ //Turning On if(player.isSneaking()){ if(!world.isRemote){ - PosUtil.setBlock(pos, world, this.isOn ? InitBlocks.blockColoredLamp : InitBlocks.blockColoredLampOn, PosUtil.getMetadata(pos, world), 2); + PosUtil.setBlock(pos, world, this.isOn ? InitBlocks.blockColoredLamp : InitBlocks.blockColoredLampOn, state.getBlock().getMetaFromState(state), 2); } return true; } @@ -82,7 +82,7 @@ public class BlockColoredLamp extends BlockBase{ String name = OreDictionary.getOreName(oreID); TheColoredLampColors color = TheColoredLampColors.getColorFromDyeName(name); if(color != null){ - if(PosUtil.getMetadata(pos, world) != color.ordinal()){ + if(state.getBlock().getMetaFromState(state) != color.ordinal()){ if(!world.isRemote){ PosUtil.setMetadata(pos, world, color.ordinal(), 2); if(!player.capabilities.isCreativeMode){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index 815b9fe56..b2c2a1169 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -56,7 +56,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - int meta = PosUtil.getMetadata(pos, world); + int meta = state.getBlock().getMetaFromState(state); if(meta > 3){ float f = (float)pos.getX()+0.5F; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index bf4c3571b..20819e66a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -56,7 +56,7 @@ public class BlockGrinder extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - int meta = PosUtil.getMetadata(pos, world); + int meta = state.getBlock().getMetaFromState(state); if(meta == 1){ for(int i = 0; i < 5; i++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 8b72114ef..a61682b36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -54,7 +54,7 @@ public class BlockOilGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - if(PosUtil.getMetadata(pos, world) == 1){ + if(state.getBlock().getMetaFromState(state) == 1){ for(int i = 0; i < 5; i++){ world.spawnParticle(ClientProxy.bulletForMyValentine ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL, (double)pos.getX()+0.5F, (double)pos.getY()+1.0F, (double)pos.getZ()+0.5F, 0.0D, 0.0D, 0.0D); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 92dad16a1..8a210d93e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -51,7 +51,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override public boolean canBlockStay(World world, BlockPos pos, IBlockState state){ BlockPos offset = PosUtil.offset(pos, 0, -1, 0); - return PosUtil.getMetadata(pos, world) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.water : PosUtil.getBlock(offset, world).canSustainPlant(world, offset, EnumFacing.UP, this); + return state.getBlock().getMetaFromState(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.water : PosUtil.getBlock(offset, world).canSustainPlant(world, offset, EnumFacing.UP, this); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index ff9ec5112..012edb494 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -20,7 +20,6 @@ import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -//TODO Fix Reconstructor Lens rendering public class RenderReconstructorLens extends TileEntitySpecialRenderer{ @Override From d729f55832eb2cd6ec4a138bd2a55bfda894cda5 Mon Sep 17 00:00:00 2001 From: canitzp Date: Sat, 20 Feb 2016 15:23:03 +0100 Subject: [PATCH 016/322] New Compost Rendering --- .../mod/blocks/BlockCompost.java | 18 ++-- .../mod/blocks/render/RenderCompost.java | 39 ++++++++ .../mod/blocks/render/model/ModelCompost.java | 89 ------------------- .../mod/booklet/InitBooklet.java | 6 +- .../mod/proxy/ClientProxy.java | 13 ++- .../mod/tile/TileEntityCompost.java | 4 + 6 files changed, 63 insertions(+), 106 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/model/ModelCompost.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 6023cdf34..720821478 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -50,14 +50,14 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity){ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.3125F, 1.0F); super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - float f = 0.125F; - this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F); + float f = 0.125F, y = 0.7F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, f, y, 1.0F); super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, y, f); super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - this.setBlockBounds(1.0F-f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + this.setBlockBounds(1.0F-f, 0.0F, 0.0F, 1.0F, y, 1.0F); super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - this.setBlockBounds(0.0F, 0.0F, 1.0F-f, 1.0F, 1.0F, 1.0F); + this.setBlockBounds(0.0F, 0.0F, 1.0F-f, 1.0F, y, 1.0F); super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); this.setBlockBoundsForItemRender(); } @@ -67,6 +67,12 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ return false; } + @Override + public boolean isFullCube() + { + return false; + } + @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing f6, float f7, float f8, float f9){ if(!world.isRemote){ @@ -104,7 +110,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ @Override public void setBlockBoundsForItemRender(){ float f = 1.0F/16.0F; - this.setBlockBounds(f, 0.0F, f, 1.0F-f, 1.0F, 1.0F-f); + this.setBlockBounds(f, 0.0F, f, 1.0F-f, 11 * f, 1.0F-f); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java new file mode 100644 index 000000000..2d2550ac8 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -0,0 +1,39 @@ +/* + * This file ("GuiBooklet.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks.render; + +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; + +public class RenderCompost extends TileEntitySpecialRenderer{ + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks, int destroyStage) { + if(te instanceof TileEntityCompost){ + TileEntityCompost compost = (TileEntityCompost) te; + if(compost.getStackInSlot(0) != null){ + float i = compost.getAmount() / TileEntityCompost.AMOUNT; + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x + 0.5F, (float) y + (i / 3F) + 0.01F, (float) z + 0.5F); + GlStateManager.scale(1.5F, i, 1.5F); + int meta = compost.getStackInSlot(0).getItem() == InitItems.itemFertilizer ? 1 : 0; + AssetUtil.renderBlockInWorld(Blocks.dirt, meta); + GlStateManager.popMatrix(); + } + } + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/model/ModelCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/model/ModelCompost.java deleted file mode 100644 index 685bbff99..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/model/ModelCompost.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This file ("ModelCompost.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.blocks.render.model; - -import net.minecraft.client.model.ModelBase; - -//TODO Fix compost rendering -public class ModelCompost extends ModelBase{ - - /*public ModelRenderer floor; - public ModelRenderer wallOne; - public ModelRenderer wallTwo; - public ModelRenderer wallThree; - public ModelRenderer wallFour; - public ModelRenderer[] innerRawList = new ModelRenderer[13]; - public ModelRenderer innerDone; - - public ModelCompost(){ - this.textureWidth = 64; - this.textureHeight = 128; - this.wallThree = new ModelRenderer(this, 0, 0); - this.wallThree.setRotationPoint(-6.0F, 8.0F, 6.0F); - this.wallThree.addBox(0.0F, 0.0F, 0.0F, 12, 15, 1, 0.0F); - this.wallFour = new ModelRenderer(this, 0, 0); - this.wallFour.setRotationPoint(-6.0F, 8.0F, -7.0F); - this.wallFour.addBox(0.0F, 0.0F, 0.0F, 12, 15, 1, 0.0F); - this.wallOne = new ModelRenderer(this, 0, 0); - this.wallOne.setRotationPoint(-7.0F, 8.0F, -7.0F); - this.wallOne.addBox(0.0F, 0.0F, 0.0F, 1, 15, 14, 0.0F); - this.wallTwo = new ModelRenderer(this, 0, 0); - this.wallTwo.setRotationPoint(6.0F, 8.0F, -7.0F); - this.wallTwo.addBox(0.0F, 0.0F, 0.0F, 1, 15, 14, 0.0F); - this.floor = new ModelRenderer(this, 0, 0); - this.floor.setRotationPoint(-7.0F, 23.0F, -7.0F); - this.floor.addBox(0.0F, 0.0F, 0.0F, 14, 1, 14, 0.0F); - - for(int i = 0; i < this.innerRawList.length; i++){ - this.innerRawList[i] = new ModelRenderer(this, 0, 29); - this.innerRawList[i].setRotationPoint(-6.0F, 10.0F, -6.0F); - this.innerRawList[i].addBox(0.0F, 12-i, 0.0F, 12, i+1, 12, 0.0F); - } - - this.innerDone = new ModelRenderer(this, 0, 54); - this.innerDone.setRotationPoint(-6.0F, 10.0F, -6.0F); - this.innerDone.addBox(0.0F, 0.0F, 0.0F, 12, 13, 12, 0.0F); - } - - @Override - public void render(float f){ - this.wallThree.render(f); - this.wallFour.render(f); - this.wallOne.render(f); - this.wallTwo.render(f); - this.floor.render(f); - } - - @Override - public void renderExtra(float f, TileEntity tile){ - //Hehe - if("ShadowfactsDev".equals(Minecraft.getMinecraft().thePlayer.getName())){ - GlStateManager.translate(0F, 1F, 0F); - } - - if(tile instanceof TileEntityCompost){ - ItemStack stack = ((TileEntityCompost)tile).getStackInSlot(0); - if(stack != null){ - if(stack.getItem() == InitItems.itemFertilizer){ - this.innerDone.render(f); - } - else{ - int heightToDisplay = stack.stackSize*13/TileEntityCompost.AMOUNT; - if(heightToDisplay > 13){ - heightToDisplay = 13; - } - - this.innerRawList[heightToDisplay-1].render(f); - } - } - } - }*/ -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index e41d6ebed..a233aea0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -59,7 +59,7 @@ public class InitBooklet{ //Getting Started chapterIntro = new BookletChapter("intro", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageTextOnly(3)); new BookletChapter("bookTutorial", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeBook)); - new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(8, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(9, LensNoneRecipeHandler.mainPageRecipes).setNoText()).setSpecial().setIncomplete(); + new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(8, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(9, LensNoneRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); new BookletChapter("coalGen", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockCoalGenerator), new PageCrafting(1, BlockCrafting.recipeCoalGen).addTextReplacement("", TileEntityCoalGenerator.PRODUCE).setPageStacksWildcard()); new BookletChapter("craftingIngs", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeCoil).setNoText(), new PageCrafting(3, ItemCrafting.recipeCoilAdvanced).setNoText(), new PageCrafting(4, BlockCrafting.recipeCase).setNoText(), new PageCrafting(5, BlockCrafting.recipeEnderPearlBlock).setNoText(), new PageCrafting(6, BlockCrafting.recipeEnderCase).setNoText(), new PageCrafting(7, ItemCrafting.recipeRing).setNoText(), new PageCrafting(8, ItemCrafting.recipeKnifeHandle).setNoText(), new PageCrafting(9, ItemCrafting.recipeKnifeBlade).setNoText(), new PageCrafting(10, ItemCrafting.recipeKnife).setNoText(), new PageCrafting(11, ItemCrafting.recipeDough).setNoText(), new PageCrafting(12, ItemCrafting.recipeRiceDough).setNoText(), new PageCrafting(13, BlockCrafting.recipeIronCase).setNoText()).setImportant(); new BookletChapter("rf", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(Items.redstone), new PageTextOnly(1)); @@ -68,7 +68,7 @@ public class InitBooklet{ new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, LensNoneRecipeHandler.recipeColorLens), new PageReconstructor(4, LensNoneRecipeHandler.recipeExplosionLens), new PageReconstructor(5, LensNoneRecipeHandler.recipeDamageLens), new PageReconstructor(6, LensNoneRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(7, LensNoneRecipeHandler.recipeLeather).setNoText(), new PageReconstructor(8, LensNoneRecipeHandler.recipeNetherWart).setNoText()).setImportant(); new BookletChapter("miscDecorStuffsAndThings", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, LensNoneRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, LensNoneRecipeHandler.recipeGreenWall).setNoText()); new BookletChapter("quartz", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal())).addTextReplacement("", OreGen.QUARTZ_MIN).addTextReplacement("", OreGen.QUARTZ_MAX), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())), new PageCrafting(3, BlockCrafting.recipeQuartzBlock).setNoText(), new PageCrafting(4, BlockCrafting.recipeQuartzPillar).setNoText(), new PageCrafting(5, BlockCrafting.recipeQuartzChiseled).setNoText()); - new BookletChapter("cloud", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockSmileyCloud), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud).setNoText().setPageStacksWildcard()).setSpecial().setIncomplete(); + new BookletChapter("cloud", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockSmileyCloud), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud).setNoText().setPageStacksWildcard()).setSpecial(); new BookletChapter("coalStuff", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.TINY_COAL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeTinyCoal).setNoText(), new PageCrafting(3, ItemCrafting.recipeTinyChar).setNoText(), new PageCrafting(4, BlockCrafting.recipeBlockChar).setNoText()); ArrayList lampPages = new ArrayList(); lampPages.add(new PageTextOnly(lampPages.size()+1)); @@ -92,7 +92,7 @@ public class InitBooklet{ new BookletChapter("greenhouseGlass", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGreenhouseGlass), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeGlass)); new BookletChapter("fishingNet", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFishingNet), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFisher).setNoText()); new BookletChapter("feeder", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFeeder), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFeeder).setNoText()); - new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemFertilizer)).addTextReplacement("", TileEntityCompost.AMOUNT), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.recipesMashedFood)).setIncomplete(); + new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemFertilizer)).addTextReplacement("", TileEntityCompost.AMOUNT), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.recipesMashedFood)); new BookletChapter("crate", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGiantChest), new PageCrafting(1, BlockCrafting.recipeCrate), new PageCrafting(2, ItemCrafting.recipeCrateKeeper), new PageCrafting(3, ItemCrafting.recipeChestToCrateUpgrade)); new BookletChapter("rangedCollector", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockRangedCollector), new PageTextOnly(1).addTextReplacement("", TileEntityRangedCollector.RANGE), new PageCrafting(2, BlockCrafting.recipeRangedCollector).setNoText()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 1c3d380a4..c3f472f5a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; +import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; @@ -22,6 +23,7 @@ import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; @@ -127,23 +129,18 @@ public class ClientProxy implements IProxy{ ModelLoader.setCustomStateMapper(block, mapper); } + @SuppressWarnings("unchecked") @Override public void init(FMLInitializationEvent event){ ModUtil.LOGGER.info("Initializing ClientProxy..."); InitEvents.initClient(); - //TODO Fix Tile rendering - /*ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompost.class, new RenderTileEntity(new ModelCompost())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud(new ModelSmileyCloud())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaserRelay.class, new RenderLaserRelay(new ModelLaserRelay())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBookletStand.class, new RenderTileEntity(new ModelBookletStand())); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens());*/ - + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompost.class, new RenderCompost()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud()); - //TODO Fix villager + //TODO Fix villager, doesn't work in this Version of Forge //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/entity/villager/jamVillager.png")); for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index 6b31c5228..b89d2894c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -33,6 +33,10 @@ public class TileEntityCompost extends TileEntityInventoryBase{ compound.setInteger("ConversionTime", this.conversionTime); } + public float getAmount(){ + return this.getStackInSlot(0) != null ? this.getStackInSlot(0).stackSize : 0F; + } + @Override public boolean shouldSyncSlots(){ return true; From 33e231d26546d5cd275b314309d13e4ca223df9c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 20 Feb 2016 16:16:41 +0100 Subject: [PATCH 017/322] Fixed Canitz' mess. Cleanup~ --- .../mod/blocks/BlockCoalGenerator.java | 1 - .../mod/blocks/BlockCompost.java | 5 ++--- .../mod/blocks/BlockOilGenerator.java | 1 - .../mod/blocks/render/RenderCompost.java | 8 ++++---- .../mod/blocks/render/RenderSmileyCloud.java | 15 ++++++++------- .../mod/event/WorldDecorationEvent.java | 1 - .../mod/misc/cloud/SmileyCloudEasterEggs.java | 1 - .../mod/proxy/ClientProxy.java | 3 --- .../mod/tile/TileEntitySmileyCloud.java | 11 ++++++----- .../actuallyadditions/mod/util/AssetUtil.java | 18 +++++++++--------- 10 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 387b1bca3..ab1c5445d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 720821478..cb2ce873e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -68,8 +68,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ } @Override - public boolean isFullCube() - { + public boolean isFullCube(){ return false; } @@ -110,7 +109,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ @Override public void setBlockBoundsForItemRender(){ float f = 1.0F/16.0F; - this.setBlockBounds(f, 0.0F, f, 1.0F-f, 11 * f, 1.0F-f); + this.setBlockBounds(f, 0.0F, f, 1.0F-f, 11*f, 1.0F-f); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index a61682b36..a196fcc49 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityOilGenerator; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index 2d2550ac8..3d31c24dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -21,13 +21,13 @@ import net.minecraft.tileentity.TileEntity; public class RenderCompost extends TileEntitySpecialRenderer{ @Override - public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks, int destroyStage) { + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks, int destroyStage){ if(te instanceof TileEntityCompost){ - TileEntityCompost compost = (TileEntityCompost) te; + TileEntityCompost compost = (TileEntityCompost)te; if(compost.getStackInSlot(0) != null){ - float i = compost.getAmount() / TileEntityCompost.AMOUNT; + float i = compost.getAmount()/TileEntityCompost.AMOUNT; GlStateManager.pushMatrix(); - GlStateManager.translate((float) x + 0.5F, (float) y + (i / 3F) + 0.01F, (float) z + 0.5F); + GlStateManager.translate((float)x+0.5F, (float)y+(i/3F)+0.01F, (float)z+0.5F); GlStateManager.scale(1.5F, i, 1.5F); int meta = compost.getStackInSlot(0).getItem() == InitItems.itemFertilizer ? 1 : 0; AssetUtil.renderBlockInWorld(Blocks.dirt, meta); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 5387cd9ca..0799a82c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -54,7 +54,8 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ if(ClientProxy.bulletForMyValentine || (theCloud.name != null && !theCloud.name.isEmpty() && theCloud.name.equals("Pink Fluffy Unicloud"))){ theCloud.setPinkAndFluffy(); - } else { + } + else{ theCloud.setNormalCloud(); } @@ -64,16 +65,16 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ for(String triggerName : cloud.getTriggerNames()){ if(StringUtil.equalsToLowerCase(triggerName, theCloud.name)){ GlStateManager.pushMatrix(); - switch (PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ - case 1: { + switch(PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ + case 1:{ GlStateManager.rotate(180, 0, 1, 0); break; } - case 2: { + case 2:{ GlStateManager.rotate(270, 0, 1, 0); break; } - case 3: { + case 3:{ GlStateManager.rotate(90, 0, 1, 0); break; } @@ -91,8 +92,8 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ } GlStateManager.popMatrix(); - if(theCloud.name != null && !theCloud.name.isEmpty() && !Minecraft.getMinecraft().gameSettings.hideGUI) { - AssetUtil.renderNameTag(theCloud.name, x + 0.5F, y + 1.3F, z + 0.66); + if(theCloud.name != null && !theCloud.name.isEmpty() && !Minecraft.getMinecraft().gameSettings.hideGUI){ + AssetUtil.renderNameTag(theCloud.name, x+0.5F, y+1.3F, z+0.66); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index dfd3ad113..07d014a31 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -20,7 +20,6 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; -import net.minecraft.block.BlockDoublePlant; import net.minecraft.block.material.Material; import net.minecraft.util.BlockPos; import net.minecraft.world.biome.BiomeGenOcean; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 9dce6a3b0..4171e3a83 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.misc.cloud; -import de.ellpeck.actuallyadditions.mod.blocks.BlockSmileyCloud; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index c3f472f5a..856d74729 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -24,7 +24,6 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -32,7 +31,6 @@ import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; @@ -47,7 +45,6 @@ import net.minecraftforge.fml.client.registry.ClientRegistry; 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.registry.VillagerRegistry; import java.io.File; import java.util.Calendar; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 10a0b59d8..f47a40c1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.blocks.BlockSmileyCloud; import de.ellpeck.actuallyadditions.mod.network.gui.IStringReactor; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.entity.player.EntityPlayer; @@ -60,13 +59,15 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac } public void setPinkAndFluffy(){ - if(PosUtil.getMetadata(this.pos, this.worldObj) <= 3) - PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj) + 4, 2); + if(PosUtil.getMetadata(this.pos, this.worldObj) <= 3){ + PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj)+4, 2); + } } public void setNormalCloud(){ - if(PosUtil.getMetadata(this.pos, this.worldObj) >= 4) - PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj) - 4, 2); + if(PosUtil.getMetadata(this.pos, this.worldObj) >= 4){ + PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj)-4, 2); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index fdcdda71f..7a314e3cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -118,7 +118,7 @@ public class AssetUtil{ public static void renderNameTag(String tag, float x, float y, float z){ FontRenderer fontrenderer = Minecraft.getMinecraft().fontRendererObj; float f = 1.6F; - float f1 = 0.016666668F * f; + float f1 = 0.016666668F*f; GlStateManager.pushMatrix(); GlStateManager.translate(x, y, z); GL11.glNormal3f(0.0F, 1.0F, 0.0F); @@ -133,19 +133,19 @@ public class AssetUtil{ Tessellator tessellator = Tessellator.getInstance(); WorldRenderer worldrenderer = tessellator.getWorldRenderer(); int i = 0; - int j = fontrenderer.getStringWidth(tag) / 2; + int j = fontrenderer.getStringWidth(tag)/2; GlStateManager.disableTexture2D(); worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); - worldrenderer.pos((double) (-j - 1), (double) (-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos((double) (-j - 1), (double) (8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos((double) (j + 1), (double) (8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos((double) (j + 1), (double) (-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + worldrenderer.pos((double)(-j-1), (double)(-1+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + worldrenderer.pos((double)(-j-1), (double)(8+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + worldrenderer.pos((double)(j+1), (double)(8+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + worldrenderer.pos((double)(j+1), (double)(-1+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); tessellator.draw(); GlStateManager.enableTexture2D(); - fontrenderer.drawString(tag, -fontrenderer.getStringWidth(tag) / 2, i, 553648127); + fontrenderer.drawString(tag, -fontrenderer.getStringWidth(tag)/2, i, 553648127); GlStateManager.enableDepth(); GlStateManager.depthMask(true); - fontrenderer.drawString(tag, -fontrenderer.getStringWidth(tag) / 2, i, -1); + fontrenderer.drawString(tag, -fontrenderer.getStringWidth(tag)/2, i, -1); GlStateManager.enableLighting(); GlStateManager.disableBlend(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); @@ -153,6 +153,6 @@ public class AssetUtil{ } public static void renderNameTag(String tag, double x, double y, double z){ - renderNameTag(tag, (float) x, (float) y, (float) z); + renderNameTag(tag, (float)x, (float)y, (float)z); } } From e3fc3018f6bc7727ea00f34c5de41bf67b3eb011 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 20 Feb 2016 16:22:35 +0100 Subject: [PATCH 018/322] r26! --- build.gradle | 2 +- update/changelog.md | 17 +++++++++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index d0df01af3..ba0408f9a 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.8.9-r25" +version = "1.8.9-r26" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 8524c2366..0d20ad61b 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,20 @@ +# 1.8.9-r26 +### This update was done by canitzp. As I started to work on another mod and I'm not really interested in Actually Additions anymore, this will now be a common feature. If something breaks with an update, call him. Not me. Thanks. +* Made the knife not repairable +* Changed download link for updates to redirect to the proper page +* added click area to JEI for easy recipe access +* Set ESD incomplete. Because it's incomplete. +* Haphazardly revert implementation of new item system for ESD as it was completely broken +* Updated to official RF API. +* Fixed tool JSONs +* Reactivated Atomic Reconstructor Lens Renderer +* Rewrote Smiley Cloud renderer +* Hopefully fixed a minor miner bug (ha ha ha) +* Fixed Double Plant crash +* Fixed JEI booklet page rendering +* New compost rendering +* [API] Removed lens registry + # 1.8.9-r25 * Fixed assets derping because of wrong capitalization * Ignore NBT Tags of Energy items in JEI diff --git a/update/updateVersions.properties b/update/updateVersions.properties index f00da2961..aa1671fde 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,2 +1,2 @@ 1.7.10=21 -1.8.9=25 +1.8.9=26 From c93276835e70e72c9aba78acf7ef868a699f0c7b Mon Sep 17 00:00:00 2001 From: canitzp Date: Sat, 20 Feb 2016 21:25:18 +0100 Subject: [PATCH 019/322] Blame on Shadowfacts --- .../mod/blocks/render/RenderCompost.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index 3d31c24dd..d9938ee01 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.blocks.render; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.init.Blocks; @@ -28,9 +29,12 @@ public class RenderCompost extends TileEntitySpecialRenderer{ float i = compost.getAmount()/TileEntityCompost.AMOUNT; GlStateManager.pushMatrix(); GlStateManager.translate((float)x+0.5F, (float)y+(i/3F)+0.01F, (float)z+0.5F); + //Hehe + if("ShadowfactsDev".equals(Minecraft.getMinecraft().thePlayer.getName())){ + GlStateManager.translate(0F, 1F, 0F); + } GlStateManager.scale(1.5F, i, 1.5F); - int meta = compost.getStackInSlot(0).getItem() == InitItems.itemFertilizer ? 1 : 0; - AssetUtil.renderBlockInWorld(Blocks.dirt, meta); + AssetUtil.renderBlockInWorld(Blocks.dirt, compost.getStackInSlot(0).getItem() == InitItems.itemFertilizer ? 1 : 0); GlStateManager.popMatrix(); } } From 9afe9b5a8b0cacb522cddac5a3fafefe8a9c2a14 Mon Sep 17 00:00:00 2001 From: canitzp Date: Sat, 20 Feb 2016 21:38:28 +0100 Subject: [PATCH 020/322] Rename itemHoeCrystalblue.json to itemHoeCrystalBlue.json --- .../item/{itemHoeCrystalblue.json => itemHoeCrystalBlue.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/assets/actuallyadditions/models/item/{itemHoeCrystalblue.json => itemHoeCrystalBlue.json} (100%) diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalblue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json similarity index 100% rename from src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalblue.json rename to src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json From 46d9ad9a1091fafd74055a441dda51d195354b4f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 8 Mar 2016 00:05:34 +0100 Subject: [PATCH 021/322] P's edition --- .../de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 94558417a..09e13e9cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -92,6 +92,9 @@ public class BookletUtils{ else if(playerName.equals("KittyVanCat")){ version = "Cat's Edition"; } + else if(playerName.equals("canitzp")){ + version = "P's Edition"; + } else if(playerName.equals("Ellpeck") || Util.isDevVersion()){ version = "Dev's Edition"; } From 16f5d834544e7288c124a391f3f1832c44f145d1 Mon Sep 17 00:00:00 2001 From: canitzp Date: Tue, 8 Mar 2016 00:25:06 +0100 Subject: [PATCH 022/322] Updated Forge, Forge Mappings and JEI --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index ba0408f9a..d3a1eedf1 100644 --- a/build.gradle +++ b/build.gradle @@ -17,10 +17,10 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.8.9-11.15.1.1747" + version = "1.8.9-11.15.1.1764" runDir = "idea" - mappings = "stable_20" + mappings = "stable_22" makeObfSourceJar = false useDepAts = true @@ -42,7 +42,7 @@ dependencies { //compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" - deobfCompile "mezz.jei:jei_1.8.9:2.26.0.154" + deobfCompile "mezz.jei:jei_1.8.9:2.28.6.173" } processResources { From 81130ac0b94644280a62c60024ae21e38f829ff8 Mon Sep 17 00:00:00 2001 From: canitzp Date: Tue, 15 Mar 2016 19:28:54 +0100 Subject: [PATCH 023/322] Fixed Phantomface Crash Closes #82 --- .../actuallyadditions/mod/tile/TileEntityPhantomface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 5950f7ab0..f2eb676a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -120,7 +120,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP @Override public T getCapability(Capability capability, EnumFacing facing){ - return this.capabilities.getCapability(capability, facing); + return this.capabilities != null ? this.capabilities.getCapability(capability, facing) : super.getCapability(capability, facing); } @Override From 47568e5fbc0ac331f284432889dc8bbf89e48be2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 15:31:59 +0100 Subject: [PATCH 024/322] Fudge the new item system stuff --- .../mod/tile/TileEntityInputter.java | 63 ------------------- .../mod/tile/TileEntityInventoryBase.java | 28 --------- .../mod/tile/TileEntityPhantomItemface.java | 13 ---- .../mod/tile/TileEntityPhantomface.java | 12 ---- .../actuallyadditions/mod/util/WorldUtil.java | 2 - 5 files changed, 118 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index a1e750691..c4f678e4b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -61,7 +61,6 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt @Override public void onNumberReceived(int text, int textID, EntityPlayer player){ if(text != -1){ - //TODO Find a better solution for the Math.max and Math.min stuff here (also below in initVars()!) if(textID == 0){ this.slotToPutStart = this.placeToPut instanceof IInventory ? Math.max(Math.min(text, ((IInventory)this.placeToPut).getSizeInventory()-1), 0) : text; } @@ -79,68 +78,10 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt this.markDirty(); } - //TODO Fix for new item system - private boolean newPull(){ - /*for(EnumFacing facing : EnumFacing.values()){ - IItemHandler handler = this.placeToPull.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing); - if(handler != null){ - for(int i = Math.max(this.lastPullStart, 0); i < Math.min(this.slotToPullEnd, handler.getSlots()); i++){ - ItemStack stackInOtherInv = handler.getStackInSlot(i); - if(stackInOtherInv != null){ - if(this.slots[0] == null || ItemUtil.areItemsEqual(stackInOtherInv, this.slots[0], false)){ - - ItemStack pulled = handler.extractItem(i, this.slots[0] == null ? stackInOtherInv.stackSize : Math.min(stackInOtherInv.stackSize, this.slots[0].getMaxStackSize()-this.slots[0].stackSize), false); - if(pulled != null){ - ItemStack slotCopy = this.slots[0] == null ? null : this.slots[0].copy(); - - if(this.slots[0] == null){ - this.slots[0] = pulled.copy(); - } - else{ - this.slots[0].stackSize+=pulled.stackSize; - } - - if(!ItemUtil.areStacksEqualAndSameSize(slotCopy, this.slots[0], false)){ - return true; - } - } - } - } - } - } - }*/ - return false; - } - - private boolean newPut(){ - /*if(this.slots[0] != null){ - for(EnumFacing facing : EnumFacing.values()){ - IItemHandler handler = this.placeToPut.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, facing); - if(handler != null){ - for(int i = Math.max(this.slotToPutStart, 0); i < Math.min(this.slotToPutEnd, handler.getSlots()); i++){ - ItemStack slotCopy = this.slots[0].copy(); - - ItemStack remaining = handler.insertItem(i, slotCopy, false); - this.slots[0] = remaining == null ? null : remaining.copy(); - - if(!ItemUtil.areStacksEqualAndSameSize(slotCopy, this.slots[0], false)){ - return true; - } - } - } - } - }*/ - return false; - } - /** * Pulls Items from the specified Slots on the specified Side */ private void pull(){ - if(this.newPull()){ - return; - } - //The Inventory to pull from IInventory theInventory = (IInventory)placeToPull; //Does the Inventory even have Slots!? @@ -240,10 +181,6 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt * (Check pull() for Description, similar to this) */ private void put(){ - if(this.newPut()){ - return; - } - IInventory theInventory = (IInventory)placeToPut; if(theInventory.getSizeInventory() > 0){ int theSlotToPut = this.slotToPutStart; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 8af8f3240..31fef578f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -20,28 +20,15 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumFacing; import net.minecraft.util.IChatComponent; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.wrapper.SidedInvWrapper; - -import java.util.HashMap; -import java.util.Map; public abstract class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ public ItemStack slots[]; public String name; - private Map itemHandlers = new HashMap(); - public TileEntityInventoryBase(int slots, String name){ this.initializeSlots(slots); this.name = "container."+ModUtil.MOD_ID_LOWER+"."+name; - - for(EnumFacing facing : EnumFacing.values()){ - this.itemHandlers.put(facing, new SidedInvWrapper(this, facing)); - } } public void initializeSlots(int itemAmount){ @@ -107,26 +94,11 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } - @Override - public boolean hasCapability(net.minecraftforge.common.capabilities.Capability capability, net.minecraft.util.EnumFacing facing){ - return this.getCapability(capability, facing) != null; - } - @Override public int getInventoryStackLimit(){ return 64; } - @Override - public T getCapability(Capability capability, EnumFacing facing){ - if(facing != null && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ - return (T)this.itemHandlers.get(facing); - } - else{ - return super.getCapability(capability, facing); - } - } - @Override public boolean isUseableByPlayer(EntityPlayer player){ return player.getDistanceSq(this.getPos().getX()+0.5D, this.pos.getY()+0.5D, this.pos.getZ()+0.5D) <= 64 && !this.isInvalid() && this.worldObj.getTileEntity(this.pos) == this; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index f2307db89..f4af158a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -16,9 +16,7 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; -//TODO completely adapt to new item system? public class TileEntityPhantomItemface extends TileEntityPhantomface{ public TileEntityPhantomItemface(){ @@ -105,17 +103,6 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ return null; } - @Override - public T getCapability(Capability capability, EnumFacing facing){ - if(this.isBoundThingInRange()){ - TileEntity tile = worldObj.getTileEntity(this.boundPosition); - if(tile != null){ - return tile.getCapability(capability, facing); - } - } - return super.getCapability(capability, facing); - } - @Override public boolean isItemValidForSlot(int i, ItemStack stack){ return this.isBoundThingInRange() && this.getInventory().isItemValidForSlot(i, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index f2eb676a1..929ba1f2e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -23,9 +23,6 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; import net.minecraft.world.World; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityDispatcher; -import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -40,12 +37,8 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP private BlockPos boundPosBefore; private Block boundBlockBefore; - private CapabilityDispatcher capabilities; - public TileEntityPhantomface(String name){ super(0, name); - - this.capabilities = ForgeEventFactory.gatherCapabilities(this); } public static int upgradeRange(int defaultRange, World world, BlockPos pos){ @@ -118,11 +111,6 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } } - @Override - public T getCapability(Capability capability, EnumFacing facing){ - return this.capabilities != null ? this.capabilities.getCapability(capability, facing) : super.getCapability(capability, facing); - } - @Override public boolean isItemValidForSlot(int slot, ItemStack stack){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index a0a47372c..72fe91876 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -246,8 +246,6 @@ public class WorldUtil{ return blocks; } - //TODO make this work for the stupid new item system - public static boolean addToInventory(IInventory inventory, ArrayList stacks, boolean actuallyDo, boolean shouldAlwaysWork){ return addToInventory(inventory, stacks, EnumFacing.UP, actuallyDo, shouldAlwaysWork); } From 8ba1d23eff40547dc3edb64807b089423935ab3f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 15:42:06 +0100 Subject: [PATCH 025/322] Replaced some method calls --- .../mod/blocks/BlockCoalGenerator.java | 3 +- .../mod/blocks/BlockColoredLamp.java | 4 +-- .../mod/blocks/BlockFurnaceDouble.java | 2 +- .../mod/blocks/BlockGrinder.java | 2 +- .../mod/blocks/BlockOilGenerator.java | 3 +- .../mod/blocks/BlockWildPlant.java | 4 +-- .../mod/blocks/base/BlockWallAA.java | 3 +- .../mod/booklet/BookletUtils.java | 8 +++-- .../mod/booklet/button/BookmarkButton.java | 4 +-- .../mod/event/TooltipEvent.java | 6 ++-- .../actuallyadditions/mod/util/AssetUtil.java | 7 ++--- .../actuallyadditions/mod/util/ItemUtil.java | 4 --- .../actuallyadditions/mod/util/KeyUtil.java | 31 ------------------- .../actuallyadditions/mod/util/PosUtil.java | 7 ++++- 14 files changed, 31 insertions(+), 57 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/KeyUtil.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index ab1c5445d..01bf95c68 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -53,7 +54,7 @@ public class BlockCoalGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - int meta = state.getBlock().getMetaFromState(state); + int meta = PosUtil.getMetadata(state); if(meta == 1){ for(int i = 0; i < 5; i++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 1d1c648ca..31e397b35 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -68,7 +68,7 @@ public class BlockColoredLamp extends BlockBase{ //Turning On if(player.isSneaking()){ if(!world.isRemote){ - PosUtil.setBlock(pos, world, this.isOn ? InitBlocks.blockColoredLamp : InitBlocks.blockColoredLampOn, state.getBlock().getMetaFromState(state), 2); + PosUtil.setBlock(pos, world, this.isOn ? InitBlocks.blockColoredLamp : InitBlocks.blockColoredLampOn, PosUtil.getMetadata(state), 2); } return true; } @@ -82,7 +82,7 @@ public class BlockColoredLamp extends BlockBase{ String name = OreDictionary.getOreName(oreID); TheColoredLampColors color = TheColoredLampColors.getColorFromDyeName(name); if(color != null){ - if(state.getBlock().getMetaFromState(state) != color.ordinal()){ + if(PosUtil.getMetadata(state) != color.ordinal()){ if(!world.isRemote){ PosUtil.setMetadata(pos, world, color.ordinal(), 2); if(!player.capabilities.isCreativeMode){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index b2c2a1169..0b2bde8a0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -56,7 +56,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - int meta = state.getBlock().getMetaFromState(state); + int meta = PosUtil.getMetadata(state); if(meta > 3){ float f = (float)pos.getX()+0.5F; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index 20819e66a..0832e3703 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -56,7 +56,7 @@ public class BlockGrinder extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - int meta = state.getBlock().getMetaFromState(state); + int meta = PosUtil.getMetadata(state); if(meta == 1){ for(int i = 0; i < 5; i++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index a196fcc49..7de606aeb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityOilGenerator; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -53,7 +54,7 @@ public class BlockOilGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - if(state.getBlock().getMetaFromState(state) == 1){ + if(PosUtil.getMetadata(state) == 1){ for(int i = 0; i < 5; i++){ world.spawnParticle(ClientProxy.bulletForMyValentine ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL, (double)pos.getX()+0.5F, (double)pos.getY()+1.0F, (double)pos.getZ()+0.5F, 0.0D, 0.0D, 0.0D); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 8a210d93e..5c345f0d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -51,7 +51,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override public boolean canBlockStay(World world, BlockPos pos, IBlockState state){ BlockPos offset = PosUtil.offset(pos, 0, -1, 0); - return state.getBlock().getMetaFromState(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.water : PosUtil.getBlock(offset, world).canSustainPlant(world, offset, EnumFacing.UP, this); + return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.water : PosUtil.getBlock(offset, world).canSustainPlant(world, offset, EnumFacing.UP, this); } @Override @@ -71,7 +71,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ - int metadata = state.getBlock().getMetaFromState(state); + int metadata = PosUtil.getMetadata(state); return metadata >= allWildPlants.length ? null : allWildPlants[metadata].wildVersionOf.getDrops(world, pos, allWildPlants[metadata].wildVersionOf.getStateFromMeta(7), fortune); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockWallAA.java index 3b9ef2ed9..47a564763 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockWallAA.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockFenceGate; import net.minecraft.block.BlockWall; @@ -134,7 +135,7 @@ public class BlockWallAA extends BlockBase{ } public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos){ - Block block = worldIn.getBlockState(pos).getBlock(); + Block block = PosUtil.getBlock(pos, worldIn); return block != Blocks.barrier && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial().isOpaque() && block.isFullCube()) && block.getMaterial() != Material.gourd)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 09e13e9cb..5e36ca6fe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -20,9 +20,13 @@ import de.ellpeck.actuallyadditions.mod.booklet.button.IndexButton; import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; -import de.ellpeck.actuallyadditions.mod.util.*; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.stats.Achievement; import net.minecraft.util.EnumChatFormatting; @@ -51,7 +55,7 @@ public class BookletUtils{ public static void openBrowser(String url, String shiftUrl){ try{ if(Desktop.isDesktopSupported()){ - if(shiftUrl.equals(url) || KeyUtil.isShiftPressed()){ + if(shiftUrl.equals(url) || GuiScreen.isShiftKeyDown()){ Desktop.getDesktop().browse(new URI(shiftUrl)); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 8107e6119..233a98e34 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -15,9 +15,9 @@ import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.KeyUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -37,7 +37,7 @@ public class BookmarkButton extends GuiButton{ public void onPressed(){ if(this.assignedEntry.entry != null){ - if(KeyUtil.isShiftPressed()){ + if(GuiScreen.isShiftKeyDown()){ this.assignedEntry.removeEntry(); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index 2821db6b4..b8d8b5ea9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -11,10 +11,10 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.util.KeyUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; @@ -35,7 +35,7 @@ public class TooltipEvent{ //Advanced Item Info if(event.itemStack.getItem() != null){ if(ConfigBoolValues.CTRL_EXTRA_INFO.isEnabled()){ - if(KeyUtil.isControlPressed()){ + if(GuiScreen.isCtrlKeyDown()){ event.toolTip.add(EnumChatFormatting.DARK_GRAY+""+EnumChatFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".extraInfo.desc")+":"); //OreDict Names @@ -77,7 +77,7 @@ public class TooltipEvent{ NBTTagCompound compound = event.itemStack.getTagCompound(); if(compound != null && !compound.hasNoTags()){ event.toolTip.add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".nbt.desc")+":"); - if(KeyUtil.isShiftPressed()){ + if(GuiScreen.isShiftKeyDown()){ List strgList = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(compound.toString(), 200); for(String strg : strgList){ event.toolTip.add(ADVANCED_INFO_TEXT_PRE+strg); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 7a314e3cb..f7171625d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -79,6 +79,7 @@ public class AssetUtil{ Minecraft.getMinecraft().getRenderItem().renderItemOverlayIntoGUI(mc.fontRendererObj, stack, 0, 0, null); mc.fontRendererObj.setUnicodeFlag(flagBefore); + //TODO I don't think this is needed anymore, but I need to check that //GL+MC+NEI suck if(mc.currentScreen instanceof GuiBooklet || mc.currentScreen == null){ RenderHelper.disableStandardItemLighting(); @@ -115,7 +116,7 @@ public class AssetUtil{ GlStateManager.enableTexture2D(); } - public static void renderNameTag(String tag, float x, float y, float z){ + public static void renderNameTag(String tag, double x, double y, double z){ FontRenderer fontrenderer = Minecraft.getMinecraft().fontRendererObj; float f = 1.6F; float f1 = 0.016666668F*f; @@ -151,8 +152,4 @@ public class AssetUtil{ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.popMatrix(); } - - public static void renderNameTag(String tag, double x, double y, double z){ - renderNameTag(tag, (float)x, (float)y, (float)z); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index 63ad713fd..e62ac4e4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -54,10 +54,6 @@ public class ItemUtil{ return stack1 != null && stack2 != null && (stack1.isItemEqual(stack2) || (checkWildcard && stack1.getItem() == stack2.getItem() && (stack1.getItemDamage() == Util.WILDCARD || stack2.getItemDamage() == Util.WILDCARD))); } - public static boolean areStacksEqualAndSameSize(ItemStack stack1, ItemStack stack2, boolean checkWildcard){ - return areItemsEqual(stack1, stack2, checkWildcard) && stack1.stackSize == stack2.stackSize; - } - /** * Returns true if list contains stack or if both contain null */ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/KeyUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/KeyUtil.java deleted file mode 100644 index 33cb3886c..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/KeyUtil.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file ("KeyUtil.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.util; - -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.lwjgl.input.Keyboard; - -@SideOnly(Side.CLIENT) -public class KeyUtil{ - - public static boolean isShiftPressed(){ - return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); - } - - public static boolean isControlPressed(){ - return Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); - } - - public static boolean isAltPressed(){ - return Keyboard.isKeyDown(Keyboard.KEY_LMENU) || Keyboard.isKeyDown(Keyboard.KEY_RMENU); - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index 88f23185e..5ac8cf905 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -38,7 +38,12 @@ public class PosUtil{ public static int getMetadata(BlockPos pos, IBlockAccess world){ Block block = getBlock(pos, world); - return block != null ? getBlock(pos, world).getMetaFromState(world.getBlockState(pos)) : 0; + return block != null ? block.getMetaFromState(world.getBlockState(pos)) : 0; + } + + public static int getMetadata(IBlockState state){ + Block block = state.getBlock(); + return block != null ? block.getMetaFromState(state) : 0; } public static BlockPos offset(BlockPos pos, int x, int y, int z){ From 1d27f6e52d211a0b3d4b9b330a70ff443b225bb2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 15:48:52 +0100 Subject: [PATCH 026/322] I don't want this differentiated --- .../mod/jei/booklet/BookletRecipeCategory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index 969b9cde4..89b47f6f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -62,8 +62,7 @@ public class BookletRecipeCategory implements IRecipeCategory{ public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper){ if(recipeWrapper instanceof BookletRecipeWrapper){ BookletRecipeWrapper wrapper = (BookletRecipeWrapper)recipeWrapper; - boolean isBigScreen = Minecraft.getMinecraft().displayHeight >= 600; - recipeLayout.getItemStacks().init(0, true, 70, isBigScreen ? -3 : -7); + recipeLayout.getItemStacks().init(0, true, 70, -4); recipeLayout.getItemStacks().set(0, Arrays.asList(wrapper.thePage.getItemStacksForPage())); } } From 92172c0fdc3fb9221871900cf0b5c28d8b188233 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 15:55:55 +0100 Subject: [PATCH 027/322] Close book with inventory key --- .../ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index e1e4de69d..753bcaa63 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -162,7 +162,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void keyTyped(char theChar, int key){ - if(key == Keyboard.KEY_ESCAPE){ + if(key == Keyboard.KEY_ESCAPE || (key == this.mc.gameSettings.keyBindInventory.getKeyCode() && this.hisNameIsAt <= 0 && !this.searchField.isFocused())){ if(this.parentScreen != null){ this.mc.displayGuiScreen(this.parentScreen); } @@ -238,11 +238,11 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ } //Handles config else if(button == this.buttonConfig){ - mc.displayGuiScreen(new GuiConfiguration(this)); + this.mc.displayGuiScreen(new GuiConfiguration(this)); } //Handles achievements else if(button == this.buttonAchievements){ - mc.displayGuiScreen(new GuiAAAchievements(this, mc.thePlayer.getStatFileWriter())); + this.mc.displayGuiScreen(new GuiAAAchievements(this, this.mc.thePlayer.getStatFileWriter())); } else if(button == this.buttonForward){ BookletUtils.handleNextPage(this); From efdb43bd5a02bdcb49a73c272ef4cd083c234e60 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 16:00:36 +0100 Subject: [PATCH 028/322] Let's do this differently, so that you can actually close the book at all when the search field is up --- .../mod/booklet/GuiBooklet.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 753bcaa63..c217b0012 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -162,34 +162,34 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void keyTyped(char theChar, int key){ - if(key == Keyboard.KEY_ESCAPE || (key == this.mc.gameSettings.keyBindInventory.getKeyCode() && this.hisNameIsAt <= 0 && !this.searchField.isFocused())){ - if(this.parentScreen != null){ - this.mc.displayGuiScreen(this.parentScreen); - } - else{ - this.mc.displayGuiScreen(null); - this.mc.setIngameFocus(); - } - } - else if(this.searchField.isFocused()){ - this.searchField.textboxKeyTyped(theChar, key); - BookletUtils.updateSearchBar(this); - } - else{ - if(AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){ - if(this.hisNameIsAt+1 >= AND_HIS_NAME_IS.length){ - Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation(ModUtil.MOD_ID_LOWER, "duhDuhDuhDuuuh"))); - ModUtil.LOGGER.info("AND HIS NAME IS JOHN CENA DUH DUH DUH DUUUH"); - this.hisNameIsAt = 0; - } - else{ - this.hisNameIsAt++; - } - } - else{ + if(AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){ + if(this.hisNameIsAt+1 >= AND_HIS_NAME_IS.length){ + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation(ModUtil.MOD_ID_LOWER, "duhDuhDuhDuuuh"))); + ModUtil.LOGGER.info("AND HIS NAME IS JOHN CENA DUH DUH DUH DUUUH"); this.hisNameIsAt = 0; } + else{ + this.hisNameIsAt++; + } } + else{ + this.hisNameIsAt = 0; + + if(key == Keyboard.KEY_ESCAPE || (key == this.mc.gameSettings.keyBindInventory.getKeyCode() && !this.searchField.isFocused())){ + if(this.parentScreen != null){ + this.mc.displayGuiScreen(this.parentScreen); + } + else{ + this.mc.displayGuiScreen(null); + this.mc.setIngameFocus(); + } + } + else if(this.searchField.isFocused()){ + this.searchField.textboxKeyTyped(theChar, key); + BookletUtils.updateSearchBar(this); + } + } + } @Override From 9fc5735985a56c1154ebd2890b34f4e290bb1271 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 16:02:27 +0100 Subject: [PATCH 029/322] ESD is done --- .../de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index a233aea0d..a32c0f256 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -87,7 +87,7 @@ public class InitBooklet{ new BookletChapter("dropper", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockDropper), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeDropper).setNoText()); new BookletChapter("phantomfaces", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomLiquiface), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomface.RANGE), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipePhantomface), new PageCrafting(4, BlockCrafting.recipeLiquiface), new PageCrafting(5, BlockCrafting.recipeEnergyface), new PageCrafting(6, ItemCrafting.recipePhantomConnector).setNoText(), new PageCrafting(7, BlockCrafting.recipePhantomBooster)).setImportant(); new BookletChapter("phantomBreaker", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomBreaker), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomPlacer.RANGE), new PageCrafting(2, BlockCrafting.recipePhantomPlacer).setNoText(), new PageCrafting(3, BlockCrafting.recipePhantomBreaker).setNoText()); - new BookletChapter("esd", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockInputterAdvanced), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeESD).setNoText(), new PageCrafting(3, BlockCrafting.recipeAdvancedESD).setNoText()).setSpecial().setIncomplete(); + new BookletChapter("esd", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockInputterAdvanced), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeESD).setNoText(), new PageCrafting(3, BlockCrafting.recipeAdvancedESD).setNoText()).setSpecial(); new BookletChapter("xpSolidifier", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockXPSolidifier), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemSolidifiedExperience)), new PageCrafting(2, BlockCrafting.recipeSolidifier).setNoText()).setSpecial().setIncomplete(); new BookletChapter("greenhouseGlass", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGreenhouseGlass), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeGlass)); new BookletChapter("fishingNet", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFishingNet), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFisher).setNoText()); From 7a236aa2b3cce89c5a552ff646600b083d0d997e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 16:13:09 +0100 Subject: [PATCH 030/322] Cleaned up Laser Relay Connections and WorldData a bit --- .../ellpeck/actuallyadditions/mod/ActuallyAdditions.java | 7 +------ .../actuallyadditions/mod/event/WorldLoadingEvents.java | 5 +---- .../mod/misc/LaserRelayConnectionHandler.java | 7 +++---- .../de/ellpeck/actuallyadditions/mod/misc/WorldData.java | 3 ++- 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index bbd2131d6..049dc4f1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -41,7 +41,6 @@ import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Items; -import net.minecraft.server.MinecraftServer; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; @@ -126,11 +125,7 @@ public class ActuallyAdditions{ @EventHandler public void serverStarted(FMLServerStartedEvent event){ - if(LaserRelayConnectionHandler.getInstance() == null){ - LaserRelayConnectionHandler.setInstance(new LaserRelayConnectionHandler()); - } - - WorldData.init(MinecraftServer.getServer()); + WorldData.init(); } @EventHandler diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 602ca99b7..fe7e47fe2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.event; -import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.misc.WorldData; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -19,9 +18,7 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onLoad(WorldEvent.Load event){ - if(LaserRelayConnectionHandler.getInstance() == null){ - LaserRelayConnectionHandler.setInstance(new LaserRelayConnectionHandler()); - } + WorldData.makeDirty(); } @SubscribeEvent diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index c2f77f41c..fec5a2ad4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -33,13 +33,12 @@ public class LaserRelayConnectionHandler{ public ConcurrentSet networks = new ConcurrentSet(); public static LaserRelayConnectionHandler getInstance(){ + if(instance == null){ + instance = new LaserRelayConnectionHandler(); + } return instance; } - public static void setInstance(LaserRelayConnectionHandler handler){ - instance = handler; - } - public NBTTagCompound writeNetworkToNBT(Network network){ NBTTagList list = new NBTTagList(); for(ConnectionPair pair : network.connections){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index b551acbb7..95a7cb4f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -33,7 +33,8 @@ public class WorldData extends WorldSavedData{ } } - public static void init(MinecraftServer server){ + public static void init(){ + MinecraftServer server = MinecraftServer.getServer(); if(server != null){ World world = server.getEntityWorld(); if(!world.isRemote){ From 56f9402fde0a529bf3d034b577c4524de28c3315 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 18:16:25 +0100 Subject: [PATCH 031/322] Whoever made the items float? --- .../mod/blocks/render/RenderSmileyCloud.java | 45 +++---------------- .../mod/misc/cloud/SmileyCloudEasterEggs.java | 11 ++--- .../mod/tile/TileEntitySmileyCloud.java | 27 +++++------ 3 files changed, 21 insertions(+), 62 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 0799a82c5..1f813b71b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -28,72 +28,41 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int partial){ if(tile instanceof TileEntitySmileyCloud){ TileEntitySmileyCloud theCloud = (TileEntitySmileyCloud)tile; - if(theCloud.flyHeight == 0){ - theCloud.flyHeight = tile.getWorld().rand.nextInt(30)+30; - } - int bobHeight = theCloud.flyHeight; - double theTime = Minecraft.getSystemTime(); - double time = theTime/50; - if(time-bobHeight >= theCloud.lastFlyHeight){ - theCloud.lastFlyHeight = time; - } GlStateManager.pushMatrix(); - - if(time-(bobHeight/2) >= theCloud.lastFlyHeight){ - GlStateManager.translate(0, (time-theCloud.lastFlyHeight)/300, 0); - } - else{ - GlStateManager.translate(0, -(time-theCloud.lastFlyHeight)/300+(double)bobHeight/300, 0); - } - - GlStateManager.translate((float)x+0.5F, (float)y-0.5F, (float)z+0.5F); GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); GlStateManager.translate(0.0F, -2F, 0.0F); - if(ClientProxy.bulletForMyValentine || (theCloud.name != null && !theCloud.name.isEmpty() && theCloud.name.equals("Pink Fluffy Unicloud"))){ - theCloud.setPinkAndFluffy(); - } - else{ - theCloud.setNormalCloud(); - } + theCloud.setStatus(ClientProxy.bulletForMyValentine || (theCloud.name != null && !theCloud.name.isEmpty() && theCloud.name.equals("Pink Fluffy Unicloud"))); if(theCloud.name != null && !theCloud.name.isEmpty()){ - for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ - boolean canBreak = false; + easterEggs : for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ for(String triggerName : cloud.getTriggerNames()){ if(StringUtil.equalsToLowerCase(triggerName, theCloud.name)){ GlStateManager.pushMatrix(); switch(PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ - case 1:{ + case 1: GlStateManager.rotate(180, 0, 1, 0); break; - } - case 2:{ + case 2: GlStateManager.rotate(270, 0, 1, 0); break; - } - case 3:{ + case 3: GlStateManager.rotate(90, 0, 1, 0); break; - } } cloud.renderExtra(0.0625F); GlStateManager.popMatrix(); - canBreak = true; - break; + break easterEggs; } } - if(canBreak){ - break; - } } } GlStateManager.popMatrix(); if(theCloud.name != null && !theCloud.name.isEmpty() && !Minecraft.getMinecraft().gameSettings.hideGUI){ - AssetUtil.renderNameTag(theCloud.name, x+0.5F, y+1.3F, z+0.66); + AssetUtil.renderNameTag(theCloud.name, x+0.5F, y+1.5F, z+0.66); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 4171e3a83..86296bf67 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -381,8 +380,7 @@ public class SmileyCloudEasterEggs{ GlStateManager.pushMatrix(); GlStateManager.rotate(180F, 0F, 0F, 1F); GlStateManager.rotate(90, 0, 1, 0); - GlStateManager.translate(0F, -1.5F, 0F); - GlStateManager.translate(0, 0.2F, leftHand ? -0.5F : 0.55F); + GlStateManager.translate(0.2, -1F, leftHand ? -0.525F : 0.525F); GlStateManager.scale(0.75F, 0.75F, 0.75F); AssetUtil.renderItemInWorld(stack); @@ -393,14 +391,11 @@ public class SmileyCloudEasterEggs{ private static void renderHeadBlock(Block block, int meta, float rotation){ GlStateManager.pushMatrix(); GlStateManager.disableLighting(); - GlStateManager.translate(-0.015F, 0.6F, 0.075F); - GlStateManager.scale(0.3F, 0.3F, 0.3F); + GlStateManager.translate(-0.015F, 0.625F, 0.04F); + GlStateManager.scale(0.5F, 0.5F, 0.5F); GlStateManager.rotate(180F, 1F, 0F, 0F); GlStateManager.rotate(rotation, 0F, 1F, 0F); - double boop = Minecraft.getSystemTime()/1000D; - GlStateManager.rotate((float)(((boop*40D)%360)), 0, 1, 0); - AssetUtil.renderBlockInWorld(block, meta); GlStateManager.enableLighting(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index f47a40c1a..72bd9f5e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -14,18 +14,12 @@ import de.ellpeck.actuallyadditions.mod.network.gui.IStringReactor; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; import java.util.Objects; public class TileEntitySmileyCloud extends TileEntityBase implements IStringReactor{ public String name; - @SideOnly(Side.CLIENT) - public double lastFlyHeight; - @SideOnly(Side.CLIENT) - public int flyHeight; private String nameBefore; @Override @@ -58,16 +52,17 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac this.name = text; } - public void setPinkAndFluffy(){ - if(PosUtil.getMetadata(this.pos, this.worldObj) <= 3){ - PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj)+4, 2); + public void setStatus(boolean pinkAndFluffy){ + int meta = PosUtil.getMetadata(this.pos, this.worldObj); + if(pinkAndFluffy){ + if(meta <= 3){ + PosUtil.setMetadata(this.pos, this.worldObj, meta+4, 2); + } + } + else{ + if(meta >= 4){ + PosUtil.setMetadata(this.pos, this.worldObj, meta-4, 2); + } } } - - public void setNormalCloud(){ - if(PosUtil.getMetadata(this.pos, this.worldObj) >= 4){ - PosUtil.setMetadata(this.pos, this.worldObj, PosUtil.getMetadata(this.pos, this.worldObj)-4, 2); - } - } - } From 9720381540dfb96a38a3e079e3be155adc5930af Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 18:19:51 +0100 Subject: [PATCH 032/322] Okay, okay, okay, it's fine. It was a stupid feature. I understand. So shut up now. --- .../actuallyadditions/mod/config/values/ConfigBoolValues.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 2c1f343e2..6a89e6a39 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -21,7 +21,7 @@ public enum ConfigBoolValues{ GENERATE_QUARTZ("Black Quartz", ConfigCategories.WORLD_GEN, true, "If the Black Quartz generates in the world"), DO_UPDATE_CHECK("Do Update Check", ConfigCategories.OTHER, true, "If Actually Additions should check for an Update on joining a World"), - UPDATE_CHECK_VERSION_SPECIFIC("Version Specific Update Checker", ConfigCategories.OTHER, false, "If Actually Additions' Update Check should only search for updates for the Minecraft Version you currently have"), + UPDATE_CHECK_VERSION_SPECIFIC("Version Specific Update Checker", ConfigCategories.OTHER, true, "If Actually Additions' Update Check should only search for updates for the Minecraft Version you currently have"), DO_CAT_DROPS("Do Cat Drops", ConfigCategories.OTHER, true, "If Cats drop Hairy Balls on Occasion"), From dc8ad581ad44b4e65e93b44de5ab974239691e17 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 18:38:39 +0100 Subject: [PATCH 033/322] Cleaned up some registry --- .../mod/blocks/{base => }/BlockWallAA.java | 3 +- .../mod/blocks/InitBlocks.java | 1 - .../mod/blocks/base/BlockBase.java | 12 +--- .../mod/blocks/base/BlockBushBase.java | 12 +--- .../mod/blocks/base/BlockFluidFlowing.java | 13 +---- .../mod/blocks/base/BlockPlant.java | 12 +--- .../mod/blocks/base/BlockStair.java | 12 +--- .../mod/blocks/base/ItemBlockBase.java | 3 - .../mod/items/base/ItemAllToolAA.java | 58 +------------------ .../mod/items/base/ItemArmorAA.java | 11 +--- .../mod/items/base/ItemAxeAA.java | 11 +--- .../mod/items/base/ItemBase.java | 12 +--- .../mod/items/base/ItemBucketAA.java | 12 +--- .../mod/items/base/ItemEnergy.java | 12 +--- .../mod/items/base/ItemFoodBase.java | 12 +--- .../mod/items/base/ItemHoeAA.java | 11 +--- .../mod/items/base/ItemPickaxeAA.java | 11 +--- .../mod/items/base/ItemSeed.java | 9 +-- .../mod/items/base/ItemShovelAA.java | 11 +--- .../mod/items/base/ItemSwordAA.java | 11 +--- .../mod/misc/cloud/SmileyCloudEasterEggs.java | 3 +- .../actuallyadditions/mod/util/ItemUtil.java | 22 +++++++ 22 files changed, 55 insertions(+), 219 deletions(-) rename src/main/java/de/ellpeck/actuallyadditions/mod/blocks/{base => }/BlockWallAA.java (97%) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java similarity index 97% rename from src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockWallAA.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 47a564763..9d554a43d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -8,8 +8,9 @@ * © 2016 Ellpeck */ -package de.ellpeck.actuallyadditions.mod.blocks.base; +package de.ellpeck.actuallyadditions.mod.blocks; +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockFenceGate; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 4b4d7e727..03c5e14d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair; -import de.ellpeck.actuallyadditions.mod.blocks.base.BlockWallAA; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; import de.ellpeck.actuallyadditions.mod.util.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 9cefdf4b2..8b38d1fc4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -21,7 +21,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class BlockBase extends Block{ @@ -35,14 +34,7 @@ public class BlockBase extends Block{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerBlock(this, this.getItemBlock(), this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerBlock(this, this.getItemBlock(), this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index e06ec6201..292530844 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.BlockBush; import net.minecraft.block.properties.PropertyInteger; @@ -20,7 +20,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class BlockBushBase extends BlockBush{ @@ -34,14 +33,7 @@ public class BlockBushBase extends BlockBush{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerBlock(this, this.getItemBlock(), this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerBlock(this, this.getItemBlock(), this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index d4705287f..435bb9aa1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -11,8 +11,7 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.material.Material; import net.minecraft.item.EnumRarity; @@ -22,7 +21,6 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fluids.BlockFluidClassic; import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fml.common.registry.GameRegistry; public class BlockFluidFlowing extends BlockFluidClassic{ @@ -37,14 +35,7 @@ public class BlockFluidFlowing extends BlockFluidClassic{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerBlock(this, this.getItemBlock(), this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerBlock(this, this.getItemBlock(), this.getBaseName(), this.shouldAddCreative()); } protected String getBaseName(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 665a8baa6..c4a9df956 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.BlockCrops; import net.minecraft.block.state.IBlockState; @@ -26,7 +26,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.EnumPlantType; -import net.minecraftforge.fml.common.registry.GameRegistry; import java.util.List; import java.util.Random; @@ -48,14 +47,7 @@ public class BlockPlant extends BlockCrops{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerBlock(this, this.getItemBlock(), this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerBlock(this, this.getItemBlock(), this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index 6b1d3f824..39056f9c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -12,14 +12,13 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockStairs; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class BlockStair extends BlockStairs{ @@ -38,14 +37,7 @@ public class BlockStair extends BlockStairs{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerBlock(this, this.getItemBlock(), this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerBlock(this, this.getItemBlock(), this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index 37578bd51..26f1eeca4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -51,9 +51,6 @@ public class ItemBlockBase extends ItemBlock{ else if(this.block instanceof BlockStair){ return ((BlockStair)this.block).getRarity(stack); } - else if(this.block instanceof BlockWallAA){ - return ((BlockWallAA)this.block).getRarity(stack); - } else if(this.block instanceof BlockBushBase){ return ((BlockBushBase)this.block).getRarity(stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java index 8c794b77b..1ecddacd8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java @@ -12,15 +12,14 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; -import net.minecraft.block.BlockDirt; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; @@ -28,8 +27,6 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; @@ -66,15 +63,7 @@ public class ItemAllToolAA extends ItemTool{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } @@ -94,48 +83,7 @@ public class ItemAllToolAA extends ItemTool{ @Override public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ){ - if(!playerIn.canPlayerEdit(pos.offset(side), side, stack)){ - return false; - } - else{ - int hook = ForgeEventFactory.onHoeUse(stack, playerIn, worldIn, pos); - if(hook != 0){ - return hook > 0; - } - - IBlockState state = worldIn.getBlockState(pos); - Block block = state.getBlock(); - - if(side != EnumFacing.DOWN && worldIn.isAirBlock(pos.up())){ - if(block == Blocks.grass){ - return this.useHoe(stack, playerIn, worldIn, pos, Blocks.farmland.getDefaultState()); - } - - if(block == Blocks.dirt){ - switch(state.getValue(BlockDirt.VARIANT)){ - case DIRT: - return this.useHoe(stack, playerIn, worldIn, pos, Blocks.farmland.getDefaultState()); - case COARSE_DIRT: - return this.useHoe(stack, playerIn, worldIn, pos, Blocks.dirt.getDefaultState().withProperty(BlockDirt.VARIANT, BlockDirt.DirtType.DIRT)); - } - } - } - - return false; - } - } - - private boolean useHoe(ItemStack stack, EntityPlayer player, World worldIn, BlockPos target, IBlockState newState){ - worldIn.playSoundEffect((double)((float)target.getX()+0.5F), (double)((float)target.getY()+0.5F), (double)((float)target.getZ()+0.5F), newState.getBlock().stepSound.getStepSound(), (newState.getBlock().stepSound.getVolume()+1.0F)/2.0F, newState.getBlock().stepSound.getFrequency()*0.8F); - - if(worldIn.isRemote){ - return true; - } - else{ - worldIn.setBlockState(target, newState); - stack.damageItem(1, player); - return true; - } + return Items.iron_hoe.onItemUse(stack, playerIn, worldIn, pos, side, hitX, hitY, hitZ); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 02c77af81..fe671e19e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -11,14 +11,12 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemArmorAA extends ItemArmor{ @@ -40,14 +38,7 @@ public class ItemArmorAA extends ItemArmor{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java index 88dcd4e7b..fcf7cc0cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java @@ -11,14 +11,12 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemAxe; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemAxeAA extends ItemAxe{ @@ -37,14 +35,7 @@ public class ItemAxeAA extends ItemAxe{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index f54470f57..381fd1762 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -11,12 +11,11 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemBase extends Item{ @@ -30,14 +29,7 @@ public class ItemBase extends Item{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java index 509c89a7c..547fd7561 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.init.Items; @@ -19,7 +19,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemBucketAA extends ItemBucket{ @@ -34,14 +33,7 @@ public class ItemBucketAA extends ItemBucket{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 129ebc385..2b14397b3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items.base; import cofh.api.energy.ItemEnergyContainer; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; @@ -21,7 +21,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; -import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -41,14 +40,7 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index a185c9f5d..d29942265 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -11,12 +11,11 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemFoodBase extends ItemFood{ @@ -31,14 +30,7 @@ public class ItemFoodBase extends ItemFood{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index 03ed69239..accc69946 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.EnumRarity; @@ -19,7 +18,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemHoeAA extends ItemHoe{ @@ -38,14 +36,7 @@ public class ItemHoeAA extends ItemHoe{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java index a9d084248..30864b796 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java @@ -11,14 +11,12 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemPickaxeAA extends ItemPickaxe{ @@ -37,14 +35,7 @@ public class ItemPickaxeAA extends ItemPickaxe{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 0a02f544d..75ce76adc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -24,7 +24,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemSeed extends ItemSeeds{ @@ -48,11 +47,7 @@ public class ItemSeed extends ItemSeeds{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java index 8fb0a68ea..50f4ed67f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.EnumRarity; @@ -19,7 +18,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemSpade; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemShovelAA extends ItemSpade{ @@ -38,14 +36,7 @@ public class ItemShovelAA extends ItemSpade{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index 90ec82529..01e549793 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -12,14 +12,12 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.common.registry.GameRegistry; public class ItemSwordAA extends ItemSword{ @@ -38,14 +36,7 @@ public class ItemSwordAA extends ItemSword{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerItem(this, this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 86296bf67..8578607c9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -22,10 +22,11 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import java.util.ArrayList; +import java.util.List; public class SmileyCloudEasterEggs{ - public static final ArrayList cloudStuff = new ArrayList(); + public static List cloudStuff = new ArrayList(); static{ //Glenthor diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index e62ac4e4f..a6a73b3f1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -10,11 +10,15 @@ package de.ellpeck.actuallyadditions.mod.util; +import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; +import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; +import net.minecraft.block.Block; import net.minecraft.enchantment.Enchantment; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.registry.GameRegistry; import java.util.List; @@ -29,6 +33,24 @@ public class ItemUtil{ return null; } + public static void registerBlock(Block block, Class itemBlock, String name, boolean addTab){ + block.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+name); + + block.setRegistryName(ModUtil.MOD_ID_LOWER, name); + GameRegistry.registerBlock(block, itemBlock); + + block.setCreativeTab(addTab ? CreativeTab.instance : null); + } + + public static void registerItem(Item item, String name, boolean addTab){ + item.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+name); + + item.setRegistryName(ModUtil.MOD_ID_LOWER, name); + GameRegistry.registerItem(item); + + item.setCreativeTab(addTab ? CreativeTab.instance : null); + } + /** * Returns true if array contains stack or if both contain null */ From 54c0884b03e3d526718dd6e5e50c379cd0c326f5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 18:41:37 +0100 Subject: [PATCH 034/322] Moved recipe getting to recipeUtil --- .../mod/crafting/BlockCrafting.java | 105 +++++++++--------- .../mod/crafting/CrusherCrafting.java | 44 ++++---- .../mod/crafting/FoodCrafting.java | 35 +++--- .../mod/crafting/ItemCrafting.java | 83 +++++++------- .../mod/crafting/MiscCrafting.java | 14 +-- .../mod/crafting/ToolCrafting.java | 30 ++--- .../mod/items/InitForeignPaxels.java | 8 +- .../mod/items/lens/LensNoneRecipeHandler.java | 40 +++---- .../mod/util/RecipeUtil.java | 38 +++++++ .../actuallyadditions/mod/util/Util.java | 24 ---- 10 files changed, 219 insertions(+), 202 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 1f5fcde97..b6586a31c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -90,7 +91,7 @@ public class BlockCrafting{ 'G', new ItemStack(Items.gunpowder), 'S', new ItemStack(Items.stick), 'C', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeFireworkBox = Util.GetRecipes.lastIRecipe(); + recipeFireworkBox = RecipeUtil.lastIRecipe(); } //Miner @@ -101,7 +102,7 @@ public class BlockCrafting{ 'I', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'C', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), 'D', new ItemStack(InitItems.itemDrill, 1, Util.WILDCARD))); - recipeMiner = Util.GetRecipes.lastIRecipe(); + recipeMiner = RecipeUtil.lastIRecipe(); } //Quartz @@ -166,7 +167,7 @@ public class BlockCrafting{ 'R', "dustRedstone", 'I', "ingotIron", 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()))); - recipeAtomicReconstructor = Util.GetRecipes.lastIRecipe(); + recipeAtomicReconstructor = RecipeUtil.lastIRecipe(); } //Laser Relay @@ -177,7 +178,7 @@ public class BlockCrafting{ 'O', new ItemStack(Blocks.obsidian), 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeLaserRelay = Util.GetRecipes.lastIRecipe(); + recipeLaserRelay = RecipeUtil.lastIRecipe(); } //Ranged Collector @@ -188,7 +189,7 @@ public class BlockCrafting{ 'H', new ItemStack(Blocks.hopper), 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'A', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()))); - recipeRangedCollector = Util.GetRecipes.lastIRecipe(); + recipeRangedCollector = RecipeUtil.lastIRecipe(); } //Directional Breaker @@ -197,7 +198,7 @@ public class BlockCrafting{ "BBB", " C ", 'C', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), 'B', new ItemStack(InitBlocks.blockBreaker))); - recipeDirectionalBreaker = Util.GetRecipes.lastIRecipe(); + recipeDirectionalBreaker = RecipeUtil.lastIRecipe(); } //Smiley Cloud @@ -206,7 +207,7 @@ public class BlockCrafting{ " W ", "WXW", " W ", 'W', new ItemStack(Blocks.wool, 1, Util.WILDCARD), 'X', new ItemStack(InitItems.itemSolidifiedExperience))); - recipeSmileyCloud = Util.GetRecipes.lastIRecipe(); + recipeSmileyCloud = RecipeUtil.lastIRecipe(); } //Compost @@ -215,7 +216,7 @@ public class BlockCrafting{ "W W", "W W", "WCW", 'W', "plankWood", 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()))); - recipeCompost = Util.GetRecipes.lastIRecipe(); + recipeCompost = RecipeUtil.lastIRecipe(); } //XP Solidifier @@ -225,14 +226,14 @@ public class BlockCrafting{ 'X', new ItemStack(InitItems.itemSolidifiedExperience), 'D', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeSolidifier = Util.GetRecipes.lastIRecipe(); + recipeSolidifier = RecipeUtil.lastIRecipe(); } //Charcoal Block GameRegistry.addRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.CHARCOAL_BLOCK.ordinal()), "CCC", "CCC", "CCC", 'C', new ItemStack(Items.coal, 1, 1)); - recipeBlockChar = Util.GetRecipes.lastIRecipe(); + recipeBlockChar = RecipeUtil.lastIRecipe(); GameRegistry.addShapelessRecipe(new ItemStack(Items.coal, 9, 1), new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.CHARCOAL_BLOCK.ordinal())); @@ -243,7 +244,7 @@ public class BlockCrafting{ 'W', "plankWood", 'R', "logWood", 'S', "stickWood")); - recipeCase = Util.GetRecipes.lastIRecipe(); + recipeCase = RecipeUtil.lastIRecipe(); } //Iron Casing @@ -253,7 +254,7 @@ public class BlockCrafting{ 'Q', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 'W', "ingotIron", 'S', "stickWood")); - recipeIronCase = Util.GetRecipes.lastIRecipe(); + recipeIronCase = RecipeUtil.lastIRecipe(); } //Ender Casing @@ -263,7 +264,7 @@ public class BlockCrafting{ 'W', new ItemStack(Items.ender_pearl), 'R', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.QUARTZ.ordinal()), 'S', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()))); - recipeEnderCase = Util.GetRecipes.lastIRecipe(); + recipeEnderCase = RecipeUtil.lastIRecipe(); } //Phantom Booster @@ -273,7 +274,7 @@ public class BlockCrafting{ 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()))); - recipePhantomBooster = Util.GetRecipes.lastIRecipe(); + recipePhantomBooster = RecipeUtil.lastIRecipe(); } //Coffee Machine @@ -284,7 +285,7 @@ public class BlockCrafting{ 'C', InitItems.itemCoffeeBean, 'S', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'A', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()))); - recipeCoffeeMachine = Util.GetRecipes.lastIRecipe(); + recipeCoffeeMachine = RecipeUtil.lastIRecipe(); } //Energizer @@ -294,7 +295,7 @@ public class BlockCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'A', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()))); - recipeEnergizer = Util.GetRecipes.lastIRecipe(); + recipeEnergizer = RecipeUtil.lastIRecipe(); } //Enervator @@ -304,7 +305,7 @@ public class BlockCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'A', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()))); - recipeEnervator = Util.GetRecipes.lastIRecipe(); + recipeEnervator = RecipeUtil.lastIRecipe(); } //Lava Factory @@ -315,7 +316,7 @@ public class BlockCrafting{ 'S', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), 'L', Items.lava_bucket)); - recipeLavaFactory = Util.GetRecipes.lastIRecipe(); + recipeLavaFactory = RecipeUtil.lastIRecipe(); } //Casing @@ -324,7 +325,7 @@ public class BlockCrafting{ "ICI", 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeCasing = Util.GetRecipes.lastIRecipe(); + recipeCasing = RecipeUtil.lastIRecipe(); } //Canola Press @@ -335,7 +336,7 @@ public class BlockCrafting{ 'H', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal()))); - recipeCanolaPress = Util.GetRecipes.lastIRecipe(); + recipeCanolaPress = RecipeUtil.lastIRecipe(); } //Fermenting Barrel @@ -346,7 +347,7 @@ public class BlockCrafting{ 'H', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'R', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()), 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal()))); - recipeFermentingBarrel = Util.GetRecipes.lastIRecipe(); + recipeFermentingBarrel = RecipeUtil.lastIRecipe(); } //Phantomface @@ -357,7 +358,7 @@ public class BlockCrafting{ 'C', Blocks.chest, 'S', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'B', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()))); - recipePhantomface = Util.GetRecipes.lastIRecipe(); + recipePhantomface = RecipeUtil.lastIRecipe(); } //Phantom Placer @@ -365,7 +366,7 @@ public class BlockCrafting{ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitBlocks.blockPhantomPlacer), InitBlocks.blockPlacer, InitBlocks.blockPhantomface)); - recipePhantomPlacer = Util.GetRecipes.lastIRecipe(); + recipePhantomPlacer = RecipeUtil.lastIRecipe(); } //Phantom Breaker @@ -373,7 +374,7 @@ public class BlockCrafting{ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitBlocks.blockPhantomBreaker), InitBlocks.blockBreaker, InitBlocks.blockPhantomface)); - recipePhantomBreaker = Util.GetRecipes.lastIRecipe(); + recipePhantomBreaker = RecipeUtil.lastIRecipe(); } //Phantom Energyface @@ -382,7 +383,7 @@ public class BlockCrafting{ " R ", "RFR", " R ", 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'F', InitBlocks.blockPhantomface)); - recipeEnergyface = Util.GetRecipes.lastIRecipe(); + recipeEnergyface = RecipeUtil.lastIRecipe(); } //Phantom Liquiface @@ -391,7 +392,7 @@ public class BlockCrafting{ "RFR", 'R', Items.bucket, 'F', InitBlocks.blockPhantomface)); - recipeLiquiface = Util.GetRecipes.lastIRecipe(); + recipeLiquiface = RecipeUtil.lastIRecipe(); } //Liquid Placer @@ -400,7 +401,7 @@ public class BlockCrafting{ "RFR", 'R', Items.bucket, 'F', InitBlocks.blockPlacer)); - recipeLiquidPlacer = Util.GetRecipes.lastIRecipe(); + recipeLiquidPlacer = RecipeUtil.lastIRecipe(); } //Liquid Breaker @@ -409,7 +410,7 @@ public class BlockCrafting{ "RFR", 'R', Items.bucket, 'F', InitBlocks.blockBreaker)); - recipeLiquidCollector = Util.GetRecipes.lastIRecipe(); + recipeLiquidCollector = RecipeUtil.lastIRecipe(); } //Oil Generator @@ -419,7 +420,7 @@ public class BlockCrafting{ 'C', "cobblestone", 'R', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'B', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal()))); - recipeOilGen = Util.GetRecipes.lastIRecipe(); + recipeOilGen = RecipeUtil.lastIRecipe(); } //Coal Generator @@ -429,7 +430,7 @@ public class BlockCrafting{ 'C', "cobblestone", 'B', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'R', new ItemStack(Items.coal, 1, Util.WILDCARD))); - recipeCoalGen = Util.GetRecipes.lastIRecipe(); + recipeCoalGen = RecipeUtil.lastIRecipe(); } //Leaf Generator @@ -441,14 +442,14 @@ public class BlockCrafting{ 'E', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'L', "treeLeaves", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeLeafGen = Util.GetRecipes.lastIRecipe(); + recipeLeafGen = RecipeUtil.lastIRecipe(); } //Enderpearl Block GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()), "EE", "EE", 'E', Items.ender_pearl)); - recipeEnderPearlBlock = Util.GetRecipes.lastIRecipe(); + recipeEnderPearlBlock = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(Items.ender_pearl, 4), new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()))); @@ -456,7 +457,7 @@ public class BlockCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.QUARTZ.ordinal()), "QQ", "QQ", 'Q', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); - recipeQuartzBlock = Util.GetRecipes.lastIRecipe(); + recipeQuartzBlock = RecipeUtil.lastIRecipe(); //Fishing Net if(ConfigCrafting.FISHING_NET.isEnabled()){ @@ -464,7 +465,7 @@ public class BlockCrafting{ "SSS", "SDS", "SSS", 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'S', Items.string)); - recipeFisher = Util.GetRecipes.lastIRecipe(); + recipeFisher = RecipeUtil.lastIRecipe(); } //Repairer @@ -475,7 +476,7 @@ public class BlockCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()))); - recipeRepairer = Util.GetRecipes.lastIRecipe(); + recipeRepairer = RecipeUtil.lastIRecipe(); } //Solar Panel @@ -487,7 +488,7 @@ public class BlockCrafting{ 'Q', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'B', new ItemStack(Blocks.iron_bars))); - recipeSolar = Util.GetRecipes.lastIRecipe(); + recipeSolar = RecipeUtil.lastIRecipe(); } //Heat Collector @@ -500,20 +501,20 @@ public class BlockCrafting{ 'L', new ItemStack(Items.lava_bucket), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'B', new ItemStack(Blocks.iron_bars))); - recipeHeatCollector = Util.GetRecipes.lastIRecipe(); + recipeHeatCollector = RecipeUtil.lastIRecipe(); } //Quartz Pillar GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.QUARTZ_PILLAR.ordinal()), "Q", "Q", 'Q', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); - recipeQuartzPillar = Util.GetRecipes.lastIRecipe(); + recipeQuartzPillar = RecipeUtil.lastIRecipe(); //Chiseled Quartz GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 2, TheMiscBlocks.QUARTZ_CHISELED.ordinal()), "Q", "Q", 'Q', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.QUARTZ.ordinal()))); - recipeQuartzChiseled = Util.GetRecipes.lastIRecipe(); + recipeQuartzChiseled = RecipeUtil.lastIRecipe(); //Inputter if(ConfigCrafting.INPUTTER.isEnabled()){ @@ -522,14 +523,14 @@ public class BlockCrafting{ 'W', "plankWood", 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()), 'H', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeESD = Util.GetRecipes.lastIRecipe(); + recipeESD = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitBlocks.blockInputterAdvanced), InitBlocks.blockInputter, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()))); - recipeAdvancedESD = Util.GetRecipes.lastIRecipe(); + recipeAdvancedESD = RecipeUtil.lastIRecipe(); } //Crusher @@ -542,7 +543,7 @@ public class BlockCrafting{ 'Q', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'P', new ItemStack(Blocks.piston), 'F', new ItemStack(Items.flint))); - recipeCrusher = Util.GetRecipes.lastIRecipe(); + recipeCrusher = RecipeUtil.lastIRecipe(); } //Double Crusher @@ -554,7 +555,7 @@ public class BlockCrafting{ 'R', InitBlocks.blockGrinder, 'F', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'P', new ItemStack(Blocks.piston))); - recipeDoubleCrusher = Util.GetRecipes.lastIRecipe(); + recipeDoubleCrusher = RecipeUtil.lastIRecipe(); } //Double Furnace @@ -566,7 +567,7 @@ public class BlockCrafting{ 'R', new ItemStack(Blocks.furnace), 'F', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'P', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeFurnace = Util.GetRecipes.lastIRecipe(); + recipeFurnace = RecipeUtil.lastIRecipe(); } //Feeder @@ -577,7 +578,7 @@ public class BlockCrafting{ 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'C', new ItemStack(Items.golden_carrot), 'H', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()))); - recipeFeeder = Util.GetRecipes.lastIRecipe(); + recipeFeeder = RecipeUtil.lastIRecipe(); } //Giant Chest @@ -587,7 +588,7 @@ public class BlockCrafting{ 'C', new ItemStack(Blocks.chest), 'D', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()), 'W', "plankWood")); - recipeCrate = Util.GetRecipes.lastIRecipe(); + recipeCrate = RecipeUtil.lastIRecipe(); } //Greenhouse Glass @@ -597,7 +598,7 @@ public class BlockCrafting{ 'G', "blockGlass", 'D', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.LAPIS.ordinal()), 'S', "treeSapling")); - recipeGlass = Util.GetRecipes.lastIRecipe(); + recipeGlass = RecipeUtil.lastIRecipe(); } //Placer @@ -607,7 +608,7 @@ public class BlockCrafting{ 'C', "cobblestone", 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'P', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()))); - recipePlacer = Util.GetRecipes.lastIRecipe(); + recipePlacer = RecipeUtil.lastIRecipe(); } //Breaker @@ -617,7 +618,7 @@ public class BlockCrafting{ 'C', "cobblestone", 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'P', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()))); - recipeBreaker = Util.GetRecipes.lastIRecipe(); + recipeBreaker = RecipeUtil.lastIRecipe(); } //Dropper @@ -628,7 +629,7 @@ public class BlockCrafting{ 'C', "cobblestone", 'D', Blocks.dropper, 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeDropper = Util.GetRecipes.lastIRecipe(); + recipeDropper = RecipeUtil.lastIRecipe(); } if(ConfigCrafting.LAMPS.isEnabled()){ @@ -639,14 +640,14 @@ public class BlockCrafting{ 'G', "glowstone", 'D', "dye"+BlockColoredLamp.allLampTypes[i].name, 'Q', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); - recipesLamps[i] = Util.GetRecipes.lastIRecipe(); + recipesLamps[i] = RecipeUtil.lastIRecipe(); } GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLampPowerer, 4), "XXX", "XLX", "XXX", 'X', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'L', new ItemStack(InitBlocks.blockColoredLamp, 1, Util.WILDCARD))); - recipePowerer = Util.GetRecipes.lastIRecipe(); + recipePowerer = RecipeUtil.lastIRecipe(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index 91c307a7e..c639e9c1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -17,7 +17,7 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -35,38 +35,38 @@ public class CrusherCrafting{ ModUtil.LOGGER.info("Initializing Crusher Recipes..."); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.bone), new ItemStack(Items.dye, 6, 15)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.reeds), new ItemStack(Items.sugar, 3)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.yellow_flower), new ItemStack(Items.dye, 3, 11)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 0), new ItemStack(Items.dye, 3, 1)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 1), new ItemStack(Items.dye, 3, 12)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 2), new ItemStack(Items.dye, 3, 13)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 3), new ItemStack(Items.dye, 3, 7)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 4), new ItemStack(Items.dye, 3, 1)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 5), new ItemStack(Items.dye, 3, 14)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 6), new ItemStack(Items.dye, 3, 7)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 7), new ItemStack(Items.dye, 3, 9)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 8), new ItemStack(Items.dye, 3, 7)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 0), new ItemStack(Items.dye, 4, 11)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 1), new ItemStack(Items.dye, 4, 13)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 4), new ItemStack(Items.dye, 4, 1)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 5), new ItemStack(Items.dye, 4, 9)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe("oreRedstone", "dustRedstone", 10); ActuallyAdditionsAPI.addCrusherRecipe("oreLapis", "gemLapis", 12); @@ -79,23 +79,23 @@ public class CrusherCrafting{ ActuallyAdditionsAPI.addCrusherRecipe("stone", "cobblestone", 1); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.sugar, 2)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.glowstone), new ItemStack(Items.glowstone_dust, 4)); - miscRecipes.add(Util.GetRecipes.lastCrusherRecipe()); + miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe("oreNickel", "dustNickel", 2, "dustPlatinum", 1, 15); ActuallyAdditionsAPI.addCrusherRecipe("oreIron", "dustIron", 2, "dustGold", 1, 20); if(ConfigCrafting.HORSE_ARMORS.isEnabled()){ ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.iron_horse_armor), "dustIron", 8); - recipeIronHorseArmor = Util.GetRecipes.lastCrusherRecipe(); + recipeIronHorseArmor = RecipeUtil.lastCrusherRecipe(); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.golden_horse_armor), "dustGold", 8); - recipeGoldHorseArmor = Util.GetRecipes.lastCrusherRecipe(); + recipeGoldHorseArmor = RecipeUtil.lastCrusherRecipe(); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.diamond_horse_armor), "dustDiamond", 8); - recipeDiamondHorseArmor = Util.GetRecipes.lastCrusherRecipe(); + recipeDiamondHorseArmor = RecipeUtil.lastCrusherRecipe(); } CrusherRecipeRegistry.searchCases.add(new CrusherRecipeRegistry.SearchCase("oreNether", 6)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java index d2cb5a0b0..c037c124c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -57,7 +58,7 @@ public class FoodCrafting{ if(ConfigCrafting.BACON.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemFoods, 3, TheFoods.BACON.ordinal()), knifeStack.copy(), new ItemStack(Items.cooked_porkchop))); - recipeBacon = Util.GetRecipes.lastIRecipe(); + recipeBacon = RecipeUtil.lastIRecipe(); } //Baguette @@ -76,7 +77,7 @@ public class FoodCrafting{ 'F', new ItemStack(Items.cooked_fish, 1, Util.WILDCARD), 'K', knifeStack.copy(), 'H', new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()))); - recipePizza = Util.GetRecipes.lastIRecipe(); + recipePizza = RecipeUtil.lastIRecipe(); } //Hamburger @@ -87,7 +88,7 @@ public class FoodCrafting{ 'C', new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()), 'K', knifeStack.copy(), 'B', new ItemStack(Items.cooked_beef))); - recipeHamburger = Util.GetRecipes.lastIRecipe(); + recipeHamburger = RecipeUtil.lastIRecipe(); } //Big Cookie @@ -96,7 +97,7 @@ public class FoodCrafting{ "DCD", "CDC", "DCD", 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DOUGH.ordinal()), 'C', new ItemStack(Items.dye, 1, 3))); - recipeBigCookie = Util.GetRecipes.lastIRecipe(); + recipeBigCookie = RecipeUtil.lastIRecipe(); } //Sub Sandwich @@ -108,7 +109,7 @@ public class FoodCrafting{ 'F', new ItemStack(Items.cooked_fish, 1, Util.WILDCARD), 'B', new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal()), 'K', knifeStack.copy())); - recipeSubSandwich = Util.GetRecipes.lastIRecipe(); + recipeSubSandwich = RecipeUtil.lastIRecipe(); } //French Fry @@ -116,7 +117,7 @@ public class FoodCrafting{ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemFoods, 2, TheFoods.FRENCH_FRY.ordinal()), new ItemStack(Items.baked_potato), knifeStack.copy())); - recipeFrenchFry = Util.GetRecipes.lastIRecipe(); + recipeFrenchFry = RecipeUtil.lastIRecipe(); } //French Fries @@ -125,7 +126,7 @@ public class FoodCrafting{ "FFF", " P ", 'P', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.PAPER_CONE.ordinal()), 'F', new ItemStack(InitItems.itemFoods, 1, TheFoods.FRENCH_FRY.ordinal()))); - recipeFrenchFries = Util.GetRecipes.lastIRecipe(); + recipeFrenchFries = RecipeUtil.lastIRecipe(); } //Fish N Chips @@ -135,14 +136,14 @@ public class FoodCrafting{ 'I', new ItemStack(Items.cooked_fish, 1, Util.WILDCARD), 'P', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.PAPER_CONE.ordinal()), 'F', new ItemStack(InitItems.itemFoods, 1, TheFoods.FRENCH_FRY.ordinal()))); - recipeFishNChips = Util.GetRecipes.lastIRecipe(); + recipeFishNChips = RecipeUtil.lastIRecipe(); } //Cheese if(ConfigCrafting.CHEESE.isEnabled()){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()), new ItemStack(Items.milk_bucket)); - recipeCheese = Util.GetRecipes.lastIRecipe(); + recipeCheese = RecipeUtil.lastIRecipe(); } //Pumpkin Stew @@ -151,14 +152,14 @@ public class FoodCrafting{ "P", "B", 'P', new ItemStack(Blocks.pumpkin), 'B', new ItemStack(Items.bowl)); - recipePumpkinStew = Util.GetRecipes.lastIRecipe(); + recipePumpkinStew = RecipeUtil.lastIRecipe(); } //Carrot Juice if(ConfigCrafting.CARROT_JUICE.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.CARROT_JUICE.ordinal()), new ItemStack(Items.glass_bottle), "cropCarrot", knifeStack.copy())); - recipeCarrotJuice = Util.GetRecipes.lastIRecipe(); + recipeCarrotJuice = RecipeUtil.lastIRecipe(); } //Spaghetti @@ -167,14 +168,14 @@ public class FoodCrafting{ "NNN", " B ", 'N', new ItemStack(InitItems.itemFoods, 1, TheFoods.NOODLE.ordinal()), 'B', new ItemStack(Items.bowl))); - recipeSpaghetti = Util.GetRecipes.lastIRecipe(); + recipeSpaghetti = RecipeUtil.lastIRecipe(); } //Noodle if(ConfigCrafting.NOODLE.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.NOODLE.ordinal()), "cropWheat", knifeStack.copy())); - recipeNoodle = Util.GetRecipes.lastIRecipe(); + recipeNoodle = RecipeUtil.lastIRecipe(); } //Chocolate @@ -183,7 +184,7 @@ public class FoodCrafting{ "C C", "CMC", "C C", 'C', new ItemStack(Items.dye, 1, 3), 'M', new ItemStack(Items.milk_bucket)); - recipeChocolate = Util.GetRecipes.lastIRecipe(); + recipeChocolate = RecipeUtil.lastIRecipe(); } //Chocolate Cake @@ -195,20 +196,20 @@ public class FoodCrafting{ 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DOUGH.ordinal()), 'S', new ItemStack(Items.sugar), 'C', new ItemStack(Items.dye, 1, 3))); - recipeChocolateCake = Util.GetRecipes.lastIRecipe(); + recipeChocolateCake = RecipeUtil.lastIRecipe(); } //Toast if(ConfigCrafting.TOAST.isEnabled()){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemFoods, 2, TheFoods.TOAST.ordinal()), new ItemStack(Items.bread)); - recipeToast = Util.GetRecipes.lastIRecipe(); + recipeToast = RecipeUtil.lastIRecipe(); } //Chocolate Toast if(ConfigCrafting.CHOCOLATE_TOAST.isEnabled()){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.CHOCOLATE_TOAST.ordinal()), new ItemStack(InitItems.itemFoods, 1, TheFoods.TOAST.ordinal()), new ItemStack(InitItems.itemFoods, 1, TheFoods.CHOCOLATE.ordinal())); - recipeChocolateToast = Util.GetRecipes.lastIRecipe(); + recipeChocolateToast = RecipeUtil.lastIRecipe(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 29b70ebd4..d248b47b3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.*; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.IGrowable; import net.minecraft.init.Blocks; @@ -87,15 +88,15 @@ public class ItemCrafting{ "GGG", "GBG", "GGG", 'G', "blockGlass", 'B', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); - recipeLens = Util.GetRecipes.lastIRecipe(); + recipeLens = RecipeUtil.lastIRecipe(); //Black Dye GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 2, TheMiscItems.BLACK_DYE.ordinal()), new ItemStack(InitBlocks.blockBlackLotus))); - recipeBlackDye = Util.GetRecipes.lastIRecipe(); + recipeBlackDye = RecipeUtil.lastIRecipe(); //Booklet GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemBooklet), new ItemStack(InitItems.itemCanolaSeed), new ItemStack(Items.paper))); - recipeBook = Util.GetRecipes.lastIRecipe(); + recipeBook = RecipeUtil.lastIRecipe(); //Clearing NBT Storage GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemLaserWrench), new ItemStack(InitItems.itemLaserWrench)); @@ -107,7 +108,7 @@ public class ItemCrafting{ "CWC", "WWW", "CWC", 'C', new ItemStack(Blocks.chest), 'W', "plankWood")); - recipeChestToCrateUpgrade = Util.GetRecipes.lastIRecipe(); + recipeChestToCrateUpgrade = RecipeUtil.lastIRecipe(); } //Crate Keeper @@ -117,7 +118,7 @@ public class ItemCrafting{ 'I', "ingotIron", 'W', "plankWood", 'Q', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); - recipeCrateKeeper = Util.GetRecipes.lastIRecipe(); + recipeCrateKeeper = RecipeUtil.lastIRecipe(); } //Laser Wrench @@ -126,7 +127,7 @@ public class ItemCrafting{ "C ", " S ", " S", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'S', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeLaserWrench = Util.GetRecipes.lastIRecipe(); + recipeLaserWrench = RecipeUtil.lastIRecipe(); } //Rice Stuff @@ -152,7 +153,7 @@ public class ItemCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'P', new ItemStack(Blocks.piston), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeLeafBlower = Util.GetRecipes.lastIRecipe(); + recipeLeafBlower = RecipeUtil.lastIRecipe(); } //Drill @@ -164,12 +165,12 @@ public class ItemCrafting{ 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DRILL_CORE.ordinal()), 'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeDrill = Util.GetRecipes.lastIRecipe(); + recipeDrill = RecipeUtil.lastIRecipe(); for(int i = 0; i < 16; i++){ if(i != TheColoredLampColors.LIGHT_BLUE.ordinal()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemDrill, 1, i), lightBlueDrill.copy(), "dye"+TheColoredLampColors.values()[i].name)); - recipesDrillColoring.add(Util.GetRecipes.lastIRecipe()); + recipesDrillColoring.add(RecipeUtil.lastIRecipe()); } } } @@ -181,7 +182,7 @@ public class ItemCrafting{ 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeDrillCore = Util.GetRecipes.lastIRecipe(); + recipeDrillCore = RecipeUtil.lastIRecipe(); } //Tele Staff @@ -192,7 +193,7 @@ public class ItemCrafting{ 'E', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()), 'S', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()), 'B', new ItemStack(InitItems.itemBattery, 1, Util.WILDCARD))); - recipeStaff = Util.GetRecipes.lastIRecipe(); + recipeStaff = RecipeUtil.lastIRecipe(); } //Drill Speed @@ -202,21 +203,21 @@ public class ItemCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'S', Items.sugar, 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()))); - recipeDrillSpeedI = Util.GetRecipes.lastIRecipe(); + recipeDrillSpeedI = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeSpeedII), "ISI", "SCS", "ISI", 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'S', Items.sugar, 'C', Items.cake)); - recipeDrillSpeedII = Util.GetRecipes.lastIRecipe(); + recipeDrillSpeedII = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeSpeedIII), "ISI", "SFS", "ISI", 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'S', Items.sugar, 'F', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()))); - recipeDrillSpeedIII = Util.GetRecipes.lastIRecipe(); + recipeDrillSpeedIII = RecipeUtil.lastIRecipe(); } //Drill Fortune @@ -226,14 +227,14 @@ public class ItemCrafting{ 'I', Blocks.glowstone, 'S', Items.redstone, 'R', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()))); - recipeDrillFortuneI = Util.GetRecipes.lastIRecipe(); + recipeDrillFortuneI = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeFortuneII), "ISI", "SRS", "ISI", 'I', Blocks.glowstone, 'S', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'R', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()))); - recipeDrillFortuneII = Util.GetRecipes.lastIRecipe(); + recipeDrillFortuneII = RecipeUtil.lastIRecipe(); } //Drill Size @@ -243,14 +244,14 @@ public class ItemCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()))); - recipeDrillThree = Util.GetRecipes.lastIRecipe(); + recipeDrillThree = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeFiveByFive), "DID", "ICI", "DID", 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeDrillFive = Util.GetRecipes.lastIRecipe(); + recipeDrillFive = RecipeUtil.lastIRecipe(); } //Drill Silk Touch @@ -260,7 +261,7 @@ public class ItemCrafting{ 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), 'S', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeDrillSilk = Util.GetRecipes.lastIRecipe(); + recipeDrillSilk = RecipeUtil.lastIRecipe(); } //Drill Placing @@ -271,7 +272,7 @@ public class ItemCrafting{ 'E', Items.paper, 'A', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); - recipeDrillPlacing = Util.GetRecipes.lastIRecipe(); + recipeDrillPlacing = RecipeUtil.lastIRecipe(); } //Battery @@ -281,7 +282,7 @@ public class ItemCrafting{ 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeBattery = Util.GetRecipes.lastIRecipe(); + recipeBattery = RecipeUtil.lastIRecipe(); } //Double Battery @@ -291,7 +292,7 @@ public class ItemCrafting{ 'R', new ItemStack(InitItems.itemBattery), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeBatteryDouble = Util.GetRecipes.lastIRecipe(); + recipeBatteryDouble = RecipeUtil.lastIRecipe(); } //Magnet Ring @@ -302,7 +303,7 @@ public class ItemCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'B', new ItemStack(Items.dye, 1, 4), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); - recipeMagnetRing = Util.GetRecipes.lastIRecipe(); + recipeMagnetRing = RecipeUtil.lastIRecipe(); } //Growth Ring @@ -312,7 +313,7 @@ public class ItemCrafting{ 'S', new ItemStack(Items.wheat_seeds), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); - recipeGrowthRing = Util.GetRecipes.lastIRecipe(); + recipeGrowthRing = RecipeUtil.lastIRecipe(); } //Water Ring @@ -322,7 +323,7 @@ public class ItemCrafting{ 'B', new ItemStack(Items.water_bucket), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); - recipeWaterRing = Util.GetRecipes.lastIRecipe(); + recipeWaterRing = RecipeUtil.lastIRecipe(); } //Triple Battery @@ -332,7 +333,7 @@ public class ItemCrafting{ 'R', new ItemStack(InitItems.itemBatteryDouble), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeBatteryTriple = Util.GetRecipes.lastIRecipe(); + recipeBatteryTriple = RecipeUtil.lastIRecipe(); } //Quadruple Battery @@ -342,7 +343,7 @@ public class ItemCrafting{ 'R', new ItemStack(InitItems.itemBatteryTriple), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeBatteryQuadruple = Util.GetRecipes.lastIRecipe(); + recipeBatteryQuadruple = RecipeUtil.lastIRecipe(); } //Quintuple Battery @@ -352,7 +353,7 @@ public class ItemCrafting{ 'R', new ItemStack(InitItems.itemBatteryQuadruple), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeBatteryQuintuple = Util.GetRecipes.lastIRecipe(); + recipeBatteryQuintuple = RecipeUtil.lastIRecipe(); } //Bat Wings @@ -362,7 +363,7 @@ public class ItemCrafting{ 'W', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal()), 'N', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'D', new ItemStack(Items.nether_star))); - recipeWings = Util.GetRecipes.lastIRecipe(); + recipeWings = RecipeUtil.lastIRecipe(); } //Quartz @@ -378,7 +379,7 @@ public class ItemCrafting{ " R ", "RIR", " R ", 'I', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()))); - recipeCoil = Util.GetRecipes.lastIRecipe(); + recipeCoil = RecipeUtil.lastIRecipe(); } //Cup @@ -387,7 +388,7 @@ public class ItemCrafting{ "S S", "SCS", "SSS", 'S', "stone", 'C', InitItems.itemCoffeeBean)); - recipeCup = Util.GetRecipes.lastIRecipe(); + recipeCup = RecipeUtil.lastIRecipe(); } //Resonant Rice @@ -402,7 +403,7 @@ public class ItemCrafting{ " G ", "GCG", " G ", 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'G', "ingotGold")); - recipeCoilAdvanced = Util.GetRecipes.lastIRecipe(); + recipeCoilAdvanced = RecipeUtil.lastIRecipe(); } //Advanced Leaf Blower @@ -413,7 +414,7 @@ public class ItemCrafting{ 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'P', new ItemStack(Blocks.piston), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); - recipeLeafBlowerAdvanced = Util.GetRecipes.lastIRecipe(); + recipeLeafBlowerAdvanced = RecipeUtil.lastIRecipe(); } //Phantom Connector @@ -423,7 +424,7 @@ public class ItemCrafting{ 'Y', Items.ender_eye, 'E', Items.ender_pearl, 'S', "stickWood")); - recipePhantomConnector = Util.GetRecipes.lastIRecipe(); + recipePhantomConnector = RecipeUtil.lastIRecipe(); } //Quartz @@ -435,7 +436,7 @@ public class ItemCrafting{ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemKnife), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.KNIFE_BLADE.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.KNIFE_HANDLE.ordinal()))); - recipeKnife = Util.GetRecipes.lastIRecipe(); + recipeKnife = RecipeUtil.lastIRecipe(); } //Crafter on a Stick @@ -448,10 +449,10 @@ public class ItemCrafting{ //Tiny Coal GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_COAL.ordinal()), new ItemStack(Items.coal)); - recipeTinyCoal = Util.GetRecipes.lastIRecipe(); + recipeTinyCoal = RecipeUtil.lastIRecipe(); GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_CHAR.ordinal()), new ItemStack(Items.coal, 1, 1)); - recipeTinyChar = Util.GetRecipes.lastIRecipe(); + recipeTinyChar = RecipeUtil.lastIRecipe(); //Rice Seeds GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemRiceSeed), @@ -490,7 +491,7 @@ public class ItemCrafting{ 'G', "ingotGold", 'I', "ingotIron", 'D', "dustGlowstone")); - recipeRing = Util.GetRecipes.lastIRecipe(); + recipeRing = RecipeUtil.lastIRecipe(); if(ConfigCrafting.RING_SPEED.isEnabled()){ addRingRecipeWithStack(ThePotionRings.SPEED.craftingItem, ThePotionRings.SPEED.ordinal()); @@ -526,9 +527,9 @@ public class ItemCrafting{ public static void addRingRecipeWithStack(ItemStack mainStack, int meta){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), new ItemStack(Items.nether_wart), new ItemStack(Items.potionitem), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal())); - recipesPotionRings.add(Util.GetRecipes.lastIRecipe()); + recipesPotionRings.add(RecipeUtil.lastIRecipe()); GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(Items.nether_star), new ItemStack(Items.nether_star)); - recipesPotionRings.add(Util.GetRecipes.lastIRecipe()); + recipesPotionRings.add(RecipeUtil.lastIRecipe()); } public static void initMashedFoodRecipes(){ @@ -538,7 +539,7 @@ public class ItemCrafting{ if(!isBlacklisted(item)){ ItemStack ingredient = new ItemStack(item, 1, Util.WILDCARD); GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.MASHED_FOOD.ordinal()), ingredient, ingredient, ingredient, ingredient, new ItemStack(InitItems.itemKnife, 1, Util.WILDCARD)); - recipesMashedFood.add(Util.GetRecipes.lastIRecipe()); + recipesMashedFood.add(RecipeUtil.lastIRecipe()); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index 9618d86cd..807217415 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -16,7 +16,7 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; @@ -36,23 +36,23 @@ public class MiscCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockCrystal, 1, i), "XXX", "XXX", "XXX", 'X', new ItemStack(InitItems.itemCrystal, 1, i))); - recipesCrystalBlocks[i] = Util.GetRecipes.lastIRecipe(); + recipesCrystalBlocks[i] = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemCrystal, 9, i), new ItemStack(InitBlocks.blockCrystal, 1, i))); - recipesCrystals[i] = Util.GetRecipes.lastIRecipe(); + recipesCrystals[i] = RecipeUtil.lastIRecipe(); } //Dough if(ConfigCrafting.DOUGH.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 2, TheMiscItems.DOUGH.ordinal()), "cropWheat", "cropWheat")); - ItemCrafting.recipeDough = Util.GetRecipes.lastIRecipe(); + ItemCrafting.recipeDough = RecipeUtil.lastIRecipe(); } //Rice Dough if(ConfigCrafting.RICE_DOUGH.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 2, TheMiscItems.RICE_DOUGH.ordinal()), new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()))); - ItemCrafting.recipeRiceDough = Util.GetRecipes.lastIRecipe(); + ItemCrafting.recipeRiceDough = RecipeUtil.lastIRecipe(); } //Paper Cone @@ -67,7 +67,7 @@ public class MiscCrafting{ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.KNIFE_HANDLE.ordinal()), "stickWood", new ItemStack(Items.leather))); - ItemCrafting.recipeKnifeHandle = Util.GetRecipes.lastIRecipe(); + ItemCrafting.recipeKnifeHandle = RecipeUtil.lastIRecipe(); } //Knife Blade @@ -76,7 +76,7 @@ public class MiscCrafting{ "K", "K", "F", 'K', "ingotIron", 'F', new ItemStack(Items.flint))); - ItemCrafting.recipeKnifeBlade = Util.GetRecipes.lastIRecipe(); + ItemCrafting.recipeKnifeBlade = RecipeUtil.lastIRecipe(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java index 03649ffc4..21a76c3c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; @@ -61,56 +61,56 @@ public class ToolCrafting{ new ItemStack(Items.wooden_shovel), new ItemStack(Items.wooden_sword), new ItemStack(Items.wooden_hoe))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.stonePaxel), new ItemStack(Items.stone_axe), new ItemStack(Items.stone_pickaxe), new ItemStack(Items.stone_shovel), new ItemStack(Items.stone_sword), new ItemStack(Items.stone_hoe))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.ironPaxel), new ItemStack(Items.iron_axe), new ItemStack(Items.iron_pickaxe), new ItemStack(Items.iron_shovel), new ItemStack(Items.iron_sword), new ItemStack(Items.iron_hoe))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.goldPaxel), new ItemStack(Items.golden_axe), new ItemStack(Items.golden_pickaxe), new ItemStack(Items.golden_shovel), new ItemStack(Items.golden_sword), new ItemStack(Items.golden_hoe))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.diamondPaxel), new ItemStack(Items.diamond_axe), new ItemStack(Items.diamond_pickaxe), new ItemStack(Items.diamond_shovel), new ItemStack(Items.diamond_sword), new ItemStack(Items.diamond_hoe))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.emeraldPaxel), new ItemStack(InitItems.itemAxeEmerald), new ItemStack(InitItems.itemPickaxeEmerald), new ItemStack(InitItems.itemSwordEmerald), new ItemStack(InitItems.itemShovelEmerald), new ItemStack(InitItems.itemHoeEmerald))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.obsidianPaxel), new ItemStack(InitItems.itemAxeObsidian), new ItemStack(InitItems.itemPickaxeObsidian), new ItemStack(InitItems.itemSwordObsidian), new ItemStack(InitItems.itemShovelObsidian), new ItemStack(InitItems.itemHoeObsidian))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.quartzPaxel), new ItemStack(InitItems.itemAxeQuartz), new ItemStack(InitItems.itemPickaxeQuartz), new ItemStack(InitItems.itemSwordQuartz), new ItemStack(InitItems.itemShovelQuartz), new ItemStack(InitItems.itemHoeQuartz))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalRed), new ItemStack(InitItems.itemAxeCrystalRed), @@ -118,42 +118,42 @@ public class ToolCrafting{ new ItemStack(InitItems.itemSwordCrystalRed), new ItemStack(InitItems.itemShovelCrystalRed), new ItemStack(InitItems.itemHoeCrystalRed))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalGreen), new ItemStack(InitItems.itemAxeCrystalGreen), new ItemStack(InitItems.itemPickaxeCrystalGreen), new ItemStack(InitItems.itemSwordCrystalGreen), new ItemStack(InitItems.itemShovelCrystalGreen), new ItemStack(InitItems.itemHoeCrystalGreen))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalBlue), new ItemStack(InitItems.itemAxeCrystalBlue), new ItemStack(InitItems.itemPickaxeCrystalBlue), new ItemStack(InitItems.itemSwordCrystalBlue), new ItemStack(InitItems.itemShovelCrystalBlue), new ItemStack(InitItems.itemHoeCrystalBlue))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalLightBlue), new ItemStack(InitItems.itemAxeCrystalLightBlue), new ItemStack(InitItems.itemPickaxeCrystalLightBlue), new ItemStack(InitItems.itemSwordCrystalLightBlue), new ItemStack(InitItems.itemShovelCrystalLightBlue), new ItemStack(InitItems.itemHoeCrystalLightBlue))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalBlack), new ItemStack(InitItems.itemAxeCrystalBlack), new ItemStack(InitItems.itemPickaxeCrystalBlack), new ItemStack(InitItems.itemSwordCrystalBlack), new ItemStack(InitItems.itemShovelCrystalBlack), new ItemStack(InitItems.itemHoeCrystalBlack))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalWhite), new ItemStack(InitItems.itemAxeCrystalWhite), new ItemStack(InitItems.itemPickaxeCrystalWhite), new ItemStack(InitItems.itemSwordCrystalWhite), new ItemStack(InitItems.itemShovelCrystalWhite), new ItemStack(InitItems.itemHoeCrystalWhite))); - recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + recipesPaxels.add(RecipeUtil.lastIRecipe()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java index 281ca1ec4..03224bc30 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java @@ -17,7 +17,7 @@ import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.items.base.ItemAllToolAA; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemTool; @@ -64,7 +64,7 @@ public class InitForeignPaxels{ if(ConfigCrafting.PAXELS.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(soPaxels[i], axe, pickaxe, hoe, sword, shovel)); - ToolCrafting.recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + ToolCrafting.recipesPaxels.add(RecipeUtil.lastIRecipe()); } } } @@ -92,7 +92,7 @@ public class InitForeignPaxels{ if(ConfigCrafting.PAXELS.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(mtPaxels[i], axe, pickaxe, hoe, sword, shovel)); - ToolCrafting.recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + ToolCrafting.recipesPaxels.add(RecipeUtil.lastIRecipe()); } } } @@ -120,7 +120,7 @@ public class InitForeignPaxels{ if(ConfigCrafting.PAXELS.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(tfPaxels[i], axe, pickaxe, hoe, sword, shovel)); - ToolCrafting.recipesPaxels.add(Util.GetRecipes.lastIRecipe()); + ToolCrafting.recipesPaxels.add(RecipeUtil.lastIRecipe()); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java index e3f8e4145..2a2c97b33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java @@ -18,7 +18,7 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -40,62 +40,62 @@ public class LensNoneRecipeHandler{ public static void init(){ //Crystal Blocks ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.redstone_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.lapis_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.LAPIS.ordinal()), 400); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.diamond_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 600); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.emerald_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.EMERALD.ordinal()), 1000); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.coal_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), 600); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.iron_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), 800); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); //Crystal Items ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.redstone), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 40); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.dye, 1, 4), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 40); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.diamond), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 60); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.emerald), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), 100); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.coal), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), 60); - mainPageRecipes.add(Util.GetRecipes.lastReconstructorRecipe()); + mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.iron_ingot), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 80); //Lenses ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new ItemStack(InitItems.itemColorLens), 5000); - recipeColorLens = Util.GetRecipes.lastReconstructorRecipe(); + recipeColorLens = RecipeUtil.lastReconstructorRecipe(); if(ConfigCrafting.RECONSTRUCTOR_EXPLOSION_LENS.isEnabled()){ ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemColorLens), new ItemStack(InitItems.itemExplosionLens), 5000); - recipeExplosionLens = Util.GetRecipes.lastReconstructorRecipe(); + recipeExplosionLens = RecipeUtil.lastReconstructorRecipe(); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemExplosionLens), new ItemStack(InitItems.itemDamageLens), 5000); } else{ ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemColorLens), new ItemStack(InitItems.itemDamageLens), 5000); } - recipeDamageLens = Util.GetRecipes.lastReconstructorRecipe(); + recipeDamageLens = RecipeUtil.lastReconstructorRecipe(); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemDamageLens), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), 5000); //Misc if(ConfigCrafting.RECONSTRUCTOR_MISC.isEnabled()){ ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.sand), new ItemStack(Blocks.soul_sand), 20000); - recipeSoulSand = Util.GetRecipes.lastReconstructorRecipe(); + recipeSoulSand = RecipeUtil.lastReconstructorRecipe(); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.rotten_flesh), new ItemStack(Items.leather), 8000); - recipeLeather = Util.GetRecipes.lastReconstructorRecipe(); + recipeLeather = RecipeUtil.lastReconstructorRecipe(); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.red_mushroom), new ItemStack(Items.nether_wart), 150000); - recipeNetherWart = Util.GetRecipes.lastReconstructorRecipe(); + recipeNetherWart = RecipeUtil.lastReconstructorRecipe(); } ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.quartz_block), new ItemStack(InitBlocks.blockTestifiBucksWhiteWall), 10); - recipeWhiteWall = Util.GetRecipes.lastReconstructorRecipe(); + recipeWhiteWall = RecipeUtil.lastReconstructorRecipe(); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.quartz_block, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); - recipeGreenWall = Util.GetRecipes.lastReconstructorRecipe(); + recipeGreenWall = RecipeUtil.lastReconstructorRecipe(); } public static ArrayList getRecipesFor(ItemStack input){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java new file mode 100644 index 000000000..c0349156a --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java @@ -0,0 +1,38 @@ +/* + * This file ("RecipeUtil.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.util; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; +import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; + +import java.util.List; + +public class RecipeUtil{ + + public static LensNoneRecipe lastReconstructorRecipe(){ + List list = ActuallyAdditionsAPI.reconstructorLensNoneRecipes; + return list.get(list.size()-1); + } + + public static CrusherRecipe lastCrusherRecipe(){ + List list = ActuallyAdditionsAPI.crusherRecipes; + return list.get(list.size()-1); + } + + public static IRecipe lastIRecipe(){ + List list = CraftingManager.getInstance().getRecipeList(); + Object recipe = list.get(list.size()-1); + return recipe instanceof IRecipe ? (IRecipe)recipe : null; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index fff61d9e6..14618ebcf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -10,21 +10,15 @@ package de.ellpeck.actuallyadditions.mod.util; -import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; -import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; -import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.oredict.OreDictionary; -import java.util.List; import java.util.Random; @SuppressWarnings("unused") @@ -74,22 +68,4 @@ public class Util{ return -1; } - public static class GetRecipes{ - - public static LensNoneRecipe lastReconstructorRecipe(){ - List list = ActuallyAdditionsAPI.reconstructorLensNoneRecipes; - return list.get(list.size()-1); - } - - public static CrusherRecipe lastCrusherRecipe(){ - List list = ActuallyAdditionsAPI.crusherRecipes; - return list.get(list.size()-1); - } - - public static IRecipe lastIRecipe(){ - List list = CraftingManager.getInstance().getRecipeList(); - Object recipe = list.get(list.size()-1); - return recipe instanceof IRecipe ? (IRecipe)recipe : null; - } - } } \ No newline at end of file From 2b12947e2c2afc2e924437539b1706684ce71092 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 20:36:41 +0100 Subject: [PATCH 035/322] Changed Fake Player's name --- .../mod/util/FakePlayerUtil.java | 2 +- .../textures/gui/guiItemDisplay.png | Bin 0 -> 3171 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiItemDisplay.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java index cf56da7b2..234f21180 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java @@ -20,7 +20,7 @@ import java.util.UUID; public class FakePlayerUtil{ - private static final String FAKE_NAME = "EllpecksActuallyAdditionsFakePlayer"; + private static final String FAKE_NAME = ModUtil.MOD_ID+"FakePlayer"; private static final GameProfile FAKE_PROFILE = new GameProfile(UUID.nameUUIDFromBytes(FAKE_NAME.getBytes()), FAKE_NAME); private static FakePlayer theFakePlayer; diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiItemDisplay.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiItemDisplay.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ed62437cc235403e0f0cc10b4ee50d8793d004 GIT binary patch literal 3171 zcmd^?ZA?>F7{||T3l=Q$GEq9QRFUCU*Ake@CZ&K7Bu3gP6P?h41FMTdL0$@CdnZQ5 zM#Slqm`SUN8}nrpXS5(it}>}wMvaKD@X|{v)+*ALw!F99ExKg;zz07}&GzBu-sj{w zC-;BO|M@*R<($NL5BGQ70RSEe>tZ(o0AZgHAi83&l-!?pIHSEA<6}T=yT2X_2>j>` z(EwbkoI9QFg2irvbzAoWFb{D)(3cO(-LOHwytplSo3eN06{hEA0zvw&tUP*FW*+q; zdIcDXa-VlYS4!*$h{Y&;nvt3qYX_TsNu z_HnIL!{QFb3mtYgLz9e7?pxFT9beI=U0lySXv(+Z#2NFD@qDF~nXT(kjrrEw`yG-C z0>mwap|?_!G@DHJ7_s|WrJNXLT^OfcNmU#+;XYGG-mvmZNXYa^drEWmDU)@u{?=bB zc)=TLJ^f_b<2?%Q{Ypr9aBShV=^`2dEn5m?y5l_;aU2^dph2Vw*FIC_eEV!)e|t@p zfkp*Cqy&U;l{9%#)7b#Lk!WD#O_(roL22~;%S8&q#w0$B4QAyd}7!xw(aAHQv#Y9;e{hqt9@%mtB6 zB|He~el!W2KH)a}{w&Dm2geJ=XH-&o3=l2H8H=&eO2|+A&}t2gn6hQ-#9YL&8drB` zB}aFqrg+q?w#sZ{j$3k1!2sP!Kofz;VH?}iDh|3Z#UId5+>!i7r&WRoFW7_@_?78a zMKHC?3bqyzqQHp(eL}HMCRm>^^y>%_1}j=Rj#>V#<&kQT;+ZvOw3OAb z%ybuOOCPA1)1(rPciJu+Ez=q7E2 zHJj6V-4H8U;K>#XC&LUIL1?cBBD~jFQO4_I&1I|Eqe+eaV`|Qx6hOg{5h6|Zm-HAd z6|dWYuc~Uc`YFT-nDu=v9RU)1TjP9~REQ6uSm@e;m)^+;>;)!|V4ji0WG7f2-1p>tO! zOfLO#pg+-iMCO@R_QK@t3f0pfZl(fnVBE}6IGV)O6H7cvW(;i!YK2Na*f%IOk1G9@ zQ<|x+lK~@0NVXG8ZH?1@u-v@sfzTi7hB0QHEPNl332Ar?YyAEnL53IX;Ur&C74Aqh zScPJ6e4OeY<@#EZhh5Q0@K66QAE$poc!{(!5v|+k7;K2Ep{n_cafis}uZ}!G;PX&vdE!o-U zO2KYq#=jUTaCH#Yd1nwwL|kVK|Avz>Qd^-Rio|ZT%y_bX5kP5}Py*2SIAx5VAYwIy z$hE~2E@@Jp!#pZBm%3cX Date: Fri, 18 Mar 2016 20:39:24 +0100 Subject: [PATCH 036/322] Made the log not die of spamming --- .../java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index a6a73b3f1..305c9cb7c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -36,7 +36,7 @@ public class ItemUtil{ public static void registerBlock(Block block, Class itemBlock, String name, boolean addTab){ block.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+name); - block.setRegistryName(ModUtil.MOD_ID_LOWER, name); + block.setRegistryName(ModUtil.MOD_ID, name); GameRegistry.registerBlock(block, itemBlock); block.setCreativeTab(addTab ? CreativeTab.instance : null); @@ -45,7 +45,7 @@ public class ItemUtil{ public static void registerItem(Item item, String name, boolean addTab){ item.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+name); - item.setRegistryName(ModUtil.MOD_ID_LOWER, name); + item.setRegistryName(ModUtil.MOD_ID, name); GameRegistry.registerItem(item); item.setCreativeTab(addTab ? CreativeTab.instance : null); From 1e2732195def8103fcefba425f2daa1e6bf8b03a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 18 Mar 2016 23:47:22 +0100 Subject: [PATCH 037/322] 1.9. Fuck my face. --- build.gradle | 8 +- .../actuallyadditions/api/lens/Lens.java | 9 +- .../api/recipe/coffee/CoffeeBrewing.java | 15 ++- .../api/tile/IPhantomTile.java | 2 +- .../mod/ActuallyAdditions.java | 5 +- .../mod/blocks/BlockAtomicReconstructor.java | 21 ++-- .../mod/blocks/BlockBreaker.java | 10 +- .../mod/blocks/BlockCanolaPress.java | 8 +- .../mod/blocks/BlockCoalGenerator.java | 10 +- .../mod/blocks/BlockCoffeeMachine.java | 18 +-- .../mod/blocks/BlockColoredLamp.java | 14 +-- .../mod/blocks/BlockCompost.java | 37 +++--- .../mod/blocks/BlockDirectionalBreaker.java | 10 +- .../mod/blocks/BlockDropper.java | 10 +- .../mod/blocks/BlockEnergizer.java | 8 +- .../mod/blocks/BlockFeeder.java | 8 +- .../mod/blocks/BlockFermentingBarrel.java | 8 +- .../mod/blocks/BlockFireworkBox.java | 8 +- .../mod/blocks/BlockFishingNet.java | 11 +- .../mod/blocks/BlockFluidCollector.java | 10 +- .../mod/blocks/BlockFurnaceDouble.java | 16 +-- .../mod/blocks/BlockFurnaceSolar.java | 12 +- .../mod/blocks/BlockGeneric.java | 3 +- .../mod/blocks/BlockGiantChest.java | 8 +- .../mod/blocks/BlockGreenhouseGlass.java | 20 ++-- .../mod/blocks/BlockGrinder.java | 12 +- .../mod/blocks/BlockHeatCollector.java | 3 +- .../mod/blocks/BlockInputter.java | 8 +- .../mod/blocks/BlockItemRepairer.java | 10 +- .../mod/blocks/BlockLampPowerer.java | 7 +- .../mod/blocks/BlockLaserRelay.java | 46 +------- .../blocks/BlockLavaFactoryController.java | 7 +- .../mod/blocks/BlockLeafGenerator.java | 5 +- .../mod/blocks/BlockMiner.java | 14 ++- .../mod/blocks/BlockOilGenerator.java | 10 +- .../mod/blocks/BlockPhantom.java | 21 ++-- .../mod/blocks/BlockPhantomBooster.java | 13 ++- .../mod/blocks/BlockRangedCollector.java | 8 +- .../mod/blocks/BlockSlabs.java | 51 +++++---- .../mod/blocks/BlockSmileyCloud.java | 85 +++++++------- .../mod/blocks/BlockTreasureChest.java | 14 ++- .../mod/blocks/BlockWallAA.java | 108 ++++++++---------- .../mod/blocks/BlockWildPlant.java | 14 ++- .../mod/blocks/BlockXPSolidifier.java | 10 +- .../mod/blocks/IHudDisplay.java | 4 +- .../mod/blocks/base/BlockBase.java | 6 +- .../mod/blocks/base/BlockBushBase.java | 9 +- .../mod/blocks/base/BlockContainerBase.java | 20 ++-- .../mod/blocks/base/BlockFluidFlowing.java | 2 +- .../mod/blocks/base/BlockPlant.java | 22 ++-- .../mod/booklet/BookletUtils.java | 16 +-- .../mod/booklet/GuiBooklet.java | 36 +++--- .../mod/booklet/button/BookmarkButton.java | 10 +- .../mod/booklet/button/IndexButton.java | 4 +- .../mod/booklet/chapter/BookletChapter.java | 10 +- .../mod/booklet/entry/BookletEntry.java | 10 +- .../mod/booklet/page/BookletPageAA.java | 14 +-- .../mod/booklet/page/PageCrafting.java | 4 +- .../mod/booklet/page/PageCrusherRecipe.java | 4 +- .../mod/booklet/page/PageFurnace.java | 4 +- .../mod/booklet/page/PageReconstructor.java | 4 +- .../mod/creative/CreativeTab.java | 2 +- .../mod/event/BucketFillEvent.java | 6 +- .../actuallyadditions/mod/event/HudEvent.java | 14 +-- .../mod/event/TooltipEvent.java | 14 +-- .../mod/event/WorldDecorationEvent.java | 6 +- .../mod/gen/JamVillagerTradeHandler.java | 2 +- .../actuallyadditions/mod/gen/OreGen.java | 15 +-- .../mod/inventory/ContainerDrill.java | 9 +- .../mod/inventory/ContainerEnergizer.java | 2 +- .../mod/inventory/ContainerEnervator.java | 5 +- .../mod/inventory/ContainerInputter.java | 5 +- .../inventory/ContainerRangedCollector.java | 5 +- .../mod/inventory/GuiHandler.java | 2 +- .../mod/inventory/gui/GuiInputter.java | 6 +- .../mod/inventory/gui/GuiSmileyCloud.java | 4 +- .../mod/items/InitItems.java | 74 ++++++------ .../mod/items/ItemBooklet.java | 37 +++--- .../mod/items/ItemChestToCrateUpgrade.java | 10 +- .../mod/items/ItemCoffee.java | 24 ++-- .../mod/items/ItemCrafterOnAStick.java | 7 +- .../mod/items/ItemDrill.java | 57 +++++---- .../mod/items/ItemDrillUpgrade.java | 8 +- .../actuallyadditions/mod/items/ItemDust.java | 5 +- .../mod/items/ItemFertilizer.java | 10 +- .../mod/items/ItemFoods.java | 8 +- .../mod/items/ItemGrowthRing.java | 9 +- .../mod/items/ItemHairyBall.java | 13 ++- .../actuallyadditions/mod/items/ItemJams.java | 17 +-- .../mod/items/ItemKnife.java | 7 +- .../mod/items/ItemLaserWrench.java | 21 ++-- .../mod/items/ItemLeafBlower.java | 21 ++-- .../mod/items/ItemMagnetRing.java | 8 +- .../mod/items/ItemPhantomConnector.java | 26 +++-- .../mod/items/ItemPotionRing.java | 15 ++- .../mod/items/ItemResonantRice.java | 8 +- .../mod/items/ItemSolidifiedExperience.java | 7 +- .../mod/items/ItemTeleStaff.java | 25 ++-- .../mod/items/ItemWaterRemovalRing.java | 6 +- .../mod/items/base/ItemAllToolAA.java | 24 ++-- .../mod/items/base/ItemArmorAA.java | 10 +- .../mod/items/base/ItemSeed.java | 2 +- .../mod/items/lens/LensColor.java | 9 +- .../mod/items/lens/LensDeath.java | 11 +- .../mod/items/lens/LensDetonation.java | 7 +- .../mod/items/lens/LensNone.java | 11 +- .../mod/items/metalists/ThePotionRings.java | 25 ++-- .../mod/jei/booklet/BookletRecipeWrapper.java | 12 +- .../mod/material/InitArmorMaterials.java | 20 ++-- .../mod/misc/DamageSources.java | 8 +- .../mod/misc/DispenserHandlerEmptyBucket.java | 5 +- .../mod/misc/DispenserHandlerFertilize.java | 2 +- .../mod/misc/DispenserHandlerFillBucket.java | 2 +- .../mod/misc/DungeonLoot.java | 15 +-- .../mod/misc/LaserRelayConnectionHandler.java | 2 +- .../actuallyadditions/mod/misc/WorldData.java | 3 +- .../mod/misc/special/RenderSpecial.java | 6 +- .../mod/network/PacketParticle.java | 4 +- .../mod/network/PacketUpdateTileEntity.java | 2 +- .../mod/network/gui/PacketGuiButton.java | 4 +- .../mod/network/gui/PacketGuiNumber.java | 4 +- .../mod/network/gui/PacketGuiString.java | 4 +- .../mod/proxy/ClientProxy.java | 4 +- .../tile/TileEntityAtomicReconstructor.java | 9 +- .../mod/tile/TileEntityBase.java | 10 +- .../mod/tile/TileEntityBreaker.java | 11 +- .../mod/tile/TileEntityCoffeeMachine.java | 3 +- .../tile/TileEntityDirectionalBreaker.java | 6 +- .../mod/tile/TileEntityFeeder.java | 4 +- .../mod/tile/TileEntityFireworkBox.java | 2 +- .../mod/tile/TileEntityFishingNet.java | 31 +++-- .../mod/tile/TileEntityFluidCollector.java | 2 +- .../mod/tile/TileEntityFurnaceSolar.java | 4 +- .../mod/tile/TileEntityGreenhouseGlass.java | 2 +- .../mod/tile/TileEntityGrinder.java | 3 +- .../mod/tile/TileEntityHeatCollector.java | 4 +- .../mod/tile/TileEntityInventoryBase.java | 8 +- .../mod/tile/TileEntityLaserRelay.java | 2 +- .../tile/TileEntityLavaFactoryController.java | 2 +- .../mod/tile/TileEntityLeafGenerator.java | 9 +- .../mod/tile/TileEntityMiner.java | 8 +- .../mod/tile/TileEntityPhantomPlacer.java | 12 +- .../mod/tile/TileEntityPhantomface.java | 7 +- .../mod/tile/TileEntityRangedCollector.java | 4 +- .../UpdateCheckerClientNotificationEvent.java | 10 +- .../actuallyadditions/mod/util/AssetUtil.java | 26 ++--- .../mod/util/FluidStateMapper.java | 2 +- .../actuallyadditions/mod/util/ItemUtil.java | 4 +- .../actuallyadditions/mod/util/PosUtil.java | 10 +- .../mod/util/StringUtil.java | 6 +- .../actuallyadditions/mod/util/Util.java | 16 +-- .../actuallyadditions/mod/util/WorldUtil.java | 44 ++++--- 152 files changed, 1008 insertions(+), 883 deletions(-) diff --git a/build.gradle b/build.gradle index d3a1eedf1..71a7368cf 100644 --- a/build.gradle +++ b/build.gradle @@ -17,12 +17,12 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.8.9-11.15.1.1764" + version = "1.9-12.16.0.1767-1.9" runDir = "idea" - mappings = "stable_22" + mappings = "snapshot_20160312" makeObfSourceJar = false - useDepAts = true + //useDepAts = true replaceIn "ModUtil.java" replace "@VERSION@", project.version.toString() @@ -42,7 +42,7 @@ dependencies { //compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" - deobfCompile "mezz.jei:jei_1.8.9:2.28.6.173" + //deobfCompile "mezz.jei:jei_1.8.9:2.28.6.173" } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java index de2bd038c..0e54094d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java @@ -11,8 +11,9 @@ package de.ellpeck.actuallyadditions.api.lens; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.Item; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; /** * This is the base class for a Reconstructor Lens Type (NOT THE ITEM!) @@ -32,7 +33,7 @@ public abstract class Lens{ * @param tile The tile the lens was invoked from * @return If the Reconstructor should stop continuing (return false if you want it to go through blocks) */ - public abstract boolean invoke(BlockPos hitBlock, IAtomicReconstructor tile); + public abstract boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile); /** * Returns the color in an array of 3 float values that are r, g, b @@ -40,12 +41,12 @@ public abstract class Lens{ public abstract float[] getColor(); /** - * Gets the maximum distance the beam goes with this lense + * Gets the maximum distance the beam goes with this lens */ public abstract int getDistance(); /** - * Sets the item corresponding to the lense + * Sets the item corresponding to the lens */ public void setLensItem(Item item){ this.lensItem = item; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/coffee/CoffeeBrewing.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/coffee/CoffeeBrewing.java index b7ec3e8b6..a8e07bfdc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/coffee/CoffeeBrewing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/coffee/CoffeeBrewing.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.api.recipe.coffee; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import java.util.ArrayList; @@ -49,7 +50,7 @@ public class CoffeeBrewing{ PotionEffect[] effectsStack = getEffectsFromStack(stack); if(effectsStack != null && effectsStack.length > 0){ for(PotionEffect effectStack : effectsStack){ - if(effect.getPotionID() == effectStack.getPotionID()){ + if(effect.getPotion() == effectStack.getPotion()){ return effectStack; } } @@ -61,8 +62,8 @@ public class CoffeeBrewing{ PotionEffect[] effects = getEffectsFromStack(stack); stack.setTagCompound(new NBTTagCompound()); for(int i = 0; i < effects.length; i++){ - if(effects[i].getPotionID() == effect.getPotionID()){ - effects[i] = new PotionEffect(effects[i].getPotionID(), effects[i].getDuration()+(addDur ? effect.getDuration() : 0), effects[i].getAmplifier()+(addAmp ? (effect.getAmplifier() > 0 ? effect.getAmplifier() : 1) : 0)); + if(effects[i].getPotion() == effect.getPotion()){ + effects[i] = new PotionEffect(effects[i].getPotion(), effects[i].getDuration()+(addDur ? effect.getDuration() : 0), effects[i].getAmplifier()+(addAmp ? (effect.getAmplifier() > 0 ? effect.getAmplifier() : 1) : 0)); } addEffectToStack(stack, effects[i]); } @@ -76,7 +77,7 @@ public class CoffeeBrewing{ int prevCounter = tag.getInteger("Counter"); NBTTagCompound compound = new NBTTagCompound(); - compound.setInteger("ID", effect.getPotionID()); + compound.setInteger("ID", Potion.getIdFromPotion(effect.getPotion())); compound.setInteger("Duration", effect.getDuration()); compound.setInteger("Amplifier", effect.getAmplifier()); @@ -94,10 +95,8 @@ public class CoffeeBrewing{ int counter = tag.getInteger("Counter"); while(counter > 0){ NBTTagCompound compound = (NBTTagCompound)tag.getTag(counter+""); - PotionEffect effect = new PotionEffect(compound.getInteger("ID"), compound.getInteger("Duration"), compound.getByte("Amplifier")); - if(effect.getPotionID() > 0){ - effects.add(effect); - } + PotionEffect effect = new PotionEffect(Potion.getPotionById(compound.getInteger("ID")), compound.getInteger("Duration"), compound.getByte("Amplifier")); + effects.add(effect); counter--; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java b/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java index e034a2228..3cae62727 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.api.tile; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; /** * Extending this will cause a TileEntity to be able to be connected via a Phantom Connector diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 049dc4f1a..619ee1700 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -121,11 +121,8 @@ public class ActuallyAdditions{ Util.registerDispenserHandler(InitItems.itemBucketCanolaOil, new DispenserHandlerEmptyBucket()); Util.registerDispenserHandler(Items.bucket, new DispenserHandlerFillBucket()); Util.registerDispenserHandler(InitItems.itemFertilizer, new DispenserHandlerFertilize()); - } - @EventHandler - public void serverStarted(FMLServerStartedEvent event){ - WorldData.init(); + WorldData.init(event.getServer()); } @EventHandler diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index e96154ccf..1d3ba4006 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.util.*; import net.minecraft.block.Block; import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -28,10 +29,11 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -49,23 +51,22 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud this.setHarvestLevel("pickaxe", 0); this.setHardness(10F); this.setResistance(80F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing par6, float par7, float par8, float par9){ if(this.tryToggleRedstone(world, pos, player)){ return true; } if(!world.isRemote){ TileEntityAtomicReconstructor reconstructor = (TileEntityAtomicReconstructor)world.getTileEntity(pos); if(reconstructor != null){ - ItemStack heldItem = player.getCurrentEquippedItem(); if(heldItem != null){ if(heldItem.getItem() instanceof ILensItem && reconstructor.getStackInSlot(0) == null){ ItemStack toPut = heldItem.copy(); @@ -98,7 +99,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud @Override @SideOnly(Side.CLIENT) - public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, MovingObjectPosition posHit, Profiler profiler, ScaledResolution resolution){ + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); if(tile instanceof TileEntityAtomicReconstructor){ ItemStack slot = ((TileEntityAtomicReconstructor)tile).getStackInSlot(0); @@ -111,7 +112,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud AssetUtil.renderStackToGui(slot, resolution.getScaledWidth()/2+15, resolution.getScaledHeight()/2-29, 1F); } - minecraft.fontRendererObj.drawStringWithShadow(EnumChatFormatting.YELLOW+""+EnumChatFormatting.ITALIC+strg, resolution.getScaledWidth()/2+35, resolution.getScaledHeight()/2-25, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg, resolution.getScaledWidth()/2+35, resolution.getScaledHeight()/2-25, StringUtil.DECIMAL_COLOR_WHITE); } } @@ -127,7 +128,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ - int rotation = BlockPistonBase.getFacingFromEntity(world, pos, player).ordinal(); + int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); PosUtil.setMetadata(pos, world, rotation, 2); super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index a09f346c6..256528f26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBreaker; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -25,8 +26,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockBreaker extends BlockContainerBase{ @@ -40,7 +42,7 @@ public class BlockBreaker extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -49,7 +51,7 @@ public class BlockBreaker extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(this.tryToggleRedstone(world, pos, player)){ return true; } @@ -70,7 +72,7 @@ public class BlockBreaker extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ - int rotation = BlockPistonBase.getFacingFromEntity(world, pos, player).ordinal(); + int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); PosUtil.setMetadata(pos, world, rotation, 2); super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 1487ff364..dd76ce5b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -14,14 +14,16 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCanolaPress; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockCanolaPress extends BlockContainerBase{ @@ -31,7 +33,7 @@ public class BlockCanolaPress extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -40,7 +42,7 @@ public class BlockCanolaPress extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing side, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityCanolaPress press = (TileEntityCanolaPress)world.getTileEntity(pos); if(press != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 01bf95c68..16f90805f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -24,9 +25,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -42,7 +44,7 @@ public class BlockCoalGenerator extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); this.setTickRandomly(true); } @@ -53,7 +55,7 @@ public class BlockCoalGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ int meta = PosUtil.getMetadata(state); if(meta == 1){ @@ -64,7 +66,7 @@ public class BlockCoalGenerator extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityCoalGenerator press = (TileEntityCoalGenerator)world.getTileEntity(pos); if(press != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 7c49c7e23..d8cc50724 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoffeeMachine; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -23,11 +24,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; +//TODO Fix bounding box public class BlockCoffeeMachine extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); @@ -37,24 +40,21 @@ public class BlockCoffeeMachine extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); - - float f = 1/16F; - this.setBlockBounds(f, 0F, f, 1F-f, 1F-2*f, 1F-f); + this.setStepSound(SoundType.STONE); } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing f6, float f7, float f8, float f9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing f6, float f7, float f8, float f9){ if(!world.isRemote){ TileEntityCoffeeMachine machine = (TileEntityCoffeeMachine)world.getTileEntity(pos); if(machine != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 31e397b35..9bb11da4a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -27,9 +27,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -64,7 +65,7 @@ public class BlockColoredLamp extends BlockBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing side, float hitX, float hitY, float hitZ){ //Turning On if(player.isSneaking()){ if(!world.isRemote){ @@ -73,7 +74,6 @@ public class BlockColoredLamp extends BlockBase{ return true; } - ItemStack stack = player.getCurrentEquippedItem(); if(stack != null){ //Changing Colors int[] oreIDs = OreDictionary.getOreIDs(stack); @@ -104,12 +104,6 @@ public class BlockColoredLamp extends BlockBase{ return new ItemStack(InitBlocks.blockColoredLamp, 1, this.getMetaFromState(state)); } - @Override - @SideOnly(Side.CLIENT) - public Item getItem(World world, BlockPos pos){ - return Item.getItemFromBlock(InitBlocks.blockColoredLamp); - } - @SuppressWarnings("all") @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ @@ -119,7 +113,7 @@ public class BlockColoredLamp extends BlockBase{ } @Override - public int getLightValue(IBlockAccess world, BlockPos pos){ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ return this.isOn ? 15 : 0; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index cb2ce873e..74993b07d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; @@ -28,12 +29,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.List; - public class BlockCompost extends BlockContainerBase implements IHudDisplay{ public BlockCompost(String name){ @@ -41,11 +43,17 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(5.0F); - this.setStepSound(soundTypeWood); + this.setStepSound(SoundType.WOOD); - this.setBlockBoundsForItemRender(); + //this.setBlockBoundsForItemRender(); } + //TODO Fix bounding box + /*@Override + public void setBlockBoundsForItemRender(){ + float f = 1.0F/16.0F; + this.setBlockBounds(f, 0.0F, f, 1.0F-f, 11*f, 1.0F-f); + } @Override public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity){ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.3125F, 1.0F); @@ -60,22 +68,21 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ this.setBlockBounds(0.0F, 0.0F, 1.0F-f, 1.0F, y, 1.0F); super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); this.setBlockBoundsForItemRender(); - } + }*/ @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing f6, float f7, float f8, float f9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stackPlayer, EnumFacing f6, float f7, float f8, float f9){ if(!world.isRemote){ - ItemStack stackPlayer = player.getCurrentEquippedItem(); TileEntityCompost tile = (TileEntityCompost)world.getTileEntity(pos); //Add items to be composted if(stackPlayer != null && stackPlayer.getItem() instanceof ItemMisc && stackPlayer.getItemDamage() == TheMiscItems.MASHED_FOOD.ordinal() && (tile.slots[0] == null || (!(tile.slots[0].getItem() instanceof ItemFertilizer) && tile.slots[0].stackSize < TileEntityCompost.AMOUNT))){ @@ -97,7 +104,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ player.inventory.setInventorySlotContents(player.inventory.currentItem, tile.slots[0].copy()); } else{ - player.getCurrentEquippedItem().stackSize += tile.slots[0].stackSize; + player.getActiveItemStack().stackSize += tile.slots[0].stackSize; } tile.slots[0] = null; tile.markDirty(); @@ -106,12 +113,6 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ return true; } - @Override - public void setBlockBoundsForItemRender(){ - float f = 1.0F/16.0F; - this.setBlockBounds(f, 0.0F, f, 1.0F-f, 11*f, 1.0F-f); - } - @Override public TileEntity createNewTileEntity(World world, int meta){ return new TileEntityCompost(); @@ -130,7 +131,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ @Override @SideOnly(Side.CLIENT) - public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, MovingObjectPosition posHit, Profiler profiler, ScaledResolution resolution){ + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); if(tile instanceof TileEntityCompost){ ItemStack slot = ((TileEntityCompost)tile).getStackInSlot(0); @@ -143,7 +144,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ AssetUtil.renderStackToGui(slot, resolution.getScaledWidth()/2+15, resolution.getScaledHeight()/2-29, 1F); } - minecraft.fontRendererObj.drawStringWithShadow(EnumChatFormatting.YELLOW+""+EnumChatFormatting.ITALIC+strg, resolution.getScaledWidth()/2+35, resolution.getScaledHeight()/2-25, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg, resolution.getScaledWidth()/2+35, resolution.getScaledHeight()/2-25, StringUtil.DECIMAL_COLOR_WHITE); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index bbc3db8cf..8105849d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDirectionalBreaker; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -25,8 +26,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockDirectionalBreaker extends BlockContainerBase{ @@ -38,7 +40,7 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -47,7 +49,7 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(this.tryToggleRedstone(world, pos, player)){ return true; } @@ -68,7 +70,7 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ - int rotation = BlockPistonBase.getFacingFromEntity(world, pos, player).ordinal(); + int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); PosUtil.setMetadata(pos, world, rotation, 2); super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index 44d0e2c50..8c38f3a98 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDropper; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -24,8 +25,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockDropper extends BlockContainerBase{ @@ -37,7 +39,7 @@ public class BlockDropper extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -46,7 +48,7 @@ public class BlockDropper extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(this.tryToggleRedstone(world, pos, player)){ return true; } @@ -67,7 +69,7 @@ public class BlockDropper extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ - int rotation = BlockPistonBase.getFacingFromEntity(world, pos, player).ordinal(); + int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); PosUtil.setMetadata(pos, world, rotation, 2); super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java index f778ebd5a..83797a8a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java @@ -15,14 +15,16 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnergizer; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnervator; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockEnergizer extends BlockContainerBase{ @@ -35,7 +37,7 @@ public class BlockEnergizer extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(2.0F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -44,7 +46,7 @@ public class BlockEnergizer extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ if(this.isEnergizer){ TileEntityEnergizer energizer = (TileEntityEnergizer)world.getTileEntity(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index a65c7b701..d139dc427 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -14,14 +14,16 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFeeder; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockFeeder extends BlockContainerBase{ @@ -31,7 +33,7 @@ public class BlockFeeder extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(0.5F); this.setResistance(6.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -40,7 +42,7 @@ public class BlockFeeder extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityFeeder feeder = (TileEntityFeeder)world.getTileEntity(pos); if(feeder != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index b7c5922e1..2777b4264 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -14,14 +14,16 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFermentingBarrel; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockFermentingBarrel extends BlockContainerBase{ @@ -31,7 +33,7 @@ public class BlockFermentingBarrel extends BlockContainerBase{ this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(5.0F); - this.setStepSound(soundTypeWood); + this.setStepSound(SoundType.WOOD); } @Override @@ -46,7 +48,7 @@ public class BlockFermentingBarrel extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityFermentingBarrel press = (TileEntityFermentingBarrel)world.getTileEntity(pos); if(press != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java index 0b53d74b7..b21028f58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java @@ -13,14 +13,16 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFireworkBox; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockFireworkBox extends BlockContainerBase{ @@ -30,7 +32,7 @@ public class BlockFireworkBox extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -39,7 +41,7 @@ public class BlockFireworkBox extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ return this.tryToggleRedstone(world, pos, player); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index e1edeea3b..927960329 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -12,7 +12,9 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFishingNet; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -25,8 +27,9 @@ public class BlockFishingNet extends BlockContainerBase{ this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(3.0F); - this.setStepSound(soundTypeWood); - this.setBlockBounds(0F, 0F, 0F, 1F, 1F/16F, 1F); + this.setStepSound(SoundType.WOOD); + //TODO Fix block bounds + //this.setBlockBounds(0F, 0F, 0F, 1F, 1F/16F, 1F); } @Override @@ -35,12 +38,12 @@ public class BlockFishingNet extends BlockContainerBase{ } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 431e0c54d..dbf04cddf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidCollector; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -25,8 +26,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockFluidCollector extends BlockContainerBase{ @@ -41,7 +43,7 @@ public class BlockFluidCollector extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -50,7 +52,7 @@ public class BlockFluidCollector extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(this.tryToggleRedstone(world, pos, player)){ return true; } @@ -71,7 +73,7 @@ public class BlockFluidCollector extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ - int rotation = BlockPistonBase.getFacingFromEntity(world, pos, player).ordinal(); + int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); PosUtil.setMetadata(pos, world, rotation, 2); super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index 0b2bde8a0..d25f4726f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFurnaceDouble; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -24,10 +25,11 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.MathHelper; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -44,7 +46,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); this.setTickRandomly(true); } @@ -55,7 +57,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ int meta = PosUtil.getMetadata(state); if(meta > 3){ @@ -89,7 +91,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityFurnaceDouble furnace = (TileEntityFurnaceDouble)world.getTileEntity(pos); if(furnace != null){ @@ -101,8 +103,8 @@ public class BlockFurnaceDouble extends BlockContainerBase{ } @Override - public int getLightValue(IBlockAccess world, BlockPos pos){ - return PosUtil.getMetadata(pos, world) > 3 ? 12 : 0; + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ + return PosUtil.getMetadata(state) > 3 ? 12 : 0; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index 391bf1903..81f9aa944 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -12,7 +12,9 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFurnaceSolar; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -25,8 +27,10 @@ public class BlockFurnaceSolar extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); - this.setBlockBounds(0F, 0F, 0F, 1F, 6F/16F, 1F); + this.setStepSound(SoundType.STONE); + + //TODO Block bounds + //this.setBlockBounds(0F, 0F, 0F, 1F, 6F/16F, 1F); } @Override @@ -35,12 +39,12 @@ public class BlockFurnaceSolar extends BlockContainerBase{ } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java index a1a584a64..da301b1ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -22,7 +23,7 @@ public class BlockGeneric extends BlockBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 0794f9d29..6d8ace673 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; @@ -25,8 +26,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -39,7 +41,7 @@ public class BlockGiantChest extends BlockContainerBase{ this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(15.0F); - this.setStepSound(soundTypeWood); + this.setStepSound(SoundType.WOOD); } @Override @@ -48,7 +50,7 @@ public class BlockGiantChest extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityGiantChest chest = (TileEntityGiantChest)world.getTileEntity(pos); if(chest != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index b23451304..6017160f5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -13,14 +13,15 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGreenhouseGlass; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; +import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumWorldBlockLayer; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -33,32 +34,31 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(0.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @Override @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldIn, BlockPos pos, EnumFacing side){ - IBlockState state = worldIn.getBlockState(pos); + public boolean shouldSideBeRendered(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side){ Block block = state.getBlock(); - return worldIn.getBlockState(pos.offset(side.getOpposite())) != state || block != this && block != this && super.shouldSideBeRendered(worldIn, pos, side); + return worldIn.getBlockState(pos.offset(side.getOpposite())) != state || block != this && block != this && super.shouldSideBeRendered(state, worldIn, pos, side); } @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } @Override @SideOnly(Side.CLIENT) - public EnumWorldBlockLayer getBlockLayer(){ - return EnumWorldBlockLayer.CUTOUT; + public BlockRenderLayer getBlockLayer(){ + return BlockRenderLayer.CUTOUT; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index 0832e3703..d7938d1fc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -23,9 +24,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -44,7 +46,7 @@ public class BlockGrinder extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); this.setTickRandomly(true); } @@ -55,7 +57,7 @@ public class BlockGrinder extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ int meta = PosUtil.getMetadata(state); if(meta == 1){ @@ -69,7 +71,7 @@ public class BlockGrinder extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityGrinder grinder = (TileEntityGrinder)world.getTileEntity(pos); if(grinder != null){ @@ -81,7 +83,7 @@ public class BlockGrinder extends BlockContainerBase{ } @Override - public int getLightValue(IBlockAccess world, BlockPos pos){ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java index cc02ddf0f..bff65e535 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityHeatCollector; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -25,7 +26,7 @@ public class BlockHeatCollector extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(2.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index e33c2a118..b9d541cae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -21,14 +21,16 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockInputter extends BlockContainerBase{ @@ -42,7 +44,7 @@ public class BlockInputter extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); this.setTickRandomly(true); this.isAdvanced = isAdvanced; } @@ -53,7 +55,7 @@ public class BlockInputter extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityInputter inputter = (TileEntityInputter)world.getTileEntity(pos); if(inputter != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index 18f1baee6..a491fad67 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -16,14 +16,16 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemRepairer; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -34,7 +36,7 @@ public class BlockItemRepairer extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(20.0F); this.setResistance(15.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); this.setTickRandomly(true); } @@ -44,7 +46,7 @@ public class BlockItemRepairer extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityItemRepairer repairer = (TileEntityItemRepairer)world.getTileEntity(pos); if(repairer != null){ @@ -56,7 +58,7 @@ public class BlockItemRepairer extends BlockContainerBase{ } @Override - public int getLightValue(IBlockAccess world, BlockPos pos){ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index 73b9d2f89..dfac56797 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -16,13 +16,14 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockLampPowerer extends BlockBase{ @@ -34,7 +35,7 @@ public class BlockLampPowerer extends BlockBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -49,7 +50,7 @@ public class BlockLampPowerer extends BlockBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ - int rotation = BlockPistonBase.getFacingFromEntity(world, pos, player).ordinal(); + int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); PosUtil.setMetadata(pos, world, rotation, 2); super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 2b02cccb3..7e64c02f7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -13,22 +13,19 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; -import net.minecraft.world.IBlockAccess; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import java.util.List; - +//TODO Fix bounding box public class BlockLaserRelay extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); @@ -38,22 +35,16 @@ public class BlockLaserRelay extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @Override - public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB axis, List list, Entity entity){ - this.setBlockBoundsBasedOnState(world, pos); - super.addCollisionBoxesToList(world, pos, state, axis, list, entity); - } - - @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } @@ -62,31 +53,6 @@ public class BlockLaserRelay extends BlockContainerBase{ return this.getStateFromMeta(side.ordinal()); } - @Override - public void setBlockBoundsBasedOnState(IBlockAccess world, BlockPos pos){ - int meta = PosUtil.getMetadata(pos, world); - - float pixel = 1F/16F; - if(meta == 0){ - this.setBlockBounds(3*pixel, 3*pixel, 3*pixel, 1F-3*pixel, 1F, 1F-3*pixel); - } - else if(meta == 1){ - this.setBlockBounds(3*pixel, 0F, 3*pixel, 1F-3*pixel, 1F-3*pixel, 1F-3*pixel); - } - else if(meta == 2){ - this.setBlockBounds(3*pixel, 3*pixel, 3*pixel, 1F-3*pixel, 1F-3*pixel, 1F); - } - else if(meta == 3){ - this.setBlockBounds(3*pixel, 3*pixel, 0F, 1F-3*pixel, 1F-3*pixel, 1F-3*pixel); - } - else if(meta == 4){ - this.setBlockBounds(3*pixel, 3*pixel, 3*pixel, 1F, 1F-3*pixel, 1F-3*pixel); - } - else if(meta == 5){ - this.setBlockBounds(0F, 3*pixel, 3*pixel, 1F-3*pixel, 1F-3*pixel, 1F-3*pixel); - } - } - @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java index 6788bc528..d6e13c6aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLavaFactoryController; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; @@ -22,7 +23,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -34,7 +35,7 @@ public class BlockLavaFactoryController extends BlockContainerBase implements IH this.setHarvestLevel("pickaxe", 0); this.setHardness(4.5F); this.setResistance(20.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -49,7 +50,7 @@ public class BlockLavaFactoryController extends BlockContainerBase implements IH @Override @SideOnly(Side.CLIENT) - public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, MovingObjectPosition posHit, Profiler profiler, ScaledResolution resolution){ + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ TileEntityLavaFactoryController factory = (TileEntityLavaFactoryController)minecraft.theWorld.getTileEntity(posHit.getBlockPos()); if(factory != null){ int state = factory.isMultiblock(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java index 66214b816..fd6bef369 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java @@ -12,12 +12,13 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLeafGenerator; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockLeafGenerator extends BlockContainerBase{ @@ -27,7 +28,7 @@ public class BlockLeafGenerator extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(5.0F); this.setResistance(10.0F); - this.setStepSound(soundTypeMetal); + this.setStepSound(SoundType.METAL); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index 8b66b8363..b8bfee837 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityMiner; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; @@ -25,9 +26,10 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -39,16 +41,16 @@ public class BlockMiner extends BlockContainerBase implements IHudDisplay{ this.setHarvestLevel("pickaxe", 0); this.setHardness(8F); this.setResistance(30F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityMiner){ @@ -76,7 +78,7 @@ public class BlockMiner extends BlockContainerBase implements IHudDisplay{ @Override @SideOnly(Side.CLIENT) - public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, MovingObjectPosition posHit, Profiler profiler, ScaledResolution resolution){ + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); if(tile instanceof TileEntityMiner){ String info = ((TileEntityMiner)tile).layerAt <= 0 ? "Done Mining!" : "Mining at Y = "+((TileEntityMiner)tile).layerAt+"."; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 7de606aeb..e9dd58f0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityOilGenerator; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -24,9 +25,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -42,7 +44,7 @@ public class BlockOilGenerator extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); this.setTickRandomly(true); } @@ -53,7 +55,7 @@ public class BlockOilGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ if(PosUtil.getMetadata(state) == 1){ for(int i = 0; i < 5; i++){ world.spawnParticle(ClientProxy.bulletForMyValentine ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL, (double)pos.getX()+0.5F, (double)pos.getY()+1.0F, (double)pos.getZ()+0.5F, 0.0D, 0.0D, 0.0D); @@ -62,7 +64,7 @@ public class BlockOilGenerator extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityOilGenerator generator = (TileEntityOilGenerator)world.getTileEntity(pos); if(generator != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index d5234313e..cf9046eda 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; @@ -28,6 +29,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -43,7 +48,7 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ this.setHarvestLevel("pickaxe", 0); this.setHardness(4.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); if(type == Type.FACE || type == Type.LIQUIFACE || type == Type.ENERGYFACE){ this.range = TileEntityPhantomface.RANGE; @@ -78,7 +83,7 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ){ if(this.tryToggleRedstone(world, pos, player)){ return true; } @@ -98,27 +103,27 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ @Override @SideOnly(Side.CLIENT) - public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, MovingObjectPosition posHit, Profiler profiler, ScaledResolution resolution){ + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); if(tile != null){ if(tile instanceof IPhantomTile){ IPhantomTile phantom = (IPhantomTile)tile; - minecraft.fontRendererObj.drawStringWithShadow(EnumChatFormatting.GOLD+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".blockPhantomRange.desc")+": "+phantom.getRange(), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-40, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.GOLD+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".blockPhantomRange.desc")+": "+phantom.getRange(), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-40, StringUtil.DECIMAL_COLOR_WHITE); if(phantom.hasBoundPosition()){ - int distance = (int)new Vec3(posHit.getBlockPos()).distanceTo(new Vec3(phantom.getBoundPosition())); + int distance = (int)new Vec3d(posHit.getBlockPos()).distanceTo(new Vec3d(phantom.getBoundPosition())); Item item = PosUtil.getItemBlock(phantom.getBoundPosition(), minecraft.theWorld); String name = item == null ? "Absolutely Nothing" : item.getItemStackDisplayName(new ItemStack(PosUtil.getBlock(phantom.getBoundPosition(), minecraft.theWorld), 1, PosUtil.getMetadata(phantom.getBoundPosition(), minecraft.theWorld))); StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localizeFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.blockInfo.desc", name, phantom.getBoundPosition().getX(), phantom.getBoundPosition().getY(), phantom.getBoundPosition().getZ(), distance), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-30, 200, StringUtil.DECIMAL_COLOR_WHITE, true); if(phantom.isBoundThingInRange()){ - StringUtil.drawSplitString(minecraft.fontRendererObj, EnumChatFormatting.DARK_GREEN+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); + StringUtil.drawSplitString(minecraft.fontRendererObj, TextFormatting.DARK_GREEN+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); } else{ - StringUtil.drawSplitString(minecraft.fontRendererObj, EnumChatFormatting.DARK_RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); + StringUtil.drawSplitString(minecraft.fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); } } else{ - minecraft.fontRendererObj.drawStringWithShadow(EnumChatFormatting.RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, StringUtil.DECIMAL_COLOR_WHITE); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index eef04cd9d..dba6d34cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -12,7 +12,9 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityPhantomBooster; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -25,19 +27,20 @@ public class BlockPhantomBooster extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); - float f = 1F/16F; - this.setBlockBounds(2*f, 0F, 2*f, 1-2*f, 1F, 1-2*f); + //TODO Fix block bounds + //float f = 1F/16F; + //this.setBlockBounds(2*f, 0F, 2*f, 1-2*f, 1F, 1-2*f); } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java index 6d608829a..b28ef8bb4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java @@ -14,14 +14,16 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityRangedCollector; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockRangedCollector extends BlockContainerBase{ @@ -31,7 +33,7 @@ public class BlockRangedCollector extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -40,7 +42,7 @@ public class BlockRangedCollector extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityRangedCollector breaker = (TileEntityRangedCollector)world.getTileEntity(pos); if(breaker != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index 4bc6355c8..e1d9c5de3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -21,9 +21,11 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -40,35 +42,19 @@ public class BlockSlabs extends BlockBase{ } public BlockSlabs(String name, Block fullBlock, int meta){ - super(fullBlock.getMaterial(), name); + super(fullBlock.getMaterial(fullBlock.getDefaultState()), name); this.setHardness(1.5F); this.setResistance(10.0F); this.fullBlock = fullBlock; this.meta = meta; } - @Override + /*@Override public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB axis, List list, Entity entity){ this.setBlockBoundsBasedOnState(world, pos); super.addCollisionBoxesToList(world, pos, state, axis, list, entity); } - @Override - public boolean isOpaqueCube(){ - return false; - } - - @Override - public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){ - if(facing.ordinal() == 1){ - return this.getStateFromMeta(meta); - } - if(facing.ordinal() == 0 || hitY >= 0.5F){ - return this.getStateFromMeta(meta+1); - } - return this.getStateFromMeta(meta); - } - @Override public void setBlockBoundsBasedOnState(IBlockAccess world, BlockPos pos){ int meta = PosUtil.getMetadata(pos, world); @@ -80,6 +66,22 @@ public class BlockSlabs extends BlockBase{ @Override public void setBlockBoundsForItemRender(){ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + }*/ + + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){ + if(facing.ordinal() == 1){ + return this.getStateFromMeta(meta); + } + if(facing.ordinal() == 0 || hitY >= 0.5F){ + return this.getStateFromMeta(meta+1); + } + return this.getStateFromMeta(meta); } @Override @@ -106,15 +108,16 @@ public class BlockSlabs extends BlockBase{ } @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ){ + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ if(PosUtil.getBlock(pos, world) == this.block && ((side.ordinal() == 1 && PosUtil.getMetadata(pos, world) == 0) || (side.ordinal() == 0 && PosUtil.getMetadata(pos, world) == 1))){ if(PosUtil.setBlock(pos, world, ((BlockSlabs)this.block).fullBlock, ((BlockSlabs)this.block).meta, 3)){ - world.playSoundEffect(pos.getX()+0.5F, pos.getY()+0.5F, pos.getZ()+0.5F, this.block.stepSound.getBreakSound(), (this.block.stepSound.getVolume()+1.0F)/2.0F, this.block.stepSound.frequency*0.8F); + //TODO Fix sounds + //world.playSoundEffect(pos.getX()+0.5F, pos.getY()+0.5F, pos.getZ()+0.5F, this.block.stepSound.getBreakSound(), (this.block.stepSound.getVolume()+1.0F)/2.0F, this.block.stepSound.frequency*0.8F); stack.stackSize--; - return true; + return EnumActionResult.SUCCESS; } } - return super.onItemUse(stack, player, world, pos, side, hitX, hitY, hitZ); + return super.onItemUse(stack, player, world, pos, hand, side, hitX, hitY, hitZ); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 708696175..07af8bbf5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -18,6 +18,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -28,6 +29,9 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.*; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -44,53 +48,17 @@ public class BlockSmileyCloud extends BlockContainerBase{ super(Material.cloth, name); this.setHardness(0.5F); this.setResistance(5.0F); - this.setStepSound(soundTypeCloth); + this.setStepSound(SoundType.CLOTH); this.setTickRandomly(true); } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } - @Override - public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB axis, List list, Entity entity){ - this.setBlockBoundsBasedOnState(world, pos); - super.addCollisionBoxesToList(world, pos, state, axis, list, entity); - } - - @Override - public boolean isOpaqueCube(){ - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ - if(Util.RANDOM.nextInt(30) == 0){ - for(int i = 0; i < 2; i++){ - double d = Util.RANDOM.nextGaussian()*0.02D; - double d1 = Util.RANDOM.nextGaussian()*0.02D; - double d2 = Util.RANDOM.nextGaussian()*0.02D; - world.spawnParticle(EnumParticleTypes.HEART, pos.getX()+Util.RANDOM.nextFloat(), pos.getY()+0.65+Util.RANDOM.nextFloat(), pos.getZ()+Util.RANDOM.nextFloat(), d, d1, d2); - } - } - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing f6, float f7, float f8, float f9){ - if(!world.isRemote){ - TileEntity tile = world.getTileEntity(pos); - if(tile instanceof TileEntitySmileyCloud){ - player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CLOUD.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); - - player.triggerAchievement(TheAchievements.NAME_SMILEY_CLOUD.ach); - } - } - return true; - } - - @Override + //TODO Fix bounding box + /*@Override public void setBlockBoundsBasedOnState(IBlockAccess world, BlockPos pos){ int meta = PosUtil.getMetadata(pos, world); float f = 0.0625F; @@ -109,6 +77,43 @@ public class BlockSmileyCloud extends BlockContainerBase{ } } + @Override + public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB axis, List list, Entity entity){ + this.setBlockBoundsBasedOnState(world, pos); + super.addCollisionBoxesToList(world, pos, state, axis, list, entity); + }*/ + + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ + if(Util.RANDOM.nextInt(30) == 0){ + for(int i = 0; i < 2; i++){ + double d = Util.RANDOM.nextGaussian()*0.02D; + double d1 = Util.RANDOM.nextGaussian()*0.02D; + double d2 = Util.RANDOM.nextGaussian()*0.02D; + world.spawnParticle(EnumParticleTypes.HEART, pos.getX()+Util.RANDOM.nextFloat(), pos.getY()+0.65+Util.RANDOM.nextFloat(), pos.getZ()+Util.RANDOM.nextFloat(), d, d1, d2); + } + } + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing f6, float f7, float f8, float f9){ + if(!world.isRemote){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntitySmileyCloud){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CLOUD.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + + player.addStat(TheAchievements.NAME_SMILEY_CLOUD.ach); + } + } + return true; + } + @Override public TileEntity createNewTileEntity(World world, int meta){ return new TileEntitySmileyCloud(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 18e4745fc..2d6c4fddc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -27,6 +28,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -42,13 +45,13 @@ public class BlockTreasureChest extends BlockBase{ this.setHarvestLevel("axe", 0); this.setHardness(300.0F); this.setResistance(50.0F); - this.setStepSound(soundTypeWood); + this.setStepSound(SoundType.WOOD); this.setTickRandomly(true); } @Override @SideOnly(Side.CLIENT) - public void randomDisplayTick(World world, BlockPos pos, IBlockState state, Random rand){ + public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ for(int i = 0; i < 2; i++){ for(float f = 0; f <= 3; f += 0.5){ float particleX = rand.nextFloat(); @@ -64,13 +67,14 @@ public class BlockTreasureChest extends BlockBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ - world.playSoundAtEntity(player, "random.chestopen", 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); + //TODO Fix sounds + //world.playSoundAtEntity(player, "random.chestopen", 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); this.dropItems(world, pos); world.setBlockToAir(pos); - player.triggerAchievement(TheAchievements.OPEN_TREASURE_CHEST.ach); + //player.triggerAchievement(TheAchievements.OPEN_TREASURE_CHEST.ach); } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 9d554a43d..fce909380 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -16,15 +16,16 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockFenceGate; import net.minecraft.block.BlockWall; import net.minecraft.block.material.Material; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.state.BlockStateBase; +import net.minecraft.block.state.BlockStateContainer; 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.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -40,13 +41,17 @@ public class BlockWallAA extends BlockBase{ this(name, base, 0); } + protected static final AxisAlignedBB[] field_185751_g = new AxisAlignedBB[]{new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + protected static final AxisAlignedBB[] field_185750_B = new AxisAlignedBB[]{field_185751_g[0].setMaxY(1.5D), field_185751_g[1].setMaxY(1.5D), field_185751_g[2].setMaxY(1.5D), field_185751_g[3].setMaxY(1.5D), field_185751_g[4].setMaxY(1.5D), field_185751_g[5].setMaxY(1.5D), field_185751_g[6].setMaxY(1.5D), field_185751_g[7].setMaxY(1.5D), field_185751_g[8].setMaxY(1.5D), field_185751_g[9].setMaxY(1.5D), field_185751_g[10].setMaxY(1.5D), field_185751_g[11].setMaxY(1.5D), field_185751_g[12].setMaxY(1.5D), field_185751_g[13].setMaxY(1.5D), field_185751_g[14].setMaxY(1.5D), field_185751_g[15].setMaxY(1.5D)}; + + public BlockWallAA(String name, Block base, int meta){ - super(base.getMaterial(), name); + super(base.getMaterial(base.getDefaultState()), name); this.meta = meta; this.setHardness(1.5F); this.setResistance(10F); - this.setStepSound(base.stepSound); + this.setStepSound(base.getStepSound()); this.setDefaultState(this.blockState.getBaseState().withProperty(BlockWall.UP, false).withProperty(BlockWall.NORTH, false).withProperty(BlockWall.EAST, false).withProperty(BlockWall.SOUTH, false).withProperty(BlockWall.WEST, false)); } @@ -57,7 +62,7 @@ public class BlockWallAA extends BlockBase{ } @Override - public boolean isFullCube(){ + public boolean isFullCube(IBlockState state){ return false; } @@ -68,19 +73,44 @@ public class BlockWallAA extends BlockBase{ @Override @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldIn, BlockPos pos, EnumFacing side){ - return side != EnumFacing.DOWN || super.shouldSideBeRendered(worldIn, pos, side); + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side){ + return side != EnumFacing.DOWN || super.shouldSideBeRendered(blockState, blockAccess, pos, side); + } + + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + state = this.getActualState(state, source, pos); + return field_185751_g[figureOutSomeWallStuff(state)]; + } + + public AxisAlignedBB getSelectedBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ + blockState = this.getActualState(blockState, worldIn, pos); + return field_185750_B[figureOutSomeWallStuff(blockState)]; + } + + private static int figureOutSomeWallStuff(IBlockState state){ + int i = 0; + + if(state.getValue(BlockWall.NORTH)){ + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if(state.getValue(BlockWall.EAST)){ + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if(state.getValue(BlockWall.SOUTH)){ + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if(state.getValue(BlockWall.WEST)){ + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + return i; } @Override - public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state){ - this.setBlockBoundsBasedOnState(worldIn, pos); - this.maxY = 1.5D; - return super.getCollisionBoundingBox(worldIn, pos, state); - } - - @Override - public boolean isOpaqueCube(){ + public boolean isOpaqueCube(IBlockState state){ return false; } @@ -89,45 +119,6 @@ public class BlockWallAA extends BlockBase{ return meta; } - @Override - public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos){ - boolean flag = this.canConnectTo(worldIn, pos.north()); - boolean flag1 = this.canConnectTo(worldIn, pos.south()); - boolean flag2 = this.canConnectTo(worldIn, pos.west()); - boolean flag3 = this.canConnectTo(worldIn, pos.east()); - float f = 0.25F; - float f1 = 0.75F; - float f2 = 0.25F; - float f3 = 0.75F; - float f4 = 1.0F; - - if(flag){ - f2 = 0.0F; - } - if(flag1){ - f3 = 1.0F; - } - if(flag2){ - f = 0.0F; - } - if(flag3){ - f1 = 1.0F; - } - - if(flag && flag1 && !flag2 && !flag3){ - f4 = 0.8125F; - f = 0.3125F; - f1 = 0.6875F; - } - else if(!flag && !flag1 && flag2 && flag3){ - f4 = 0.8125F; - f2 = 0.3125F; - f3 = 0.6875F; - } - - this.setBlockBounds(f, 0.0F, f2, f1, f4, f3); - } - @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) @@ -137,7 +128,8 @@ public class BlockWallAA extends BlockBase{ public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos){ Block block = PosUtil.getBlock(pos, worldIn); - return block != Blocks.barrier && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial().isOpaque() && block.isFullCube()) && block.getMaterial() != Material.gourd)); + IBlockState state = worldIn.getBlockState(pos); + return block != Blocks.barrier && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial(state).isOpaque() && block.isFullCube(state)) && block.getMaterial(state) != Material.gourd)); } @Override @@ -151,7 +143,7 @@ public class BlockWallAA extends BlockBase{ } @Override - protected BlockState createBlockState(){ - return new BlockState(this, BlockWall.UP, BlockWall.NORTH, BlockWall.EAST, BlockWall.WEST, BlockWall.SOUTH); + protected BlockStateContainer createBlockState(){ + return new BlockStateContainer(this, BlockWall.UP, BlockWall.NORTH, BlockWall.EAST, BlockWall.WEST, BlockWall.SOUTH); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 5c345f0d7..2bcb28691 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -20,6 +20,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -28,9 +29,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -45,20 +47,20 @@ public class BlockWildPlant extends BlockBushBase{ public BlockWildPlant(String name){ super(name); - this.setStepSound(soundTypeGrass); + this.setStepSound(SoundType.PLANT); } @Override public boolean canBlockStay(World world, BlockPos pos, IBlockState state){ BlockPos offset = PosUtil.offset(pos, 0, -1, 0); - return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.water : PosUtil.getBlock(offset, world).canSustainPlant(world, offset, EnumFacing.UP, this); + return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.water : PosUtil.getBlock(offset, world).canSustainPlant(world.getBlockState(offset), world, offset, EnumFacing.UP, this); } @Override @SideOnly(Side.CLIENT) - public Item getItem(World world, BlockPos pos){ - int metadata = PosUtil.getMetadata(pos, world); - return metadata >= allWildPlants.length ? null : ((BlockPlant)allWildPlants[metadata].wildVersionOf).seedItem; + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player){ + int metadata = PosUtil.getMetadata(pos, world); + return metadata >= allWildPlants.length ? null : new ItemStack(((BlockPlant)allWildPlants[metadata].wildVersionOf).seedItem); } @SuppressWarnings("all") diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index ab5dc92d0..e4e0858c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -18,6 +18,7 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityXPSolidifier; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; @@ -27,9 +28,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; public class BlockXPSolidifier extends BlockContainerBase{ @@ -41,7 +43,7 @@ public class BlockXPSolidifier extends BlockContainerBase{ this.setHarvestLevel("pickaxe", 0); this.setHardness(2.5F); this.setResistance(10.0F); - this.setStepSound(soundTypeStone); + this.setStepSound(SoundType.STONE); } @Override @@ -50,7 +52,7 @@ public class BlockXPSolidifier extends BlockContainerBase{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing par6, float par7, float par8, float par9){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ TileEntityXPSolidifier solidifier = (TileEntityXPSolidifier)world.getTileEntity(pos); if(solidifier != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java index 1cce30d2f..bacb6f808 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java @@ -15,13 +15,13 @@ import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; -import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.math.RayTraceResult; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public interface IHudDisplay{ @SideOnly(Side.CLIENT) - void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, MovingObjectPosition posHit, Profiler profiler, ScaledResolution resolution); + void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 8b38d1fc4..0d149743f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -16,7 +16,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -70,8 +70,8 @@ public class BlockBase extends Block{ } @Override - protected BlockState createBlockState(){ - return this.getMetaProperty() == null ? super.createBlockState() : new BlockState(this, this.getMetaProperty()); + protected BlockStateContainer createBlockState(){ + return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); } protected PropertyInteger getMetaProperty(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index 292530844..262caa639 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -14,8 +14,9 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.BlockBush; +import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -27,7 +28,7 @@ public class BlockBushBase extends BlockBush{ public BlockBushBase(String name){ this.name = name; - this.setStepSound(soundTypeGrass); + this.setStepSound(SoundType.PLANT); this.register(); } @@ -69,8 +70,8 @@ public class BlockBushBase extends BlockBush{ } @Override - protected BlockState createBlockState(){ - return this.getMetaProperty() == null ? super.createBlockState() : new BlockState(this, this.getMetaProperty()); + protected BlockStateContainer createBlockState(){ + return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); } protected PropertyInteger getMetaProperty(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index abc4adbdf..67e108062 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -20,7 +20,8 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockRedstoneTorch; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockState; +import net.minecraft.block.state.BlockStateBase; +import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -31,8 +32,9 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; @@ -118,7 +120,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } public boolean tryToggleRedstone(World world, BlockPos pos, EntityPlayer player){ - ItemStack stack = player.getCurrentEquippedItem(); + ItemStack stack = player.getActiveItemStack(); if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof IRedstoneToggle){ @@ -224,12 +226,12 @@ public abstract class BlockContainerBase extends BlockContainer{ } @Override - public boolean hasComparatorInputOverride(){ + public boolean hasComparatorInputOverride(IBlockState state){ return true; } @Override - public int getComparatorInputOverride(World world, BlockPos pos){ + public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof IInventory){ return Container.calcRedstoneFromInventory((IInventory)tile); @@ -238,8 +240,8 @@ public abstract class BlockContainerBase extends BlockContainer{ } @Override - protected BlockState createBlockState(){ - return this.getMetaProperty() == null ? super.createBlockState() : new BlockState(this, this.getMetaProperty()); + protected BlockStateContainer createBlockState(){ + return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); } @Override @@ -290,7 +292,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } @Override - public int getRenderType(){ - return 3; + public EnumBlockRenderType getRenderType(IBlockState state){ + return EnumBlockRenderType.MODEL; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index 435bb9aa1..c88ffda61 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -16,7 +16,7 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.material.Material; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fluids.BlockFluidClassic; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index c4a9df956..9ff9a0d40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -20,9 +20,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.EnumPlantType; @@ -83,21 +84,21 @@ public class BlockPlant extends BlockCrops{ } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing facing, float hitX, float hitY, float hitZ){ + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing facing, float hitX, float hitY, float hitZ){ if(getMetaFromState(state) >= 7){ if(!world.isRemote){ List drops = getDrops(world, pos, state, 0); boolean deductedSeedSize = false; - for(ItemStack stack : drops){ - if(stack != null){ - if(stack.getItem() == this.seedItem && !deductedSeedSize){ - stack.stackSize--; + for(ItemStack drop : drops){ + if(drop != null){ + if(drop.getItem() == this.seedItem && !deductedSeedSize){ + drop.stackSize--; deductedSeedSize = true; } - if(stack.stackSize > 0){ - EntityItem entity = new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, stack); + if(drop.stackSize > 0){ + EntityItem entity = new EntityItem(world, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, drop); world.spawnEntityInWorld(entity); } } @@ -110,11 +111,6 @@ public class BlockPlant extends BlockCrops{ return false; } - @Override - public int getDamageValue(World world, BlockPos pos){ - return 0; - } - @Override public Item getSeed(){ return this.seedItem; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 5e36ca6fe..ffa745839 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -29,7 +29,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.stats.Achievement; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import java.awt.*; import java.net.URI; @@ -80,9 +80,9 @@ public class BookletUtils{ //Draw No Entry title if(booklet.currentEntrySet.entry == null){ - String strg = EnumChatFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.manualName.1"); + String strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.manualName.1"); booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+12, 0); - strg = EnumChatFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.manualName.2"); + strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.manualName.2"); booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+12+booklet.getFontRenderer().FONT_HEIGHT, 0); String version; @@ -105,7 +105,7 @@ public class BookletUtils{ else{ version = StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.edition")+" "+ModUtil.VERSION.substring(ModUtil.VERSION.indexOf("r")+1); } - strg = EnumChatFormatting.GOLD+EnumChatFormatting.ITALIC.toString()+"-"+version+"-"; + strg = TextFormatting.GOLD+TextFormatting.ITALIC.toString()+"-"+version+"-"; booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+33, 0); } @@ -139,10 +139,10 @@ public class BookletUtils{ if(mouseX >= booklet.guiLeft+booklet.xSize+1 && mouseX < booklet.guiLeft+booklet.xSize+1+22 && mouseY >= booklet.guiTop-18 && mouseY < booklet.guiTop-18+21){ if(infoList == null){ infoList = new ArrayList(); - infoList.add(EnumChatFormatting.GOLD+"Achievements related to this chapter:"); + infoList.add(TextFormatting.GOLD+"Achievements related to this chapter:"); } infoList.add("-"+StringUtil.localize(achievement.statId)); - infoList.add(EnumChatFormatting.GRAY+"("+achievement.getDescription()+")"); + infoList.add(TextFormatting.GRAY+"("+achievement.getDescription()+")"); } } } @@ -178,10 +178,10 @@ public class BookletUtils{ //Renders the amount of words and chars the book has else{ String wordCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID_LOWER+".amountOfWords", ClientProxy.bookletWordCount); - booklet.getFontRenderer().drawString(EnumChatFormatting.ITALIC+wordCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(wordCountString)-15, booklet.guiTop+booklet.ySize-18-booklet.getFontRenderer().FONT_HEIGHT, 0); + booklet.getFontRenderer().drawString(TextFormatting.ITALIC+wordCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(wordCountString)-15, booklet.guiTop+booklet.ySize-18-booklet.getFontRenderer().FONT_HEIGHT, 0); String charCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID_LOWER+".amountOfChars", ClientProxy.bookletCharCount); - booklet.getFontRenderer().drawString(EnumChatFormatting.ITALIC+charCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(charCountString)-15, booklet.guiTop+booklet.ySize-18, 0); + booklet.getFontRenderer().drawString(TextFormatting.ITALIC+charCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(charCountString)-15, booklet.guiTop+booklet.ySize-18, 0); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index c217b0012..f39d8b2ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -34,9 +34,9 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; @@ -164,7 +164,8 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public void keyTyped(char theChar, int key){ if(AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){ if(this.hisNameIsAt+1 >= AND_HIS_NAME_IS.length){ - Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation(ModUtil.MOD_ID_LOWER, "duhDuhDuhDuuuh"))); + //TODO Fix sound + //Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation(ModUtil.MOD_ID_LOWER, "duhDuhDuhDuuuh"))); ModUtil.LOGGER.info("AND HIS NAME IS JOHN CENA DUH DUH DUH DUUUH"); this.hisNameIsAt = 0; } @@ -274,46 +275,46 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.guiLeft = (this.width-this.xSize)/2; this.guiTop = (this.height-this.ySize)/2; - this.buttonForward = new TexturedButton(0, this.guiLeft+this.xSize-26, this.guiTop+this.ySize+1, 164, 0, 18, 10, Collections.singletonList(EnumChatFormatting.GOLD+"Next Page")); + this.buttonForward = new TexturedButton(0, this.guiLeft+this.xSize-26, this.guiTop+this.ySize+1, 164, 0, 18, 10, Collections.singletonList(TextFormatting.GOLD+"Next Page")); this.buttonList.add(this.buttonForward); - this.buttonBackward = new TexturedButton(1, this.guiLeft+8, this.guiTop+this.ySize+1, 146, 0, 18, 10, Collections.singletonList(EnumChatFormatting.GOLD+"Previous Page")); + this.buttonBackward = new TexturedButton(1, this.guiLeft+8, this.guiTop+this.ySize+1, 146, 0, 18, 10, Collections.singletonList(TextFormatting.GOLD+"Previous Page")); this.buttonList.add(this.buttonBackward); - this.buttonPreviousScreen = new TexturedButton(2, this.guiLeft+this.xSize/2-7, this.guiTop+this.ySize+1, 182, 0, 15, 10, Collections.singletonList(EnumChatFormatting.GOLD+"Back")); + this.buttonPreviousScreen = new TexturedButton(2, this.guiLeft+this.xSize/2-7, this.guiTop+this.ySize+1, 182, 0, 15, 10, Collections.singletonList(TextFormatting.GOLD+"Back")); this.buttonList.add(this.buttonPreviousScreen); ArrayList updateHover = new ArrayList(); if(UpdateChecker.checkFailed){ - updateHover.add(IChatComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.failed")).getFormattedText()); + updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.failed")).getFormattedText()); } else if(UpdateChecker.needsUpdateNotify){ - updateHover.add(IChatComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.generic")).getFormattedText()); - updateHover.add(IChatComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString)).getFormattedText()); + updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.generic")).getFormattedText()); + updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString)).getFormattedText()); updateHover.add(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.buttonOptions")); } this.buttonUpdate = new TexturedButton(4, this.guiLeft-11, this.guiTop-11, 245, 0, 11, 11, updateHover); this.buttonUpdate.visible = UpdateChecker.needsUpdateNotify; this.buttonList.add(this.buttonUpdate); - this.buttonTwitter = new TexturedButton(5, this.guiLeft, this.guiTop, 213, 0, 8, 8, Collections.singletonList(EnumChatFormatting.GOLD+"Open @ActAddMod on Twitter in Browser")); + this.buttonTwitter = new TexturedButton(5, this.guiLeft, this.guiTop, 213, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open @ActAddMod on Twitter in Browser")); this.buttonList.add(this.buttonTwitter); - this.buttonForum = new TexturedButton(6, this.guiLeft, this.guiTop+10, 221, 0, 8, 8, Collections.singletonList(EnumChatFormatting.GOLD+"Open Minecraft Forum Post in Browser")); + this.buttonForum = new TexturedButton(6, this.guiLeft, this.guiTop+10, 221, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open Minecraft Forum Post in Browser")); this.buttonList.add(this.buttonForum); - this.buttonAchievements = new TexturedButton(7, this.guiLeft+138, this.guiTop, 205, 0, 8, 8, Collections.singletonList(EnumChatFormatting.GOLD+"Show Achievements")); + this.buttonAchievements = new TexturedButton(7, this.guiLeft+138, this.guiTop, 205, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Show Achievements")); this.buttonList.add(this.buttonAchievements); ArrayList websiteHover = new ArrayList(); - websiteHover.add(EnumChatFormatting.GOLD+"Open Author's Website"); + websiteHover.add(TextFormatting.GOLD+"Open Author's Website"); websiteHover.add("(There's some cool stuff there!)"); - websiteHover.add(EnumChatFormatting.GRAY+""+EnumChatFormatting.ITALIC+"Would you call this Product Placement?"); + websiteHover.add(TextFormatting.GRAY+""+TextFormatting.ITALIC+"Would you call this Product Placement?"); this.buttonWebsite = new TexturedButton(-99, this.guiLeft, this.guiTop+20, 228, 0, 8, 8, websiteHover); this.buttonList.add(this.buttonWebsite); ArrayList configHover = new ArrayList(); - configHover.add(EnumChatFormatting.GOLD+"Show Configuration GUI"); + configHover.add(TextFormatting.GOLD+"Show Configuration GUI"); configHover.addAll(this.fontRendererObj.listFormattedStringToWidth("It is highly recommended that you restart your game after changing anything as that prevents possible bugs occuring!", 200)); this.buttonConfig = new TexturedButton(8, this.guiLeft+138, this.guiTop+10, 197, 0, 8, 8, configHover); this.buttonList.add(this.buttonConfig); @@ -416,7 +417,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ list.set(k, stack.getRarity().rarityColor+(String)list.get(k)); } else{ - list.set(k, EnumChatFormatting.GRAY+(String)list.get(k)); + list.set(k, TextFormatting.GRAY+(String)list.get(k)); } } @@ -428,7 +429,8 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ if(mousePressed){ BookletUtils.openIndexEntry(this, page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); BookletUtils.openChapter(this, page.getChapter(), page); - Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + //TODO Fix sound + //Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 233a98e34..2816f8d50 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -20,7 +20,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import java.util.ArrayList; @@ -83,16 +83,16 @@ public class BookmarkButton extends GuiButton{ ArrayList list = new ArrayList(); if(this.assignedEntry.entry != null){ if(this.assignedEntry.chapter != null){ - list.add(EnumChatFormatting.GOLD+this.assignedEntry.chapter.getLocalizedName()+", Page "+this.assignedEntry.page.getID()); + list.add(TextFormatting.GOLD+this.assignedEntry.chapter.getLocalizedName()+", Page "+this.assignedEntry.page.getID()); } else{ - list.add(EnumChatFormatting.GOLD+this.assignedEntry.entry.getLocalizedName()+", Page "+this.assignedEntry.pageInIndex); + list.add(TextFormatting.GOLD+this.assignedEntry.entry.getLocalizedName()+", Page "+this.assignedEntry.pageInIndex); } list.add("Click to open"); - list.add(EnumChatFormatting.ITALIC+"Shift-Click to remove"); + list.add(TextFormatting.ITALIC+"Shift-Click to remove"); } else{ - list.add(EnumChatFormatting.GOLD+"None"); + list.add(TextFormatting.GOLD+"None"); list.add("Click to save current page"); } this.booklet.drawHoveringText(list, mouseX, mouseY); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 8107169ab..87b019555 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -19,7 +19,7 @@ import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; public class IndexButton extends GuiButton{ @@ -63,7 +63,7 @@ public class IndexButton extends GuiButton{ public void drawHover(int mouseX, int mouseY){ if(this.chap instanceof BookletChapter && ((BookletChapter)this.chap).isIncomplete){ - this.gui.drawHoveringText(this.gui.getFontRenderer().listFormattedStringToWidth(EnumChatFormatting.RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".unavailable"), 250), mouseX, mouseY); + this.gui.drawHoveringText(this.gui.getFontRenderer().listFormattedStringToWidth(TextFormatting.RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".unavailable"), 250), mouseX, mouseY); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index 3eb2144af..b8de3244d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -17,7 +17,7 @@ import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; public class BookletChapter implements IBookletChapter{ @@ -25,7 +25,7 @@ public class BookletChapter implements IBookletChapter{ public final IBookletEntry entry; public final ItemStack displayStack; private final String unlocalizedName; - public EnumChatFormatting color; + public TextFormatting color; public boolean isIncomplete; @@ -42,7 +42,7 @@ public class BookletChapter implements IBookletChapter{ page.setChapter(this); } - this.color = EnumChatFormatting.RESET; + this.color = TextFormatting.RESET; } @Override @@ -81,12 +81,12 @@ public class BookletChapter implements IBookletChapter{ } public BookletChapter setImportant(){ - this.color = EnumChatFormatting.DARK_GREEN; + this.color = TextFormatting.DARK_GREEN; return this; } public BookletChapter setSpecial(){ - this.color = EnumChatFormatting.DARK_PURPLE; + this.color = TextFormatting.DARK_PURPLE; return this; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java index 74011bbc3..26dc947fc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java @@ -15,7 +15,7 @@ import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import java.util.ArrayList; import java.util.List; @@ -24,13 +24,13 @@ public class BookletEntry implements IBookletEntry{ private final String unlocalizedName; public List chapters = new ArrayList(); - private EnumChatFormatting color; + private TextFormatting color; public BookletEntry(String unlocalizedName){ this.unlocalizedName = unlocalizedName; ActuallyAdditionsAPI.addBookletEntry(this); - this.color = EnumChatFormatting.RESET; + this.color = TextFormatting.RESET; } @Override @@ -64,12 +64,12 @@ public class BookletEntry implements IBookletEntry{ } public BookletEntry setImportant(){ - this.color = EnumChatFormatting.DARK_GREEN; + this.color = TextFormatting.DARK_GREEN; return this; } public BookletEntry setSpecial(){ - this.color = EnumChatFormatting.DARK_PURPLE; + this.color = TextFormatting.DARK_PURPLE; return this; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java index 4eef6f123..c6d3553c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java @@ -17,7 +17,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import java.util.HashMap; import java.util.Map; @@ -44,12 +44,12 @@ public class BookletPageAA extends BookletPage{ } String base = StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".chapter."+this.chapter.getUnlocalizedName()+".text."+this.localizationKey); - base = base.replaceAll("", EnumChatFormatting.DARK_GREEN+""); - base = base.replaceAll("", EnumChatFormatting.BLUE+""); - base = base.replaceAll("", EnumChatFormatting.BLACK+""); + base = base.replaceAll("", TextFormatting.DARK_GREEN+""); + base = base.replaceAll("", TextFormatting.BLUE+""); + base = base.replaceAll("", TextFormatting.BLACK+""); base = base.replaceAll("", "\n"); - base = base.replaceAll("", EnumChatFormatting.ITALIC+""); - base = base.replaceAll("", EnumChatFormatting.DARK_RED+""+EnumChatFormatting.UNDERLINE); //This is fucking important so go read it now + base = base.replaceAll("", TextFormatting.ITALIC+""); + base = base.replaceAll("", TextFormatting.DARK_RED+""+TextFormatting.UNDERLINE); //This is fucking important so go read it now for(Object o : this.textReplacements.entrySet()){ Map.Entry e = (Map.Entry)o; @@ -80,7 +80,7 @@ public class BookletPageAA extends BookletPage{ @Override public String getClickToSeeRecipeString(){ - return EnumChatFormatting.GOLD+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".clickToSeeRecipe"); + return TextFormatting.GOLD+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".clickToSeeRecipe"); } public BookletPage setNoText(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index 3f512c03f..230e6a9fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -22,7 +22,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.ShapedRecipes; import net.minecraft.item.crafting.ShapelessRecipes; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.ReflectionHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -64,7 +64,7 @@ public class PageCrafting extends BookletPageAA{ IRecipe recipe = this.recipes[this.recipePos]; if(recipe == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, EnumChatFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ String strg = StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+"."+(recipe instanceof ShapedRecipes ? "shapedRecipe" : (recipe instanceof ShapelessRecipes ? "shapelessRecipe" : (recipe instanceof ShapelessOreRecipe ? "shapelessOreRecipe" : "shapedOreRecipe")))); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index 288d874f9..85028df26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -20,7 +20,7 @@ import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -53,7 +53,7 @@ public class PageCrusherRecipe extends BookletPageAA{ @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ if(recipe == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, EnumChatFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ String strg = "Crusher Recipe"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index f8cde97b0..75d591dbe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -20,7 +20,7 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -57,7 +57,7 @@ public class PageFurnace extends BookletPageAA{ public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ ItemStack input = this.input != null ? this.input : this.getInputForOutput(this.result); if(input == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, EnumChatFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ String strg = "Furnace Recipe"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index d74c04856..ffd2988de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -21,7 +21,7 @@ import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -58,7 +58,7 @@ public class PageReconstructor extends BookletPageAA{ public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ LensNoneRecipe recipe = this.recipes[this.recipePos]; if(recipe == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, EnumChatFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ String strg = "Atomic Reconstructor"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index fb9c016fd..30fe6f917 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -44,7 +44,7 @@ public class CreativeTab extends CreativeTabs{ @Override @SideOnly(Side.CLIENT) - public void displayAllReleventItems(List list){ + public void displayAllRelevantItems(List list){ this.list = list; add(InitItems.itemBooklet); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java index f86ab2dfe..1aa29f8a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java @@ -30,10 +30,10 @@ public class BucketFillEvent{ } private void fillBucket(FillBucketEvent event, Item item, Block fluid){ - Block block = PosUtil.getBlock(event.target.getBlockPos(), event.world); + Block block = PosUtil.getBlock(event.getTarget().getBlockPos(), event.getWorld()); if(block == fluid){ - event.world.setBlockToAir(event.target.getBlockPos()); - event.result = new ItemStack(item); + event.getWorld().setBlockToAir(event.getTarget().getBlockPos()); + event.setFilledBucket(new ItemStack(item)); event.setResult(Event.Result.ALLOW); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index ceb691ded..d8ebcd2e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -24,8 +24,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -37,9 +37,9 @@ public class HudEvent{ Minecraft minecraft = Minecraft.getMinecraft(); Profiler profiler = minecraft.mcProfiler; EntityPlayer player = minecraft.thePlayer; - MovingObjectPosition posHit = minecraft.objectMouseOver; + RayTraceResult posHit = minecraft.objectMouseOver; FontRenderer font = minecraft.fontRendererObj; - ItemStack stack = player.getCurrentEquippedItem(); + ItemStack stack = player.getActiveItemStack(); profiler.startSection(ModUtil.MOD_ID+"Hud"); @@ -64,11 +64,11 @@ public class HudEvent{ if(tileHit instanceof IRedstoneToggle){ profiler.startSection("RedstoneToggleHudDisplay"); - String strg = "Redstone Mode: "+EnumChatFormatting.DARK_RED+(((IRedstoneToggle)tileHit).isPulseMode() ? "Pulse" : "Deactivation")+EnumChatFormatting.RESET; + String strg = "Redstone Mode: "+TextFormatting.DARK_RED+(((IRedstoneToggle)tileHit).isPulseMode() ? "Pulse" : "Deactivation")+TextFormatting.RESET; font.drawStringWithShadow(strg, event.resolution.getScaledWidth()/2+5, event.resolution.getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ - String expl = EnumChatFormatting.GREEN+"Right-Click to toggle!"; + String expl = TextFormatting.GREEN+"Right-Click to toggle!"; font.drawStringWithShadow(expl, event.resolution.getScaledWidth()/2+5, event.resolution.getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); } @@ -78,7 +78,7 @@ public class HudEvent{ if(tileHit instanceof IEnergyDisplay){ profiler.startSection("EnergyDisplay"); String strg = ((IEnergyDisplay)tileHit).getEnergy()+"/"+((IEnergyDisplay)tileHit).getMaxEnergy()+" RF"; - font.drawStringWithShadow(EnumChatFormatting.GOLD+strg, event.resolution.getScaledWidth()/2+5, event.resolution.getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); + font.drawStringWithShadow(TextFormatting.GOLD+strg, event.resolution.getScaledWidth()/2+5, event.resolution.getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); profiler.endSection(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index b8d8b5ea9..fdb41da12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -17,7 +17,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.oredict.OreDictionary; @@ -26,8 +26,8 @@ import java.util.List; public class TooltipEvent{ - private static final String ADVANCED_INFO_TEXT_PRE = EnumChatFormatting.DARK_GRAY+" "; - private static final String ADVANCED_INFO_HEADER_PRE = EnumChatFormatting.GRAY+" -"; + private static final String ADVANCED_INFO_TEXT_PRE = TextFormatting.DARK_GRAY+" "; + private static final String ADVANCED_INFO_HEADER_PRE = TextFormatting.GRAY+" -"; @SuppressWarnings("unchecked") @SubscribeEvent @@ -36,7 +36,7 @@ public class TooltipEvent{ if(event.itemStack.getItem() != null){ if(ConfigBoolValues.CTRL_EXTRA_INFO.isEnabled()){ if(GuiScreen.isCtrlKeyDown()){ - event.toolTip.add(EnumChatFormatting.DARK_GRAY+""+EnumChatFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".extraInfo.desc")+":"); + event.toolTip.add(TextFormatting.DARK_GRAY+""+TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".extraInfo.desc")+":"); //OreDict Names int[] oreIDs = OreDictionary.getOreIDs(event.itemStack); @@ -84,17 +84,17 @@ public class TooltipEvent{ } } else{ - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+EnumChatFormatting.ITALIC+"["+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".pressShift.desc")+"]"); + event.toolTip.add(ADVANCED_INFO_TEXT_PRE+TextFormatting.ITALIC+"["+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".pressShift.desc")+"]"); } } //Disabling Info - event.toolTip.addAll(Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(EnumChatFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".disablingInfo.desc"), 200)); + event.toolTip.addAll(Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".disablingInfo.desc"), 200)); } else{ if(ConfigBoolValues.CTRL_INFO_FOR_EXTRA_INFO.isEnabled()){ - event.toolTip.add(EnumChatFormatting.DARK_GRAY+""+EnumChatFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".ctrlForMoreInfo.desc")); + event.toolTip.add(TextFormatting.DARK_GRAY+""+TextFormatting .ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".ctrlForMoreInfo.desc")); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index 07d014a31..cb93092f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -21,7 +21,7 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.biome.BiomeGenOcean; import net.minecraftforge.event.terraingen.DecorateBiomeEvent; import net.minecraftforge.fml.common.eventhandler.Event; @@ -34,7 +34,7 @@ public class WorldDecorationEvent{ @SubscribeEvent public void onWorldDecoration(DecorateBiomeEvent.Decorate event){ if((event.getResult() == Event.Result.ALLOW || event.getResult() == Event.Result.DEFAULT)){ - if(Util.arrayContains(ConfigValues.plantDimensionBlacklist, event.world.provider.getDimensionId()) < 0){ + if(Util.arrayContains(ConfigValues.plantDimensionBlacklist, event.world.provider.getDimension()) < 0){ this.generateRice(event); this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.grass, event); this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.grass, event); @@ -50,7 +50,7 @@ public class WorldDecorationEvent{ if(event.world.getBiomeGenForCoords(randomPos) instanceof BiomeGenOcean){ if(randomPos.getY() >= 25 && randomPos.getY() <= 45){ - if(PosUtil.getBlock(randomPos, event.world).getMaterial() == Material.water){ + if(PosUtil.getBlock(randomPos, event.world).getMaterial(event.world.getBlockState(randomPos)) == Material.water){ if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.world).isSolid()){ PosUtil.setBlock(randomPos, event.world, InitBlocks.blockTreasureChest, event.rand.nextInt(4), 2); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index a67fbfeb7..7228c4f7d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -15,7 +15,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheJams; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import net.minecraft.util.MathHelper; +import net.minecraft.util.math.MathHelper; import net.minecraft.village.MerchantRecipe; import net.minecraft.village.MerchantRecipeList; import net.minecraftforge.oredict.OreDictionary; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 46a556502..fe7821a2b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -17,12 +17,13 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; -import net.minecraft.block.state.pattern.BlockHelper; +import net.minecraft.block.state.pattern.BlockMatcher; import net.minecraft.init.Blocks; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MathHelper; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraft.world.WorldType; +import net.minecraft.world.chunk.IChunkGenerator; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; import net.minecraftforge.fml.common.IWorldGenerator; @@ -41,9 +42,9 @@ public class OreGen implements IWorldGenerator{ } @Override - public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider){ - if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimensionId()) < 0){ - switch(world.provider.getDimensionId()){ + public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){ + if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimension()) < 0){ + switch(world.provider.getDimension()){ case -1: generateNether(world, random, chunkX*16, chunkZ*16); //case 0: @@ -79,7 +80,7 @@ public class OreGen implements IWorldGenerator{ int posX = blockXPos+random.nextInt(16); int posY = minY+random.nextInt(yDiff); int posZ = blockZPos+random.nextInt(16); - new WorldGenMinable(block.getStateFromMeta(meta), maxVeinSize, BlockHelper.forBlock(blockIn)).generate(world, random, new BlockPos(posX, posY, posZ)); + new WorldGenMinable(block.getStateFromMeta(meta), maxVeinSize, BlockMatcher.forBlock(blockIn)).generate(world, random, new BlockPos(posX, posY, posZ)); } } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index 17914bb9e..f2b8a0d83 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -21,7 +21,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraft.util.IChatComponent; +import net.minecraft.util.text.ITextComponent; @InventoryContainer public class ContainerDrill extends Container{ @@ -119,7 +119,8 @@ public class ContainerDrill extends Container{ return null; } - @Override + //TODO Fix slotClick() + /*@Override public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player){ //par3 appears to be the type of clicking //par3 == 2 appears to be one of the number keys being hit @@ -129,7 +130,7 @@ public class ContainerDrill extends Container{ else{ return super.slotClick(par1, par2, par3, player); } - } + }*/ @Override public void onContainerClosed(EntityPlayer player){ @@ -160,7 +161,7 @@ public class ContainerDrill extends Container{ } @Override - public IChatComponent getDisplayName(){ + public ITextComponent getDisplayName(){ return null; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index d28356719..d98edf938 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -50,7 +50,7 @@ public class ContainerEnergizer extends Container{ this.addSlotToContainer(new Slot(inventory, inventory.getSizeInventory()-1-i, 102, 19+i*18){ @Override public boolean isItemValid(ItemStack stack){ - return stack != null && stack.getItem().isValidArmor(stack, finalI, finalPlayer); + return stack != null && stack.getItem().isValidArmor(stack, ContainerEnervator.ARMOR_SLOTS[finalI], finalPlayer); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 95829c910..c72dbfe2f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -18,6 +18,7 @@ import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -29,6 +30,8 @@ public class ContainerEnervator extends Container{ private TileEntityEnervator enervator; + public static final EntityEquipmentSlot[] ARMOR_SLOTS = new EntityEquipmentSlot[] {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; + public ContainerEnervator(EntityPlayer player, TileEntityBase tile){ this.enervator = (TileEntityEnervator)tile; InventoryPlayer inventory = player.inventory; @@ -50,7 +53,7 @@ public class ContainerEnervator extends Container{ this.addSlotToContainer(new Slot(inventory, inventory.getSizeInventory()-1-i, 102, 19+i*18){ @Override public boolean isItemValid(ItemStack stack){ - return stack != null && stack.getItem().isValidArmor(stack, finalI, finalPlayer); + return stack != null && stack.getItem().isValidArmor(stack, ARMOR_SLOTS[finalI], finalPlayer); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 82efa927d..0567c9b1e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -103,7 +103,8 @@ public class ContainerInputter extends Container{ return null; } - @Override + //TODO slotClick() + /*@Override public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player){ if(par1 >= 0 && par1 < this.inventorySlots.size() && this.getSlot(par1) instanceof SlotFilter){ //Calls the Filter's SlotClick function @@ -112,7 +113,7 @@ public class ContainerInputter extends Container{ else{ return super.slotClick(par1, par2, par3, player); } - } + }*/ @Override public boolean canInteractWith(EntityPlayer player){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 89eb7b93c..dd2273110 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -98,7 +98,8 @@ public class ContainerRangedCollector extends Container{ return null; } - @Override + //TODO Find a replacement for slotClick() + /*@Override public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player){ if(par1 >= 0 && par1 < this.inventorySlots.size() && this.getSlot(par1) instanceof SlotFilter){ //Calls the Filter's SlotClick function @@ -107,7 +108,7 @@ public class ContainerRangedCollector extends Container{ else{ return super.slotClick(par1, par2, par3, player); } - } + }*/ @Override public boolean canInteractWith(EntityPlayer player){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index 3ce88f5d0..4df893416 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -16,7 +16,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.gui.*; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.IGuiHandler; import net.minecraftforge.fml.common.network.NetworkRegistry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index ba72bc1ff..46a5154d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -25,8 +25,8 @@ import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -128,14 +128,14 @@ public class GuiInputter extends GuiContainer{ String text1 = this.tileInputter.isPullWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.blacklist"); if(x >= guiLeft+3 && y >= guiTop+16 && x <= guiLeft+18 && y <= guiTop+31){ ArrayList list = new ArrayList(); - list.add(EnumChatFormatting.BOLD+text1); + list.add(TextFormatting.BOLD+text1); list.addAll(infoList); this.drawHoveringText(list, x, y); } String text2 = this.tileInputter.isPutWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.blacklist"); if(x >= guiLeft+157 && y >= guiTop+16 && x <= guiLeft+172 && y <= guiTop+31){ ArrayList list = new ArrayList(); - list.add(EnumChatFormatting.BOLD+text2); + list.add(TextFormatting.BOLD+text2); list.addAll(infoList); this.drawHoveringText(list, x, y); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index 3ec364c7b..b25c7454d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -22,8 +22,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -75,7 +75,7 @@ public class GuiSmileyCloud extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - String name = cloud.name == null || cloud.name.isEmpty() ? "" : EnumChatFormatting.GOLD+cloud.name+EnumChatFormatting.RESET+" "+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.the")+" "; + String name = cloud.name == null || cloud.name.isEmpty() ? "" : TextFormatting.GOLD+cloud.name+TextFormatting.RESET+" "+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.the")+" "; String localizedName = name+StringUtil.localize("container."+ModUtil.MOD_ID_LOWER+".cloud.name"); this.fontRendererObj.drawString(localizedName, xSize/2-this.fontRendererObj.getStringWidth(localizedName)/2, -10, StringUtil.DECIMAL_COLOR_WHITE); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 6ccded60d..c2226fcfe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -220,18 +220,18 @@ public class InitItems{ itemGrowthRing = new ItemGrowthRing("itemGrowthRing"); itemMagnetRing = new ItemMagnetRing("itemSuctionRing"); itemWaterRemovalRing = new ItemWaterRemovalRing("itemWaterRemovalRing"); - itemHelmEmerald = new ItemArmorAA("itemHelmEmerald", InitArmorMaterials.armorMaterialEmerald, 0, new ItemStack(Items.emerald), "armorEmerald"); - itemChestEmerald = new ItemArmorAA("itemChestEmerald", InitArmorMaterials.armorMaterialEmerald, 1, new ItemStack(Items.emerald), "armorEmerald"); - itemPantsEmerald = new ItemArmorAA("itemPantsEmerald", InitArmorMaterials.armorMaterialEmerald, 2, new ItemStack(Items.emerald), "armorEmerald"); - itemBootsEmerald = new ItemArmorAA("itemBootsEmerald", InitArmorMaterials.armorMaterialEmerald, 3, new ItemStack(Items.emerald), "armorEmerald"); - itemHelmObsidian = new ItemArmorAA("itemHelmObsidian", InitArmorMaterials.armorMaterialObsidian, 0, new ItemStack(Blocks.obsidian), "armorObsidian"); - itemChestObsidian = new ItemArmorAA("itemChestObsidian", InitArmorMaterials.armorMaterialObsidian, 1, new ItemStack(Blocks.obsidian), "armorObsidian"); - itemPantsObsidian = new ItemArmorAA("itemPantsObsidian", InitArmorMaterials.armorMaterialObsidian, 2, new ItemStack(Blocks.obsidian), "armorObsidian"); - itemBootsObsidian = new ItemArmorAA("itemBootsObsidian", InitArmorMaterials.armorMaterialObsidian, 3, new ItemStack(Blocks.obsidian), "armorObsidian"); - itemHelmQuartz = new ItemArmorAA("itemHelmQuartz", InitArmorMaterials.armorMaterialQuartz, 0, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "armorQuartz"); - itemChestQuartz = new ItemArmorAA("itemChestQuartz", InitArmorMaterials.armorMaterialQuartz, 1, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "armorQuartz"); - itemPantsQuartz = new ItemArmorAA("itemPantsQuartz", InitArmorMaterials.armorMaterialQuartz, 2, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "armorQuartz"); - itemBootsQuartz = new ItemArmorAA("itemBootsQuartz", InitArmorMaterials.armorMaterialQuartz, 3, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "armorQuartz"); + itemHelmEmerald = new ItemArmorAA("itemHelmEmerald", InitArmorMaterials.armorMaterialEmerald, 0, new ItemStack(Items.emerald)); + itemChestEmerald = new ItemArmorAA("itemChestEmerald", InitArmorMaterials.armorMaterialEmerald, 1, new ItemStack(Items.emerald)); + itemPantsEmerald = new ItemArmorAA("itemPantsEmerald", InitArmorMaterials.armorMaterialEmerald, 2, new ItemStack(Items.emerald)); + itemBootsEmerald = new ItemArmorAA("itemBootsEmerald", InitArmorMaterials.armorMaterialEmerald, 3, new ItemStack(Items.emerald)); + itemHelmObsidian = new ItemArmorAA("itemHelmObsidian", InitArmorMaterials.armorMaterialObsidian, 0, new ItemStack(Blocks.obsidian)); + itemChestObsidian = new ItemArmorAA("itemChestObsidian", InitArmorMaterials.armorMaterialObsidian, 1, new ItemStack(Blocks.obsidian)); + itemPantsObsidian = new ItemArmorAA("itemPantsObsidian", InitArmorMaterials.armorMaterialObsidian, 2, new ItemStack(Blocks.obsidian)); + itemBootsObsidian = new ItemArmorAA("itemBootsObsidian", InitArmorMaterials.armorMaterialObsidian, 3, new ItemStack(Blocks.obsidian)); + itemHelmQuartz = new ItemArmorAA("itemHelmQuartz", InitArmorMaterials.armorMaterialQuartz, 0, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())); + itemChestQuartz = new ItemArmorAA("itemChestQuartz", InitArmorMaterials.armorMaterialQuartz, 1, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())); + itemPantsQuartz = new ItemArmorAA("itemPantsQuartz", InitArmorMaterials.armorMaterialQuartz, 2, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())); + itemBootsQuartz = new ItemArmorAA("itemBootsQuartz", InitArmorMaterials.armorMaterialQuartz, 3, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())); itemTeleStaff = new ItemTeleStaff("itemTeleStaff"); itemWingsOfTheBats = new ItemWingsOfTheBats("itemWingsOfTheBats"); itemDrill = new ItemDrill("itemDrill"); @@ -296,7 +296,7 @@ public class InitItems{ stonePaxel = new ItemAllToolAA(Item.ToolMaterial.STONE, new ItemStack(Blocks.cobblestone), "stonePaxel", EnumRarity.UNCOMMON, 7040621); ironPaxel = new ItemAllToolAA(Item.ToolMaterial.IRON, new ItemStack(Items.iron_ingot), "ironPaxel", EnumRarity.RARE, 10920613); goldPaxel = new ItemAllToolAA(Item.ToolMaterial.GOLD, new ItemStack(Items.gold_ingot), "goldPaxel", EnumRarity.RARE, 16770048); - diamondPaxel = new ItemAllToolAA(Item.ToolMaterial.EMERALD, new ItemStack(Items.diamond), "diamondPaxel", EnumRarity.EPIC, 3250376); + diamondPaxel = new ItemAllToolAA(Item.ToolMaterial.DIAMOND, new ItemStack(Items.diamond), "diamondPaxel", EnumRarity.EPIC, 3250376); emeraldPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "emeraldPaxel", EnumRarity.EPIC, 7723338); obsidianPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.obsidian), "obsidianPaxel", EnumRarity.EPIC, 4166); quartzPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialQuartz, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "quartzPaxel", EnumRarity.RARE, 1710103); @@ -306,10 +306,10 @@ public class InitItems{ itemShovelCrystalRed = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalRed, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "itemShovelCrystalRed", Util.CRYSTAL_RED_RARITY); itemSwordCrystalRed = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalRed, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "itemSwordCrystalRed", Util.CRYSTAL_RED_RARITY); itemHoeCrystalRed = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalRed, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "itemHoeCrystalRed", Util.CRYSTAL_RED_RARITY); - itemHelmCrystalRed = new ItemArmorAA("itemHelmCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "armorCrystalRed", Util.CRYSTAL_RED_RARITY); - itemChestCrystalRed = new ItemArmorAA("itemChestCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "armorCrystalRed", Util.CRYSTAL_RED_RARITY); - itemPantsCrystalRed = new ItemArmorAA("itemPantsCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "armorCrystalRed", Util.CRYSTAL_RED_RARITY); - itemBootsCrystalRed = new ItemArmorAA("itemBootsCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "armorCrystalRed", Util.CRYSTAL_RED_RARITY); + itemHelmCrystalRed = new ItemArmorAA("itemHelmCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), Util.CRYSTAL_RED_RARITY); + itemChestCrystalRed = new ItemArmorAA("itemChestCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), Util.CRYSTAL_RED_RARITY); + itemPantsCrystalRed = new ItemArmorAA("itemPantsCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), Util.CRYSTAL_RED_RARITY); + itemBootsCrystalRed = new ItemArmorAA("itemBootsCrystalRed", InitArmorMaterials.armorMaterialCrystalRed, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), Util.CRYSTAL_RED_RARITY); itemPaxelCrystalRed = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalRed, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "itemPaxelCrystalRed", Util.CRYSTAL_RED_RARITY, 16711689); itemPickaxeCrystalBlue = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "itemPickaxeCrystalBlue", Util.CRYSTAL_BLUE_RARITY); @@ -317,10 +317,10 @@ public class InitItems{ itemShovelCrystalBlue = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "itemShovelCrystalBlue", Util.CRYSTAL_BLUE_RARITY); itemSwordCrystalBlue = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "itemSwordCrystalBlue", Util.CRYSTAL_BLUE_RARITY); itemHoeCrystalBlue = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "itemHoeCrystalBlue", Util.CRYSTAL_BLUE_RARITY); - itemHelmCrystalBlue = new ItemArmorAA("itemHelmCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "armorCrystalBlue", Util.CRYSTAL_BLUE_RARITY); - itemChestCrystalBlue = new ItemArmorAA("itemChestCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "armorCrystalBlue", Util.CRYSTAL_BLUE_RARITY); - itemPantsCrystalBlue = new ItemArmorAA("itemPantsCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "armorCrystalBlue", Util.CRYSTAL_BLUE_RARITY); - itemBootsCrystalBlue = new ItemArmorAA("itemBootsCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "armorCrystalBlue", Util.CRYSTAL_BLUE_RARITY); + itemHelmCrystalBlue = new ItemArmorAA("itemHelmCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), Util.CRYSTAL_BLUE_RARITY); + itemChestCrystalBlue = new ItemArmorAA("itemChestCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), Util.CRYSTAL_BLUE_RARITY); + itemPantsCrystalBlue = new ItemArmorAA("itemPantsCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), Util.CRYSTAL_BLUE_RARITY); + itemBootsCrystalBlue = new ItemArmorAA("itemBootsCrystalBlue", InitArmorMaterials.armorMaterialCrystalBlue, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), Util.CRYSTAL_BLUE_RARITY); itemPaxelCrystalBlue = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), "itemPaxelCrystalBlue", Util.CRYSTAL_BLUE_RARITY, 3014911); itemPickaxeCrystalLightBlue = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemPickaxeCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); @@ -328,10 +328,10 @@ public class InitItems{ itemShovelCrystalLightBlue = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemShovelCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); itemSwordCrystalLightBlue = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemSwordCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); itemHoeCrystalLightBlue = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemHoeCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); - itemHelmCrystalLightBlue = new ItemArmorAA("itemHelmCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "armorCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); - itemChestCrystalLightBlue = new ItemArmorAA("itemChestCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "armorCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); - itemPantsCrystalLightBlue = new ItemArmorAA("itemPantsCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "armorCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); - itemBootsCrystalLightBlue = new ItemArmorAA("itemBootsCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "armorCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); + itemHelmCrystalLightBlue = new ItemArmorAA("itemHelmCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); + itemChestCrystalLightBlue = new ItemArmorAA("itemChestCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); + itemPantsCrystalLightBlue = new ItemArmorAA("itemPantsCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); + itemBootsCrystalLightBlue = new ItemArmorAA("itemBootsCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); itemPaxelCrystalLightBlue = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemPaxelCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY, 4093108); itemPickaxeCrystalBlack = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalBlack, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "itemPickaxeCrystalBlack", Util.CRYSTAL_BLACK_RARITY); @@ -339,10 +339,10 @@ public class InitItems{ itemShovelCrystalBlack = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalBlack, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "itemShovelCrystalBlack", Util.CRYSTAL_BLACK_RARITY); itemSwordCrystalBlack = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalBlack, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "itemSwordCrystalBlack", Util.CRYSTAL_BLACK_RARITY); itemHoeCrystalBlack = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalBlack, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "itemHoeCrystalBlack", Util.CRYSTAL_BLACK_RARITY); - itemHelmCrystalBlack = new ItemArmorAA("itemHelmCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "armorCrystalBlack", Util.CRYSTAL_BLACK_RARITY); - itemChestCrystalBlack = new ItemArmorAA("itemChestCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "armorCrystalBlack", Util.CRYSTAL_BLACK_RARITY); - itemPantsCrystalBlack = new ItemArmorAA("itemPantsCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "armorCrystalBlack", Util.CRYSTAL_BLACK_RARITY); - itemBootsCrystalBlack = new ItemArmorAA("itemBootsCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "armorCrystalBlack", Util.CRYSTAL_BLACK_RARITY); + itemHelmCrystalBlack = new ItemArmorAA("itemHelmCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); + itemChestCrystalBlack = new ItemArmorAA("itemChestCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); + itemPantsCrystalBlack = new ItemArmorAA("itemPantsCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); + itemBootsCrystalBlack = new ItemArmorAA("itemBootsCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); itemPaxelCrystalBlack = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalBlack, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "itemPaxelCrystalBlack", Util.CRYSTAL_BLACK_RARITY, 2631982); itemPickaxeCrystalGreen = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemPickaxeCrystalGreen", Util.CRYSTAL_GREEN_RARITY); @@ -350,10 +350,10 @@ public class InitItems{ itemShovelCrystalGreen = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemShovelCrystalGreen", Util.CRYSTAL_GREEN_RARITY); itemSwordCrystalGreen = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemSwordCrystalGreen", Util.CRYSTAL_GREEN_RARITY); itemHoeCrystalGreen = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemHoeCrystalGreen", Util.CRYSTAL_GREEN_RARITY); - itemHelmCrystalGreen = new ItemArmorAA("itemHelmCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "armorCrystalGreen", Util.CRYSTAL_GREEN_RARITY); - itemChestCrystalGreen = new ItemArmorAA("itemChestCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "armorCrystalGreen", Util.CRYSTAL_GREEN_RARITY); - itemPantsCrystalGreen = new ItemArmorAA("itemPantsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "armorCrystalGreen", Util.CRYSTAL_GREEN_RARITY); - itemBootsCrystalGreen = new ItemArmorAA("itemBootsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "armorCrystalGreen", Util.CRYSTAL_GREEN_RARITY); + itemHelmCrystalGreen = new ItemArmorAA("itemHelmCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); + itemChestCrystalGreen = new ItemArmorAA("itemChestCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); + itemPantsCrystalGreen = new ItemArmorAA("itemPantsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); + itemBootsCrystalGreen = new ItemArmorAA("itemBootsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); itemPaxelCrystalGreen = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemPaxelCrystalGreen", Util.CRYSTAL_GREEN_RARITY, 46848); itemPickaxeCrystalWhite = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemPickaxeCrystalWhite", Util.CRYSTAL_WHITE_RARITY); @@ -361,10 +361,10 @@ public class InitItems{ itemShovelCrystalWhite = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemShovelCrystalWhite", Util.CRYSTAL_WHITE_RARITY); itemSwordCrystalWhite = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemSwordCrystalWhite", Util.CRYSTAL_WHITE_RARITY); itemHoeCrystalWhite = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemHoeCrystalWhite", Util.CRYSTAL_WHITE_RARITY); - itemHelmCrystalWhite = new ItemArmorAA("itemHelmCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "armorCrystalWhite", Util.CRYSTAL_WHITE_RARITY); - itemChestCrystalWhite = new ItemArmorAA("itemChestCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "armorCrystalWhite", Util.CRYSTAL_WHITE_RARITY); - itemPantsCrystalWhite = new ItemArmorAA("itemPantsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "armorCrystalWhite", Util.CRYSTAL_WHITE_RARITY); - itemBootsCrystalWhite = new ItemArmorAA("itemBootsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "armorCrystalWhite", Util.CRYSTAL_WHITE_RARITY); + itemHelmCrystalWhite = new ItemArmorAA("itemHelmCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()),Util.CRYSTAL_WHITE_RARITY); + itemChestCrystalWhite = new ItemArmorAA("itemChestCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); + itemPantsCrystalWhite = new ItemArmorAA("itemPantsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); + itemBootsCrystalWhite = new ItemArmorAA("itemBootsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemPaxelCrystalWhite = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemPaxelCrystalWhite", Util.CRYSTAL_WHITE_RARITY, 14606302); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index f805811d6..c11872f8f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -31,10 +31,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; -import net.minecraft.util.BlockPos; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; -import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -53,7 +56,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ } @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing face, float hitX, float hitY, float hitZ){ + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing face, float hitX, float hitY, float hitZ){ if(player.isSneaking()){ Block block = PosUtil.getBlock(pos, world); ItemStack blockStack = new ItemStack(block, 1, PosUtil.getMetadata(pos, world)); @@ -63,22 +66,22 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ if(world.isRemote){ forcedEntry = new EntrySet(page, page.getChapter(), page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1); } - this.onItemRightClick(stack, world, player); - return true; + this.onItemRightClick(stack, world, player, hand); + return EnumActionResult.SUCCESS; } } } - return false; + return EnumActionResult.FAIL; } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.BOOK.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); if(!world.isRemote){ - player.triggerAchievement(TheAchievements.OPEN_BOOKLET.ach); + player.addStat(TheAchievements.OPEN_BOOKLET.ach); } - return stack; + return new ActionResult<>(EnumActionResult.SUCCESS, stack); } @SuppressWarnings("unchecked") @@ -93,10 +96,10 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ } @Override - public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, MovingObjectPosition posHit, Profiler profiler, ScaledResolution resolution){ + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ if(posHit != null){ Block block = PosUtil.getBlock(posHit.getBlockPos(), minecraft.theWorld); - if(block != null && !block.isAir(minecraft.theWorld, posHit.getBlockPos())){ + if(block != null && !block.isAir(minecraft.theWorld.getBlockState(posHit.getBlockPos()), minecraft.theWorld, posHit.getBlockPos())){ ItemStack blockStack = new ItemStack(block, 1, PosUtil.getMetadata(posHit.getBlockPos(), minecraft.theWorld)); if(blockStack != null){ int height = resolution.getScaledHeight()/5*3; @@ -108,17 +111,17 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ String strg3 = "Right-Click to open..."; AssetUtil.renderStackToGui(page.getChapter().getDisplayItemStack() != null ? page.getChapter().getDisplayItemStack() : new ItemStack(InitItems.itemBooklet), resolution.getScaledWidth()/2-10, height+41, 1F); - minecraft.fontRendererObj.drawStringWithShadow(EnumChatFormatting.YELLOW+""+EnumChatFormatting.ITALIC+strg1, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg1)/2, height+20, StringUtil.DECIMAL_COLOR_WHITE); - minecraft.fontRendererObj.drawStringWithShadow(EnumChatFormatting.YELLOW+""+EnumChatFormatting.ITALIC+strg2, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg2)/2, height+30, StringUtil.DECIMAL_COLOR_WHITE); - minecraft.fontRendererObj.drawStringWithShadow(EnumChatFormatting.GOLD+strg3, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg3)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg1, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg1)/2, height+20, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg2, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg2)/2, height+30, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.GOLD+strg3, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg3)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); } else{ - String strg = EnumChatFormatting.DARK_RED+"No Info available! Sorry :("; + String strg = TextFormatting.DARK_RED+"No Info available! Sorry :("; minecraft.fontRendererObj.drawStringWithShadow(strg, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); } } else{ - String strg = EnumChatFormatting.DARK_GREEN+""+EnumChatFormatting.ITALIC+"Sneak!"; + String strg = TextFormatting.DARK_GREEN+""+TextFormatting.ITALIC+"Sneak!"; minecraft.fontRendererObj.drawStringWithShadow(strg, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index 41ee8bbe8..a2b0467d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -22,8 +22,10 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityChest; -import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class ItemChestToCrateUpgrade extends ItemBase{ @@ -33,7 +35,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ } @Override - public boolean onItemUse(ItemStack heldStack, EntityPlayer player, World world, BlockPos pos, EnumFacing facing, float par8, float par9, float par10){ + public EnumActionResult onItemUse(ItemStack heldStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float par8, float par9, float par10){ if(player.isSneaking()){ TileEntity tileHit = world.getTileEntity(pos); Block block = PosUtil.getBlock(pos, world); @@ -74,11 +76,11 @@ public class ItemChestToCrateUpgrade extends ItemBase{ heldStack.stackSize--; } } - return true; + return EnumActionResult.SUCCESS; } } - return super.onItemUse(heldStack, player, world, pos, facing, par8, par9, par10); + return super.onItemUse(heldStack, player, world, pos, hand, facing, par8, par9, par10); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index 492f9f6d1..5c33595cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -18,8 +18,10 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -54,13 +56,13 @@ public class ItemCoffee extends ItemFoodBase{ } } - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.sugar), new PotionEffect[]{new PotionEffect(Potion.moveSpeed.getId(), 30, 0)}, 4)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.magma_cream), new PotionEffect[]{new PotionEffect(Potion.fireResistance.getId(), 20, 0)}, 2)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.fish, 1, 3), new PotionEffect[]{new PotionEffect(Potion.waterBreathing.getId(), 10, 0)}, 2)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.golden_carrot), new PotionEffect[]{new PotionEffect(Potion.nightVision.getId(), 30, 0)}, 2)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.ghast_tear), new PotionEffect[]{new PotionEffect(Potion.regeneration.getId(), 5, 0)}, 3)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.blaze_powder), new PotionEffect[]{new PotionEffect(Potion.damageBoost.getId(), 15, 0)}, 4)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.fermented_spider_eye), new PotionEffect[]{new PotionEffect(Potion.invisibility.getId(), 25, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.sugar), new PotionEffect[]{new PotionEffect(MobEffects.moveSpeed, 30, 0)}, 4)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.magma_cream), new PotionEffect[]{new PotionEffect(MobEffects.fireResistance, 20, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.fish, 1, 3), new PotionEffect[]{new PotionEffect(MobEffects.waterBreathing, 10, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.golden_carrot), new PotionEffect[]{new PotionEffect(MobEffects.nightVision, 30, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.ghast_tear), new PotionEffect[]{new PotionEffect(MobEffects.regeneration, 5, 0)}, 3)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.blaze_powder), new PotionEffect[]{new PotionEffect(MobEffects.damageBoost, 15, 0)}, 4)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.fermented_spider_eye), new PotionEffect[]{new PotionEffect(MobEffects.invisibility, 25, 0)}, 2)); } public static CoffeeIngredient getIngredientFromStack(ItemStack stack){ @@ -72,17 +74,17 @@ public class ItemCoffee extends ItemFoodBase{ return null; } - public static void applyPotionEffectsFromStack(ItemStack stack, EntityPlayer player){ + public static void applyPotionEffectsFromStack(ItemStack stack, EntityLivingBase player){ PotionEffect[] effects = CoffeeBrewing.getEffectsFromStack(stack); if(effects != null && effects.length > 0){ for(PotionEffect effect : effects){ - player.addPotionEffect(new PotionEffect(effect.getPotionID(), effect.getDuration()*20, effect.getAmplifier())); + player.addPotionEffect(new PotionEffect(effect.getPotion(), effect.getDuration()*20, effect.getAmplifier())); } } } @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityPlayer player){ + public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack theStack = stack.copy(); super.onItemUseFinish(stack, world, player); applyPotionEffectsFromStack(stack, player); @@ -142,7 +144,7 @@ public class ItemCoffee extends ItemFoodBase{ if(effects != null && effects.length > 0){ for(PotionEffect effect : effects){ if(effect.getAmplifier() > 0){ - effectsNew.add(new PotionEffect(effect.getPotionID(), effect.getDuration()+120, effect.getAmplifier()-1)); + effectsNew.add(new PotionEffect(effect.getPotion(), effect.getDuration()+120, effect.getAmplifier()-1)); } } stack.setTagCompound(new NBTTagCompound()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java index 5fd23d1d7..ae6e6f355 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java @@ -16,6 +16,9 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; import net.minecraft.world.World; public class ItemCrafterOnAStick extends ItemBase{ @@ -26,11 +29,11 @@ public class ItemCrafterOnAStick extends ItemBase{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CRAFTER.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } - return stack; + return new ActionResult(EnumActionResult.SUCCESS, stack); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 6421dda39..23798c1bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -33,12 +33,17 @@ import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; +import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentString; import net.minecraft.world.World; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.fml.relauncher.Side; @@ -71,7 +76,7 @@ public class ItemDrill extends ItemEnergy{ @Override //Places Blocks if the Placing Upgrade is installed - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ){ + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ ItemStack upgrade = this.getHasUpgradeAsStack(stack, ItemDrillUpgrade.UpgradeType.PLACER); if(upgrade != null){ int slot = ItemDrillUpgrade.getSlotToPlaceFrom(upgrade); @@ -83,28 +88,28 @@ public class ItemDrill extends ItemEnergy{ //tryPlaceItemIntoWorld could throw an Exception try{ //Places the Block into the World - if(equip.onItemUse(player, world, pos, side, hitX, hitY, hitZ)){ + if(equip.onItemUse(player, world, pos, hand, side, hitX, hitY, hitZ) != EnumActionResult.FAIL){ if(!player.capabilities.isCreativeMode){ player.inventory.setInventorySlotContents(slot, equip.stackSize <= 0 ? null : equip.copy()); } //Synchronizes the Client player.inventoryContainer.detectAndSendChanges(); - return true; + return EnumActionResult.SUCCESS; } } //Notify the Player and log the Exception catch(Exception e){ - player.addChatComponentMessage(new ChatComponentText("Ouch! That really hurt! You must have done something wrong, don't do that again please!")); - ModUtil.LOGGER.error("Player "+player.getName()+" who should place a Block using a Drill at "+player.posX+", "+player.posY+", "+player.posZ+" in World "+world.provider.getDimensionId()+" threw an Exception! Don't let that happen again!"); + player.addChatComponentMessage(new TextComponentString("Ouch! That really hurt! You must have done something wrong, don't do that again please!")); + ModUtil.LOGGER.error("Player "+player.getName()+" who should place a Block using a Drill at "+player.posX+", "+player.posY+", "+player.posZ+" in World "+world.provider.getDimension()+" threw an Exception! Don't let that happen again!"); } } else{ - return true; + return EnumActionResult.SUCCESS; } } } } - return false; + return EnumActionResult.FAIL; } /** @@ -162,11 +167,11 @@ public class ItemDrill extends ItemEnergy{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ - if(!world.isRemote && player.isSneaking() && stack == player.getCurrentEquippedItem()){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + if(!world.isRemote && player.isSneaking() && stack == player.getActiveItemStack()){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.DRILL.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } - return stack; + return new ActionResult(EnumActionResult.PASS, stack); } @Override @@ -211,14 +216,14 @@ public class ItemDrill extends ItemEnergy{ } @Override - public Multimap getAttributeModifiers(ItemStack stack){ - Multimap map = super.getAttributeModifiers(stack); - map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Drill Modifier", this.getEnergyStored(stack) >= ENERGY_USE ? 8.0F : 0.1F, 0)); + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ + Multimap map = super.getAttributeModifiers(slot, stack); + map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Drill Modifier", this.getEnergyStored(stack) >= ENERGY_USE ? 8.0F : 0.1F, 0)); return map; } @Override - public float getDigSpeed(ItemStack stack, IBlockState state){ + public float getStrVsBlock(ItemStack stack, IBlockState state){ return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) ? (this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getHarvestTool(state) == null || state.getBlock().getHarvestTool(state).isEmpty() || this.getToolClasses(stack).contains(state.getBlock().getHarvestTool(state)) ? this.getEfficiencyFromUpgrade(stack) : 1.0F) : 0.1F; } @@ -229,11 +234,11 @@ public class ItemDrill extends ItemEnergy{ if(this.getEnergyStored(stack) >= use){ //Enchants the Drill depending on the Upgrades it has if(this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.SILK_TOUCH)){ - ItemUtil.addEnchantment(stack, Enchantment.silkTouch, 1); + ItemUtil.addEnchantment(stack, Enchantments.silkTouch, 1); } else{ if(this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE)){ - ItemUtil.addEnchantment(stack, Enchantment.fortune, this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE_II) ? 3 : 1); + ItemUtil.addEnchantment(stack, Enchantments.fortune, this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE_II) ? 3 : 1); } } @@ -251,16 +256,17 @@ public class ItemDrill extends ItemEnergy{ } //Removes Enchantments added above - ItemUtil.removeEnchantment(stack, Enchantment.silkTouch); - ItemUtil.removeEnchantment(stack, Enchantment.fortune); + ItemUtil.removeEnchantment(stack, Enchantments.silkTouch); + ItemUtil.removeEnchantment(stack, Enchantments.fortune); } return toReturn; } @Override - public boolean canHarvestBlock(Block block, ItemStack stack){ + public boolean canHarvestBlock(IBlockState state, ItemStack stack){ int harvestLevel = this.getHarvestLevel(stack, ""); - return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial().isToolNotRequired() || (block == Blocks.snow_layer || block == Blocks.snow || (block == Blocks.obsidian ? harvestLevel >= 3 : (block != Blocks.diamond_block && block != Blocks.diamond_ore ? (block != Blocks.emerald_ore && block != Blocks.emerald_block ? (block != Blocks.gold_block && block != Blocks.gold_ore ? (block != Blocks.iron_block && block != Blocks.iron_ore ? (block != Blocks.lapis_block && block != Blocks.lapis_ore ? (block != Blocks.redstone_ore && block != Blocks.lit_redstone_ore ? (block.getMaterial() == Material.rock || (block.getMaterial() == Material.iron || block.getMaterial() == Material.anvil)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); + Block block = state.getBlock(); + return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.snow_layer || block == Blocks.snow || (block == Blocks.obsidian ? harvestLevel >= 3 : (block != Blocks.diamond_block && block != Blocks.diamond_ore ? (block != Blocks.emerald_ore && block != Blocks.emerald_block ? (block != Blocks.gold_block && block != Blocks.gold_ore ? (block != Blocks.iron_block && block != Blocks.iron_ore ? (block != Blocks.lapis_block && block != Blocks.lapis_ore ? (block != Blocks.redstone_ore && block != Blocks.lit_redstone_ore ? (block.getMaterial(state) == Material.rock || (block.getMaterial(state) == Material.iron || block.getMaterial(state) == Material.anvil)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); } @Override @@ -428,7 +434,7 @@ public class ItemDrill extends ItemEnergy{ int zRange = 0; //Block hit - MovingObjectPosition pos = WorldUtil.getNearestBlockWithDefaultReachDistance(world, player); + RayTraceResult pos = WorldUtil.getNearestBlockWithDefaultReachDistance(world, player); if(pos == null){ return false; } @@ -445,7 +451,7 @@ public class ItemDrill extends ItemEnergy{ } //Not defined later because main Block is getting broken below - float mainHardness = PosUtil.getBlock(aPos, world).getBlockHardness(world, aPos); + float mainHardness = PosUtil.getBlock(aPos, world).getBlockHardness(world.getBlockState(aPos), world, aPos); //Break Middle Block first int use = this.getEnergyUsePerBlock(stack); @@ -467,7 +473,7 @@ public class ItemDrill extends ItemEnergy{ if(this.getEnergyStored(stack) >= use){ //Only break Blocks around that are (about) as hard or softer BlockPos thePos = new BlockPos(xPos, yPos, zPos); - if(PosUtil.getBlock(thePos, world).getBlockHardness(world, thePos) <= mainHardness+5.0F){ + if(PosUtil.getBlock(thePos, world).getBlockHardness(world.getBlockState(thePos), world, thePos) <= mainHardness+5.0F){ this.tryHarvestBlock(world, thePos, true, stack, player, use); } } @@ -495,8 +501,9 @@ public class ItemDrill extends ItemEnergy{ */ private boolean tryHarvestBlock(World world, BlockPos pos, boolean isExtra, ItemStack stack, EntityPlayer player, int use){ Block block = PosUtil.getBlock(pos, world); - float hardness = block.getBlockHardness(world, pos); - boolean canHarvest = (ForgeHooks.canHarvestBlock(block, player, world, pos) || this.canHarvestBlock(block, stack)) && (!isExtra || this.getDigSpeed(stack, world.getBlockState(pos)) > 1.0F); + IBlockState state = world.getBlockState(pos); + float hardness = block.getBlockHardness(state, world, pos); + boolean canHarvest = (ForgeHooks.canHarvestBlock(block, player, world, pos) || this.canHarvestBlock(state, stack)) && (!isExtra || this.getStrVsBlock(stack, world.getBlockState(pos)) > 1.0F); if(hardness >= 0.0F && (!isExtra || (canHarvest && !block.hasTileEntity(world.getBlockState(pos))))){ this.extractEnergy(stack, use, false); //Break the Block diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java index 54088ca7b..a3899da8a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java @@ -14,6 +14,9 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; import net.minecraft.world.World; public class ItemDrillUpgrade extends ItemBase{ @@ -35,11 +38,12 @@ public class ItemDrillUpgrade extends ItemBase{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote && this.type == UpgradeType.PLACER){ this.setSlotToPlaceFrom(stack, player.inventory.currentItem); + return new ActionResult(EnumActionResult.SUCCESS, stack); } - return stack; + return new ActionResult(EnumActionResult.FAIL, stack); } public void setSlotToPlaceFrom(ItemStack stack, int slot){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 1ba612d18..7a5617caf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -44,11 +44,12 @@ public class ItemDust extends ItemBase{ return stack.getItemDamage() >= allDusts.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allDusts[stack.getItemDamage()].name; } - @Override + //TODO Figure out item colors + /*@Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass){ return stack.getItemDamage() >= allDusts.length ? 0 : allDusts[stack.getItemDamage()].color; - } + }*/ @Override public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index 0a43ead28..15e0f0d0e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -15,8 +15,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemDye; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class ItemFertilizer extends ItemBase{ @@ -26,14 +28,14 @@ public class ItemFertilizer extends ItemBase{ } @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float par8, float par9, float par10){ + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float par8, float par9, float par10){ if(ItemDye.applyBonemeal(stack, world, pos, player)){ if(!world.isRemote){ world.playAuxSFX(2005, pos, 0); } - return true; + return EnumActionResult.SUCCESS; } - return super.onItemUse(stack, player, world, pos, side, par8, par9, par10); + return super.onItemUse(stack, player, world, pos, hand, side, par8, par9, par10); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 43448210e..6429ad523 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -16,12 +16,14 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; 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.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -41,11 +43,11 @@ public class ItemFoods extends ItemFoodBase{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityPlayer player){ + public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); ItemStack returnItem = stack.getItemDamage() >= allFoods.length ? null : allFoods[stack.getItemDamage()].returnItem; - if(returnItem != null){ - if(!player.inventory.addItemStackToInventory(returnItem.copy())){ + if(returnItem != null && player instanceof EntityPlayer){ + if(!((EntityPlayer)player).inventory.addItemStackToInventory(returnItem.copy())){ if(!world.isRemote){ EntityItem entityItem = new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, returnItem.copy()); entityItem.setPickupDelay(0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index f4b1922a1..d80ced6df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -21,12 +21,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MathHelper; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; import java.util.ArrayList; +import java.util.List; public class ItemGrowthRing extends ItemEnergy{ @@ -41,11 +42,11 @@ public class ItemGrowthRing extends ItemEnergy{ } EntityPlayer player = (EntityPlayer)entity; - ItemStack equipped = player.getCurrentEquippedItem(); + ItemStack equipped = player.getActiveItemStack(); int energyUse = 300; if(equipped != null && equipped == stack && this.getEnergyStored(stack) >= energyUse){ - ArrayList blocks = new ArrayList(); + List blocks = new ArrayList(); if(stack.getTagCompound() == null){ stack.setTagCompound(new NBTTagCompound()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index 0d4785dc2..a2cbe312d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -18,6 +18,9 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; import net.minecraft.util.WeightedRandom; import net.minecraft.world.World; @@ -28,7 +31,7 @@ public class ItemHairyBall extends ItemBase{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ ItemStack returnItem = this.getRandomReturnItem(); if(!player.inventory.addItemStackToInventory(returnItem)){ @@ -37,13 +40,15 @@ public class ItemHairyBall extends ItemBase{ player.worldObj.spawnEntityInWorld(entityItem); } stack.stackSize--; - world.playSoundAtEntity(player, "random.pop", 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); + + //TODO Sound + //world.playSoundAtEntity(player, "random.pop", 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); } - return stack; + return new ActionResult(EnumActionResult.SUCCESS, stack); } public ItemStack getRandomReturnItem(){ - return ((BallOfFurReturn)WeightedRandom.getRandomItem(Util.RANDOM, ActuallyAdditionsAPI.ballOfFurReturnItems)).returnItem.copy(); + return WeightedRandom.getRandomItem(Util.RANDOM, ActuallyAdditionsAPI.ballOfFurReturnItems).returnItem.copy(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index f64c2eea5..685695fb3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -16,12 +16,14 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheJams; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; 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.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -51,11 +53,12 @@ public class ItemJams extends ItemFoodBase{ return stack.getItemDamage() >= allJams.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allJams[stack.getItemDamage()].name; } - @Override + //TODO Color + /*@Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass){ return pass > 0 ? (stack.getItemDamage() >= allJams.length ? 0 : allJams[stack.getItemDamage()].color) : super.getColorFromItemStack(stack, pass); - } + }*/ @Override public EnumRarity getRarity(ItemStack stack){ @@ -71,18 +74,18 @@ public class ItemJams extends ItemFoodBase{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityPlayer player){ + public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); - if(!world.isRemote && stack.getItemDamage() < allJams.length){ - PotionEffect firstEffectToGet = new PotionEffect(allJams[stack.getItemDamage()].firstEffectToGet, 200); + if(player instanceof EntityPlayer && !world.isRemote && stack.getItemDamage() < allJams.length){ + PotionEffect firstEffectToGet = new PotionEffect(Potion.getPotionById(allJams[stack.getItemDamage()].firstEffectToGet), 200); player.addPotionEffect(firstEffectToGet); - PotionEffect secondEffectToGet = new PotionEffect(allJams[stack.getItemDamage()].secondEffectToGet, 600); + PotionEffect secondEffectToGet = new PotionEffect(Potion.getPotionById(allJams[stack.getItemDamage()].secondEffectToGet), 600); player.addPotionEffect(secondEffectToGet); ItemStack returnItem = new ItemStack(Items.glass_bottle); - if(!player.inventory.addItemStackToInventory(returnItem.copy())){ + if(!((EntityPlayer)player).inventory.addItemStackToInventory(returnItem.copy())){ EntityItem entityItem = new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, returnItem.copy()); entityItem.setPickupDelay(0); player.worldObj.spawnEntityInWorld(entityItem); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index ecaad022b..a7660d160 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -14,6 +14,7 @@ import com.google.common.collect.Multimap; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -39,9 +40,9 @@ public class ItemKnife extends ItemBase{ @SuppressWarnings("unchecked") @Override - public Multimap getAttributeModifiers(ItemStack stack){ - Multimap map = super.getAttributeModifiers(stack); - map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(itemModifierUUID, "Knife Modifier", 3, 0)); + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ + Multimap map = super.getAttributeModifiers(slot, stack); + map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Knife Modifier", 3, 0)); return map; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 18f914a88..d15bc65b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -20,10 +20,12 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -38,13 +40,13 @@ public class ItemLaserWrench extends ItemBase{ } @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing par7, float par8, float par9, float par10){ + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing par7, float par8, float par9, float par10){ if(!world.isRemote){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityLaserRelay){ if(ItemPhantomConnector.getStoredPosition(stack) == null){ ItemPhantomConnector.storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world); - player.addChatComponentMessage(new ChatComponentText(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.stored.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.stored.desc"))); } else{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); @@ -54,16 +56,17 @@ public class ItemLaserWrench extends ItemBase{ ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); - player.addChatComponentMessage(new ChatComponentText(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.connected.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.connected.desc"))); } else{ - player.addChatComponentMessage(new ChatComponentText(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.cantConnect.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.cantConnect.desc"))); ItemPhantomConnector.clearStorage(stack); } } + return EnumActionResult.SUCCESS; } } - return false; + return EnumActionResult.FAIL; } @Override @@ -88,7 +91,7 @@ public class ItemLaserWrench extends ItemBase{ list.add("X: "+coords.getX()); list.add("Y: "+coords.getY()); list.add("Z: "+coords.getZ()); - list.add(EnumChatFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".clearStorage.desc")); + list.add(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".clearStorage.desc")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 82ac810a9..32f9a300a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -15,13 +15,17 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockBush; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MathHelper; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import java.util.ArrayList; @@ -38,9 +42,9 @@ public class ItemLeafBlower extends ItemBase{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ - player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); - return stack; + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + player.setActiveHand(hand); + return new ActionResult(EnumActionResult.SUCCESS, stack); } @Override @@ -60,14 +64,15 @@ public class ItemLeafBlower extends ItemBase{ } @Override - public void onUsingTick(ItemStack stack, EntityPlayer player, int time){ + public void onUsingTick(ItemStack stack, EntityLivingBase player, int time){ if(!player.worldObj.isRemote){ if(time <= getMaxItemUseDuration(stack) && (this.isAdvanced || time%3 == 0)){ //Breaks the Blocks this.breakStuff(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)); //Plays a Minecart sounds (It really sounds like a Leaf Blower!) if(!ConfigValues.lessSound){ - player.worldObj.playSoundAtEntity(player, "minecart.base", 0.3F, 0.001F); + //TODO Fix sound + //player.worldObj.playSoundAtEntity(player, "minecart.base", 0.3F, 0.001F); } } } @@ -92,7 +97,7 @@ public class ItemLeafBlower extends ItemBase{ //The current Block to break BlockPos pos = new BlockPos(x+reachX, y+reachY, z+reachZ); Block block = PosUtil.getBlock(pos, world); - if(block != null && (block instanceof BlockBush || (this.isAdvanced && block.isLeaves(world, pos)))){ + if(block != null && (block instanceof BlockBush || (this.isAdvanced && block.isLeaves(world.getBlockState(pos), world, pos)))){ breakPositions.add(pos); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index 0f4422e89..6bf7110ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -16,8 +16,8 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.Vec3; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import java.util.ArrayList; @@ -35,13 +35,13 @@ public class ItemMagnetRing extends ItemEnergy{ if(!entity.isSneaking()){ //Get all the Items in the area int range = 5; - ArrayList items = (ArrayList)world.getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.fromBounds(entity.posX-range, entity.posY-range, entity.posZ-range, entity.posX+range, entity.posY+range, entity.posZ+range)); + ArrayList items = (ArrayList)world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(entity.posX-range, entity.posY-range, entity.posZ-range, entity.posX+range, entity.posY+range, entity.posZ+range)); if(!items.isEmpty()){ for(EntityItem item : items){ if(this.getEnergyStored(stack) >= energyUse){ //If the Item is near enough to get picked up //(So it doesn't bounce around until it notices itself..) - if(new Vec3(entity.posX, entity.posY, entity.posZ).distanceTo(new Vec3(item.posX, item.posY, item.posZ)) <= 1.5){ + if(new Vec3d(entity.posX, entity.posY, entity.posZ).distanceTo(new Vec3d(item.posX, item.posY, item.posZ)) <= 1.5){ item.onCollideWithPlayer((EntityPlayer)entity); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 6ae2a195e..02ee90452 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -21,10 +21,12 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.relauncher.Side; @@ -73,13 +75,13 @@ public class ItemPhantomConnector extends ItemBase{ tag.setInteger("XCoordOfTileStored", x); tag.setInteger("YCoordOfTileStored", y); tag.setInteger("ZCoordOfTileStored", z); - tag.setInteger("WorldOfTileStored", world.provider.getDimensionId()); + tag.setInteger("WorldOfTileStored", world.provider.getDimension()); stack.setTagCompound(tag); } @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing par7, float par8, float par9, float par10){ + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing par7, float par8, float par9, float par10){ if(!world.isRemote){ //Passing Data to Phantoms TileEntity tile = world.getTileEntity(pos); @@ -92,17 +94,17 @@ public class ItemPhantomConnector extends ItemBase{ ((TileEntityBase)tile).sendUpdate(); } clearStorage(stack); - player.addChatComponentMessage(new ChatComponentText(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connected.desc"))); - return true; + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connected.desc"))); + return EnumActionResult.SUCCESS; } - return false; + return EnumActionResult.FAIL; } } //Storing Connections storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world); - player.addChatComponentMessage(new ChatComponentText(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.stored.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.stored.desc"))); } - return true; + return EnumActionResult.SUCCESS; } public boolean checkHasConnection(ItemStack stack, EntityPlayer player, TileEntity tile){ @@ -113,7 +115,7 @@ public class ItemPhantomConnector extends ItemBase{ if(tile instanceof IPhantomTile){ ((IPhantomTile)tile).setBoundPosition(null); } - player.addChatComponentMessage(new ChatComponentText(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.unbound.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.unbound.desc"))); return false; } } @@ -140,7 +142,7 @@ public class ItemPhantomConnector extends ItemBase{ list.add("X: "+coords.getX()); list.add("Y: "+coords.getY()); list.add("Z: "+coords.getZ()); - list.add(EnumChatFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".clearStorage.desc")); + list.add(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".clearStorage.desc")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 5728b0a3b..abd721f01 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -21,6 +21,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; @@ -52,11 +53,12 @@ public class ItemPotionRing extends ItemBase{ return stack.getItemDamage() >= allRings.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allRings[stack.getItemDamage()].name; } - @Override + //TODO Color + /*@Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass){ return stack.getItemDamage() >= allRings.length ? 0 : allRings[stack.getItemDamage()].color; - } + }*/ @Override @SuppressWarnings("unchecked") @@ -66,17 +68,18 @@ public class ItemPotionRing extends ItemBase{ if(!world.isRemote && stack.getItemDamage() < allRings.length){ if(player instanceof EntityPlayer){ EntityPlayer thePlayer = (EntityPlayer)player; - ItemStack equippedStack = ((EntityPlayer)player).getCurrentEquippedItem(); + ItemStack equippedStack = ((EntityPlayer)player).getActiveItemStack(); ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()]; - if(!effect.needsWaitBeforeActivating || !thePlayer.isPotionActive(effect.effectID)){ + Potion potion = Potion.getPotionById(effect.effectID); + if(!effect.needsWaitBeforeActivating || !thePlayer.isPotionActive(potion)){ if(!((ItemPotionRing)stack.getItem()).isAdvanced){ if(equippedStack != null && stack == equippedStack){ - thePlayer.addPotionEffect(new PotionEffect(effect.effectID, effect.activeTime, effect.normalAmplifier, true, false)); + thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.normalAmplifier, true, false)); } } else{ - thePlayer.addPotionEffect(new PotionEffect(effect.effectID, effect.activeTime, effect.advancedAmplifier, true, false)); + thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.advancedAmplifier, true, false)); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 91f7f35a9..6b74c1b3a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -11,9 +11,13 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; import net.minecraft.world.World; public class ItemResonantRice extends ItemBase{ @@ -23,12 +27,12 @@ public class ItemResonantRice extends ItemBase{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ stack.stackSize--; world.createExplosion(null, player.posX, player.posY, player.posZ, 0.5F, true); } - return stack; + return new ActionResult<>(EnumActionResult.SUCCESS, stack); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index 22ff464e0..3faa54230 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -15,6 +15,9 @@ import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; import net.minecraft.world.World; public class ItemSolidifiedExperience extends ItemBase{ @@ -26,7 +29,7 @@ public class ItemSolidifiedExperience extends ItemBase{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ if(!player.isSneaking()){ world.spawnEntityInWorld(new EntityXPOrb(world, player.posX+0.5, player.posY+0.5, player.posZ+0.5, SOLID_XP_AMOUNT)); @@ -41,7 +44,7 @@ public class ItemSolidifiedExperience extends ItemBase{ } } } - return stack; + return new ActionResult(EnumActionResult.SUCCESS, stack); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index f22a94cca..043d24e97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -18,8 +18,11 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; public class ItemTeleStaff extends ItemEnergy{ @@ -29,33 +32,35 @@ public class ItemTeleStaff extends ItemEnergy{ } @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ if(this.getWaitTime(stack) <= 0){ - MovingObjectPosition pos = WorldUtil.getNearestPositionWithAir(world, player, 100); - if(pos != null && (pos.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK || player.rotationPitch >= -5)){ + RayTraceResult pos = WorldUtil.getNearestPositionWithAir(world, player, 100); + if(pos != null && (pos.typeOfHit == RayTraceResult.Type.BLOCK || player.rotationPitch >= -5)){ int side = pos.sideHit.ordinal(); if(side != -1){ double x = pos.hitVec.xCoord-(side == 4 ? 0.5 : 0)+(side == 5 ? 0.5 : 0); double y = pos.hitVec.yCoord-(side == 0 ? 2.0 : 0)+(side == 1 ? 0.5 : 0); double z = pos.hitVec.zCoord-(side == 2 ? 0.5 : 0)+(side == 3 ? 0.5 : 0); int baseUse = 200; - int use = baseUse+(int)(baseUse*pos.hitVec.distanceTo(new Vec3(player.posX, player.posY+(player.getEyeHeight()-player.getDefaultEyeHeight()), player.posZ))); + int use = baseUse+(int)(baseUse*pos.hitVec.distanceTo(new Vec3d(player.posX, player.posY+(player.getEyeHeight()-player.getDefaultEyeHeight()), player.posZ))); if(this.getEnergyStored(stack) >= use){ ((EntityPlayerMP)player).playerNetServerHandler.setPlayerLocation(x, y, z, player.rotationYaw, player.rotationPitch); - player.mountEntity(null); - world.playSoundAtEntity(player, "mob.endermen.portal", 1.0F, 1.0F); + player.dismountRidingEntity(); + //TODO Fix sound + //world.playSound(player, "mob.endermen.portal", 1.0F, 1.0F); if(!player.capabilities.isCreativeMode){ this.extractEnergy(stack, use, false); this.setWaitTime(stack, 50); } + return ActionResult.newResult(EnumActionResult.SUCCESS, stack); } } } } } - player.swingItem(); - return stack; + player.swingArm(hand); + return ActionResult.newResult(EnumActionResult.FAIL, stack); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index 4609a552b..a2bc98d16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -19,8 +19,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; -import net.minecraft.util.MathHelper; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; public class ItemWaterRemovalRing extends ItemEnergy{ @@ -36,7 +36,7 @@ public class ItemWaterRemovalRing extends ItemEnergy{ } EntityPlayer player = (EntityPlayer)entity; - ItemStack equipped = player.getCurrentEquippedItem(); + ItemStack equipped = player.getActiveItemStack(); int energyUse = 350; if(equipped != null && equipped == stack && this.getEnergyStored(stack) >= energyUse){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java index 1ecddacd8..28e98caa4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java @@ -23,9 +23,11 @@ import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; -import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -50,7 +52,7 @@ public class ItemAllToolAA extends ItemTool{ } public ItemAllToolAA(ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity, int color){ - super(4.0F, toolMat, new HashSet()); + super(4.0F, -2F, toolMat, new HashSet()); this.repairItem = repairItem; this.name = unlocalizedName; @@ -82,15 +84,16 @@ public class ItemAllToolAA extends ItemTool{ } @Override - public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ){ - return Items.iron_hoe.onItemUse(stack, playerIn, worldIn, pos, side, hitX, hitY, hitZ); + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ + return Items.iron_hoe.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); } - @Override + //TODO Fix ItemStack color + /*@Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass){ - return pass > 0 ? this.color : super.getColorFromItemStack(stack, pass); - } + return pass > 0 ? this.color : super.(stack, pass); + }*/ @Override public EnumRarity getRarity(ItemStack stack){ @@ -98,8 +101,9 @@ public class ItemAllToolAA extends ItemTool{ } @Override - public boolean canHarvestBlock(Block block, ItemStack stack){ - return this.hasExtraWhitelist(block) || block.getMaterial().isToolNotRequired() || (block == Blocks.snow_layer || block == Blocks.snow || (block == Blocks.obsidian ? this.toolMaterial.getHarvestLevel() >= 3 : (block != Blocks.diamond_block && block != Blocks.diamond_ore ? (block != Blocks.emerald_ore && block != Blocks.emerald_block ? (block != Blocks.gold_block && block != Blocks.gold_ore ? (block != Blocks.iron_block && block != Blocks.iron_ore ? (block != Blocks.lapis_block && block != Blocks.lapis_ore ? (block != Blocks.redstone_ore && block != Blocks.lit_redstone_ore ? (block.getMaterial() == Material.rock || (block.getMaterial() == Material.iron || block.getMaterial() == Material.anvil)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); + public boolean canHarvestBlock(IBlockState state, ItemStack stack){ + + return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getMaterial(state).isToolNotRequired() || (state.getBlock() == Blocks.snow_layer || state.getBlock()== Blocks.snow || (state.getBlock()== Blocks.obsidian ? this.toolMaterial.getHarvestLevel() >= 3 : (state.getBlock()!= Blocks.diamond_block && state.getBlock()!= Blocks.diamond_ore ? (state.getBlock()!= Blocks.emerald_ore && state.getBlock()!= Blocks.emerald_block? (state.getBlock()!= Blocks.gold_block&& state.getBlock()!= Blocks.gold_ore ? (state.getBlock()!= Blocks.iron_block&& state.getBlock()!= Blocks.iron_ore ? (state.getBlock()!= Blocks.lapis_block&& state.getBlock()!= Blocks.lapis_ore ? (state.getBlock()!= Blocks.redstone_ore && state.getBlock()!= Blocks.lit_redstone_ore ? (state.getBlock().getMaterial(state) == Material.rock || (state.getBlock().getMaterial(state) == Material.iron || state.getBlock().getMaterial(state) == Material.anvil)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); } private boolean hasExtraWhitelist(Block block){ @@ -140,7 +144,7 @@ public class ItemAllToolAA extends ItemTool{ } @Override - public float getDigSpeed(ItemStack stack, IBlockState state){ + public float getStrVsBlock(ItemStack stack, IBlockState state){ return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getHarvestTool(state) == null || state.getBlock().getHarvestTool(state).isEmpty() || this.getToolClasses(stack).contains(state.getBlock().getHarvestTool(state)) ? this.efficiencyOnProperMaterial : 1.0F; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index fe671e19e..abeda73f7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -11,8 +11,10 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnervator; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -24,12 +26,12 @@ public class ItemArmorAA extends ItemArmor{ private String name; private EnumRarity rarity; - public ItemArmorAA(String name, ArmorMaterial material, int type, ItemStack repairItem, String textureBase){ - this(name, material, type, repairItem, textureBase, EnumRarity.RARE); + public ItemArmorAA(String name, ArmorMaterial material, int type, ItemStack repairItem){ + this(name, material, type, repairItem, EnumRarity.RARE); } - public ItemArmorAA(String name, ArmorMaterial material, int type, ItemStack repairItem, String textureBase, EnumRarity rarity){ - super(material, 0, type); + public ItemArmorAA(String name, ArmorMaterial material, int type, ItemStack repairItem, EnumRarity rarity){ + super(material, 0, ContainerEnervator.ARMOR_SLOTS[type]); this.repairItem = repairItem; this.name = name; this.rarity = rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 75ce76adc..5c663ecc5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -21,8 +21,8 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemSeeds; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; public class ItemSeed extends ItemSeeds{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 5bab22e1e..df637be67 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -17,12 +17,13 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import java.util.ArrayList; @@ -57,7 +58,7 @@ public class LensColor extends Lens{ @SuppressWarnings("unchecked") @Override - public boolean invoke(BlockPos hitBlock, IAtomicReconstructor tile){ + public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ if(hitBlock != null){ if(Util.arrayContains(CONVERTABLE_BLOCKS, PosUtil.getBlock(hitBlock, tile.getWorldObject())) >= 0 && tile.getEnergy() >= ENERGY_USE){ int meta = PosUtil.getMetadata(hitBlock, tile.getWorldObject()); @@ -70,7 +71,7 @@ public class LensColor extends Lens{ tile.extractEnergy(ENERGY_USE); } - ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.fromBounds(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); + ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); for(EntityItem item : items){ if(!item.isDead && item.getEntityItem() != null && tile.getEnergy() >= ENERGY_USE){ if(Util.arrayContains(CONVERTABLE_BLOCKS, item.getEntityItem().getItem()) >= 0 || Util.arrayContains(CONVERTABLE_BLOCKS, Block.getBlockFromItem(item.getEntityItem().getItem())) >= 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java index 35e3166b2..e7151d65e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java @@ -14,9 +14,10 @@ import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.misc.DamageSources; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import java.util.ArrayList; @@ -24,18 +25,18 @@ public class LensDeath extends Lens{ @SuppressWarnings("unchecked") @Override - public boolean invoke(BlockPos hitBlock, IAtomicReconstructor tile){ + public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ int use = 150; //Per Block (because it doesn't only activate when something is hit like the other lenses!) if(tile.getEnergy() >= use){ tile.extractEnergy(use); - ArrayList entities = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.fromBounds(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); + ArrayList entities = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); for(EntityLivingBase entity : entities){ entity.attackEntityFrom(DamageSources.DAMAGE_ATOMIC_RECONSTRUCTOR, 20F); } } - return hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(tile.getWorldObject(), hitBlock); + return hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java index 83b556617..96cccebea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java @@ -13,13 +13,14 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import net.minecraft.util.BlockPos; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; public class LensDetonation extends Lens{ @Override - public boolean invoke(BlockPos hitBlock, IAtomicReconstructor tile){ - if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(tile.getWorldObject(), hitBlock)){ + public boolean invoke(IBlockState state, BlockPos hitBlock, IAtomicReconstructor tile){ + if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(state, tile.getWorldObject(), hitBlock)){ int use = 250000; if(tile.getEnergy() >= use){ tile.getWorldObject().newExplosion(null, hitBlock.getX()+0.5, hitBlock.getY()+0.5, hitBlock.getZ()+0.5, 10F, true, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java index c3c277920..e751cb020 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java @@ -17,11 +17,12 @@ import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import java.util.ArrayList; import java.util.List; @@ -30,8 +31,8 @@ public class LensNone extends Lens{ @SuppressWarnings("unchecked") @Override - public boolean invoke(BlockPos hitBlock, IAtomicReconstructor tile){ - if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(tile.getWorldObject(), hitBlock)){ + public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ + if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock)){ int range = 2; //Converting the Blocks @@ -65,7 +66,7 @@ public class LensNone extends Lens{ } //Converting the Items - ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.fromBounds(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); + ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); for(EntityItem item : items){ ItemStack stack = item.getEntityItem(); if(!item.isDead && stack != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java index e134e8a90..e1998c342 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java @@ -12,28 +12,29 @@ package de.ellpeck.actuallyadditions.mod.items.metalists; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; public enum ThePotionRings{ - SPEED(Potion.moveSpeed.getName(), 8171462, Potion.moveSpeed.getId(), 0, 1, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.sugar)), + SPEED(MobEffects.moveSpeed.getName(), 8171462, MobEffects.moveSpeed, 0, 1, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.sugar)), //Slowness - HASTE(Potion.digSpeed.getName(), 14270531, Potion.digSpeed.getId(), 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.repeater)), + HASTE(MobEffects.digSpeed.getName(), 14270531, MobEffects.digSpeed, 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.repeater)), //Mining Fatigue - STRENGTH(Potion.damageBoost.getName(), 9643043, Potion.damageBoost.getId(), 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Items.blaze_powder)), + STRENGTH(MobEffects.damageBoost.getName(), 9643043, MobEffects.damageBoost, 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Items.blaze_powder)), //Health (Not Happening) //Damage - JUMP_BOOST(Potion.jump.getName(), 7889559, Potion.jump.getId(), 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Blocks.piston)), + JUMP_BOOST(MobEffects.jump.getName(), 7889559, MobEffects.jump, 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Blocks.piston)), //Nausea - REGEN(Potion.regeneration.getName(), 13458603, Potion.regeneration.getId(), 0, 1, 50, true, EnumRarity.RARE, new ItemStack(Items.ghast_tear)), - RESISTANCE(Potion.resistance.getName(), 10044730, Potion.resistance.getId(), 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.slime_ball)), - FIRE_RESISTANCE(Potion.fireResistance.getName(), 14981690, Potion.fireResistance.getId(), 0, 0, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.magma_cream)), - WATER_BREATHING(Potion.waterBreathing.getName(), 3035801, Potion.waterBreathing.getId(), 0, 0, 10, false, EnumRarity.RARE, new ItemStack(Items.fish, 1, 3)), - INVISIBILITY(Potion.invisibility.getName(), 8356754, Potion.invisibility.getId(), 0, 0, 10, false, EnumRarity.EPIC, new ItemStack(Items.fermented_spider_eye)), + REGEN(MobEffects.regeneration.getName(), 13458603, MobEffects.regeneration, 0, 1, 50, true, EnumRarity.RARE, new ItemStack(Items.ghast_tear)), + RESISTANCE(MobEffects.resistance.getName(), 10044730, MobEffects.resistance, 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.slime_ball)), + FIRE_RESISTANCE(MobEffects.fireResistance.getName(), 14981690, MobEffects.fireResistance, 0, 0, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.magma_cream)), + WATER_BREATHING(MobEffects.waterBreathing.getName(), 3035801, MobEffects.waterBreathing, 0, 0, 10, false, EnumRarity.RARE, new ItemStack(Items.fish, 1, 3)), + INVISIBILITY(MobEffects.invisibility.getName(), 8356754, MobEffects.invisibility, 0, 0, 10, false, EnumRarity.EPIC, new ItemStack(Items.fermented_spider_eye)), //Blindness - NIGHT_VISION(Potion.nightVision.getName(), 2039713, Potion.nightVision.getId(), 0, 0, 300, false, EnumRarity.RARE, new ItemStack(Items.golden_carrot)); + NIGHT_VISION(MobEffects.nightVision.getName(), 2039713, MobEffects.nightVision, 0, 0, 300, false, EnumRarity.RARE, new ItemStack(Items.golden_carrot)); //Hunger //Weakness //Poison @@ -51,11 +52,11 @@ public enum ThePotionRings{ public final boolean needsWaitBeforeActivating; public final ItemStack craftingItem; - ThePotionRings(String name, int color, int effectID, int normalAmplifier, int advancedAmplifier, int activeTime, boolean needsWaitBeforeActivating, EnumRarity rarity, ItemStack craftingItem){ + ThePotionRings(String name, int color, Potion effect, int normalAmplifier, int advancedAmplifier, int activeTime, boolean needsWaitBeforeActivating, EnumRarity rarity, ItemStack craftingItem){ this.name = name; this.color = color; this.rarity = rarity; - this.effectID = effectID; + this.effectID = Potion.getIdFromPotion(effect); this.normalAmplifier = normalAmplifier; this.advancedAmplifier = advancedAmplifier; this.activeTime = activeTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index 8c7f099c3..bdba5998f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -18,7 +18,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; @@ -62,7 +62,7 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ - List header = minecraft.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.header").replaceAll("", EnumChatFormatting.BLUE+"").replaceAll("", EnumChatFormatting.BLACK+""), 150); + List header = minecraft.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.header").replaceAll("", TextFormatting.BLUE+"").replaceAll("", TextFormatting.BLACK+""), 150); for(int i = 0; i < header.size(); i++){ minecraft.fontRendererObj.drawString((String)header.get(i), 0, 17+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); } @@ -70,12 +70,12 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe int maxLines = 4; IBookletChapter chapter = this.thePage.getChapter(); String aText = (chapter.getPages()[0] instanceof PagePicture && chapter.getPages().length > 1 ? chapter.getPages()[1] : chapter.getPages()[0]).getText(); - List text = minecraft.fontRendererObj.listFormattedStringToWidth(aText != null ? aText : EnumChatFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.noText"), 150); + List text = minecraft.fontRendererObj.listFormattedStringToWidth(aText != null ? aText : TextFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.noText"), 150); for(int i = 0; i < Math.min(maxLines, text.size()); i++){ - minecraft.fontRendererObj.drawString(text.get(i)+(i == maxLines-1 && text.size() > maxLines ? EnumChatFormatting.RESET+""+EnumChatFormatting.BLACK+"..." : ""), 0, 16+25+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); + minecraft.fontRendererObj.drawString(text.get(i)+(i == maxLines-1 && text.size() > maxLines ? TextFormatting.RESET+""+TextFormatting.BLACK+"..." : ""), 0, 16+25+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); } - minecraft.fontRendererObj.drawString(EnumChatFormatting.ITALIC+chapter.getLocalizedName(), 25, 85, 0, false); - minecraft.fontRendererObj.drawString(EnumChatFormatting.ITALIC+"Page "+this.thePage.getID(), 25, 95, 0, false); + minecraft.fontRendererObj.drawString(TextFormatting.ITALIC+chapter.getLocalizedName(), 25, 85, 0, false); + minecraft.fontRendererObj.drawString(TextFormatting.ITALIC+"Page "+this.thePage.getID(), 25, 95, 0, false); this.updateButton(minecraft, mouseX, mouseY); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index 9a30f371d..eedb4beb6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -11,7 +11,9 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; public class InitArmorMaterials{ @@ -30,15 +32,15 @@ public class InitArmorMaterials{ public static void init(){ ModUtil.LOGGER.info("Initializing Armor Materials..."); - armorMaterialEmerald = EnumHelper.addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID_LOWER+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15); - armorMaterialObsidian = EnumHelper.addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID_LOWER+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10); - armorMaterialQuartz = EnumHelper.addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID_LOWER+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8); + armorMaterialEmerald = EnumHelper.addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID_LOWER+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.item_armor_equip_generic); + armorMaterialObsidian = EnumHelper.addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID_LOWER+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.item_armor_equip_generic); + armorMaterialQuartz = EnumHelper.addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID_LOWER+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.item_armor_equip_generic); - armorMaterialCrystalRed = EnumHelper.addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID_LOWER+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9); - armorMaterialCrystalBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID_LOWER+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10); - armorMaterialCrystalLightBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID_LOWER+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12); - armorMaterialCrystalBlack = EnumHelper.addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID_LOWER+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13); - armorMaterialCrystalGreen = EnumHelper.addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID_LOWER+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18); - armorMaterialCrystalWhite = EnumHelper.addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID_LOWER+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11); + armorMaterialCrystalRed = EnumHelper.addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID_LOWER+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.item_armor_equip_generic); + armorMaterialCrystalBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID_LOWER+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.item_armor_equip_generic); + armorMaterialCrystalLightBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID_LOWER+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.item_armor_equip_generic); + armorMaterialCrystalBlack = EnumHelper.addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID_LOWER+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.item_armor_equip_generic); + armorMaterialCrystalGreen = EnumHelper.addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID_LOWER+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.item_armor_equip_generic); + armorMaterialCrystalWhite = EnumHelper.addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID_LOWER+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.item_armor_equip_generic); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 1b06219c2..01158553b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -14,9 +14,9 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.ChatComponentText; import net.minecraft.util.DamageSource; -import net.minecraft.util.IChatComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; public class DamageSources extends DamageSource{ @@ -30,8 +30,8 @@ public class DamageSources extends DamageSource{ } @Override - public IChatComponent getDeathMessage(EntityLivingBase entity){ + public ITextComponent getDeathMessage(EntityLivingBase entity){ String locTag = "death."+ModUtil.MOD_ID_LOWER+"."+this.damageType+"."+(Util.RANDOM.nextInt(this.messageCount)+1); - return new ChatComponentText(StringUtil.localizeFormatted(locTag, entity.getName())); + return new TextComponentString(StringUtil.localizeFormatted(locTag, entity.getName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java index 7d45c1066..68d948301 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.misc; +import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; @@ -18,8 +19,8 @@ import net.minecraft.dispenser.IBlockSource; import net.minecraft.init.Items; import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; public class DispenserHandlerEmptyBucket extends BehaviorDefaultDispenseItem{ @@ -31,7 +32,7 @@ public class DispenserHandlerEmptyBucket extends BehaviorDefaultDispenseItem{ int z = source.getBlockTileEntity().getPos().getZ()+facing.getFrontOffsetZ(); BlockPos pos = new BlockPos(x, y, z); - if(source.getWorld().isAirBlock(pos) && !PosUtil.getMaterial(pos, source.getWorld()).isSolid() && ((ItemBucket)bucket.getItem()).tryPlaceContainedLiquid(source.getWorld(), pos)){ + if(source.getWorld().isAirBlock(pos) && !PosUtil.getMaterial(pos, source.getWorld()).isSolid() && ((ItemBucket)bucket.getItem()).tryPlaceContainedLiquid(FakePlayerUtil.getFakePlayer(source.getWorld()), source.getWorld(), pos)){ return new ItemStack(Items.bucket); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index 09b36adb5..31f093b83 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -16,8 +16,8 @@ import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.dispenser.IBlockSource; import net.minecraft.item.ItemDye; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; public class DispenserHandlerFertilize extends BehaviorDefaultDispenseItem{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java index daf0fad2e..b13040b75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java @@ -20,8 +20,8 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityDispenser; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.IFluidBlock; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java index 6a181d2fb..50699a25f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java @@ -16,36 +16,37 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandomChestContent; -import net.minecraftforge.common.ChestGenHooks; +//TODO Fix dungeon loot (oh god) public class DungeonLoot{ public static void init(){ if(ConfigBoolValues.DUNGEON_LOOT.isEnabled()){ ModUtil.LOGGER.info("Initializing Dungeon Loot..."); - ChestGenHooks dungeon = ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST); + /*ChestGenHooks dungeon = ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST); ChestGenHooks mineshaft = ChestGenHooks.getInfo(ChestGenHooks.MINESHAFT_CORRIDOR); ChestGenHooks blacksmith = ChestGenHooks.getInfo(ChestGenHooks.VILLAGE_BLACKSMITH); for(int i = 0; i < TheCrystals.values().length; i++){ - WeightedRandomChestContent item = new WeightedRandomChestContent(new ItemStack(InitItems.itemCrystal, 1, i), 2, 4, 5); - WeightedRandomChestContent block = new WeightedRandomChestContent(new ItemStack(InitBlocks.blockCrystal, 1, i), 1, 3, 1); + WeightedRandomChestContent item = new WeightedRandomChestContent(InitItems.itemCrystal, i, 2, 4, 5); + WeightedRandomChestContent block = new WeightedRandomChestContent(Item.getItemFromBlock(InitBlocks.blockCrystal), i, 1, 3, 1); dungeon.addItem(item); dungeon.addItem(block); mineshaft.addItem(item); mineshaft.addItem(block); } - WeightedRandomChestContent drillCore = new WeightedRandomChestContent(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DRILL_CORE.ordinal()), 1, 1, 3); + WeightedRandomChestContent drillCore = new WeightedRandomChestContent(InitItems.itemMisc, TheMiscItems.DRILL_CORE.ordinal(), 1, 1, 3); dungeon.addItem(drillCore); mineshaft.addItem(drillCore); blacksmith.addItem(drillCore); - WeightedRandomChestContent quartz = new WeightedRandomChestContent(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 3, 4, 30); + WeightedRandomChestContent quartz = new WeightedRandomChestContent(InitItems.itemMisc, TheMiscItems.QUARTZ.ordinal(), 3, 4, 30); dungeon.addItem(quartz); - blacksmith.addItem(quartz); + blacksmith.addItem(quartz);*/ } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index fec5a2ad4..60bb021d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -19,8 +19,8 @@ import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class LaserRelayConnectionHandler{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index 95a7cb4f2..b551acbb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -33,8 +33,7 @@ public class WorldData extends WorldSavedData{ } } - public static void init(){ - MinecraftServer server = MinecraftServer.getServer(); + public static void init(MinecraftServer server){ if(server != null){ World world = server.getEntityWorld(); if(!world.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java index 7b4909c58..01c2d75f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java @@ -20,7 +20,7 @@ import net.minecraft.entity.player.EnumPlayerModelParts; import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import net.minecraft.util.Vec3; +import net.minecraft.util.math.Vec3d; import java.util.Calendar; @@ -50,8 +50,8 @@ public class RenderSpecial{ GlStateManager.pushMatrix(); - Vec3 currentPos = Minecraft.getMinecraft().thePlayer.getPositionEyes(partialTicks); - Vec3 playerPos = player.getPositionEyes(partialTicks); + Vec3d currentPos = Minecraft.getMinecraft().thePlayer.getPositionEyes(partialTicks); + Vec3d playerPos = player.getPositionEyes(partialTicks); GlStateManager.translate(playerPos.xCoord-currentPos.xCoord, playerPos.yCoord-currentPos.yCoord-(player.isSneaking() || Minecraft.getMinecraft().thePlayer.isSneaking() ? 0.125D : 0D), playerPos.zCoord-currentPos.zCoord); GlStateManager.translate(0D, 2.435D+offsetUp, 0D); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index f61ebfe3b..a31c86df7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.network; import de.ellpeck.actuallyadditions.mod.misc.EntityColoredParticleFX; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; -import net.minecraft.util.Vec3; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; @@ -58,7 +58,7 @@ public class PacketParticle implements IMessage{ int difX = startX-endX; int difY = startY-endY; int difZ = startZ-endZ; - double distance = new Vec3(startX, startY, startZ).distanceTo(new Vec3(endX, endY, endZ)); + double distance = new Vec3d(startX, startY, startZ).distanceTo(new Vec3d(endX, endY, endZ)); for(int times = 0; times < particleAmount/2; times++){ for(double i = 0; i <= 1; i += 1/(distance*particleAmount)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java index d515af4ba..b3cab5ce3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java @@ -17,7 +17,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java index bbe43d312..017310db8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java @@ -14,7 +14,7 @@ package de.ellpeck.actuallyadditions.mod.network.gui; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; @@ -39,7 +39,7 @@ public class PacketGuiButton implements IMessage{ this.tileX = x; this.tileY = y; this.tileZ = z; - this.worldID = world.provider.getDimensionId(); + this.worldID = world.provider.getDimension(); this.buttonID = buttonID; this.playerID = player.getEntityId(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java index 1be9ea5a8..37f9d162f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java @@ -14,7 +14,7 @@ package de.ellpeck.actuallyadditions.mod.network.gui; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; @@ -40,7 +40,7 @@ public class PacketGuiNumber implements IMessage{ this.tileX = x; this.tileY = y; this.tileZ = z; - this.worldID = world.provider.getDimensionId(); + this.worldID = world.provider.getDimension(); this.text = text; this.textID = textID; this.playerID = player.getEntityId(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java index d48071826..5db75eb07 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java @@ -14,7 +14,7 @@ package de.ellpeck.actuallyadditions.mod.network.gui; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; @@ -40,7 +40,7 @@ public class PacketGuiString implements IMessage{ this.tileX = x; this.tileY = y; this.tileZ = z; - this.worldID = world.provider.getDimensionId(); + this.worldID = world.provider.getDimension(); this.text = text; this.textID = textID; this.playerID = player.getEntityId(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 856d74729..9166a2e12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -31,11 +31,11 @@ import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; -import net.minecraft.client.resources.model.ModelBakery; -import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index c6bf6c649..9eb93775d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -24,8 +24,8 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; @@ -98,7 +98,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple for(int i = 0; i < distance; i++){ BlockPos hitBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); - if(currentLens.invoke(hitBlock, this)){ + if(currentLens.invoke(this.worldObj.getBlockState(hitBlock), hitBlock, this)){ this.shootLaser(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); break; } @@ -120,9 +120,10 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ if(!ConfigValues.lessSound){ - this.worldObj.playSoundEffect(this.getX(), this.getY(), this.getZ(), ModUtil.MOD_ID_LOWER+":reconstructor", 0.35F, 1.0F); + //TODO Fix sound + //this.worldObj.playSoundEffect(this.getX(), this.getY(), this.getZ(), ModUtil.MOD_ID_LOWER+":reconstructor", 0.35F, 1.0F); } - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimensionId(), this.getX(), this.getY(), this.getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 5ee48df56..90f22ba4a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -18,10 +18,10 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.BlockPos; import net.minecraft.util.ITickable; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -95,7 +95,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public final Packet getDescriptionPacket(){ NBTTagCompound compound = this.getSyncCompound(); if(compound != null){ - return new S35PacketUpdateTileEntity(this.pos, 3, compound); + return new SPacketUpdateTileEntity(this.pos, 3, compound); } else{ return null; @@ -103,7 +103,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } @Override - public final void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt){ + public final void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt){ if(pkt != null){ this.receiveSyncCompound(pkt.getNbtCompound()); } @@ -161,6 +161,6 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } public final void sendUpdate(){ - PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(this), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimensionId(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(this), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 56ece8b7c..29020d186 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -16,10 +16,11 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import java.util.ArrayList; @@ -80,14 +81,14 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, 0); if(coordsBlock != null){ Block blockToBreak = PosUtil.getBlock(coordsBlock, worldObj); - if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(worldObj, coordsBlock) > -1.0F){ + IBlockState stateToBreak = worldObj.getBlockState(coordsBlock); + if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(stateToBreak, worldObj, coordsBlock) > -1.0F){ ArrayList drops = new ArrayList(); - int meta = PosUtil.getMetadata(coordsBlock, worldObj); - drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock, worldObj.getBlockState(coordsBlock), 0)); + drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock, stateToBreak, 0)); if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(worldObj.getBlockState(coordsBlock))); + worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); } WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); WorldUtil.addToInventory(this, drops, true, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 82652e39c..a751666b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -135,7 +135,8 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements if(this.slots[SLOT_INPUT] != null && this.slots[SLOT_INPUT].getItem() == InitItems.itemMisc && this.slots[SLOT_INPUT].getItemDamage() == TheMiscItems.CUP.ordinal() && this.slots[SLOT_OUTPUT] == null && this.coffeeCacheAmount >= CACHE_USE && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == FluidRegistry.WATER && this.tank.getFluidAmount() >= WATER_USE){ if(this.storage.getEnergyStored() >= ENERGY_USED){ if(this.brewTime%30 == 0 && !ConfigValues.lessSound){ - this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID_LOWER+":coffeeMachine", 0.35F, 1.0F); + //TODO Fix sound + //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID_LOWER+":coffeeMachine", 0.35F, 1.0F); } this.brewTime++; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index ebd6d63f2..9217ad965 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -19,8 +19,8 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockAir; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -85,8 +85,8 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, pos, i); if(coordsBlock != null){ Block blockToBreak = PosUtil.getBlock(coordsBlock, worldObj); - if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(worldObj, pos) > -1.0F){ - ArrayList drops = new ArrayList(); + if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(worldObj.getBlockState(coordsBlock), worldObj, pos) > -1.0F){ + ArrayList drops = new ArrayList(); drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock, worldObj.getBlockState(coordsBlock), 0)); if(WorldUtil.addToInventory(this, drops, false, true)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index 3b42009d9..6530c4481 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -14,9 +14,9 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -65,7 +65,7 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ if(!worldObj.isRemote){ boolean theFlag = this.currentTimer > 0; int range = 5; - List animals = worldObj.getEntitiesWithinAABB(EntityAnimal.class, AxisAlignedBB.fromBounds(this.pos.getX()-range, this.pos.getY()-range, this.pos.getZ()-range, this.pos.getX()+range, this.pos.getY()+range, this.pos.getZ()+range)); + List animals = worldObj.getEntitiesWithinAABB(EntityAnimal.class, new AxisAlignedBB(this.pos.getX()-range, this.pos.getY()-range, this.pos.getZ()-range, this.pos.getX()+range, this.pos.getY()+range, this.pos.getZ()+range)); if(animals != null){ this.currentAnimalAmount = animals.size(); if(this.currentAnimalAmount >= 2){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index 57707f626..ad28167ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -20,7 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; -import net.minecraft.util.MathHelper; +import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index e8cbcec01..96880d93d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -17,13 +17,17 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemFishingRod; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.FishingHooks; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.loot.LootContext; +import net.minecraft.world.storage.loot.LootTableList; import java.util.ArrayList; +import java.util.List; public class TileEntityFishingNet extends TileEntityBase{ @@ -50,17 +54,20 @@ public class TileEntityFishingNet extends TileEntityBase{ if(this.timeUntilNextDrop > 0){ this.timeUntilNextDrop--; if(timeUntilNextDrop <= 0){ - ItemStack fishable = FishingHooks.getRandomFishable(Util.RANDOM, Util.RANDOM.nextFloat()); - TileEntity tile = worldObj.getTileEntity(PosUtil.offset(pos, 0, 1, 0)); - if(tile != null && tile instanceof IInventory){ - ArrayList list = new ArrayList(); - list.add(fishable); - WorldUtil.addToInventory((IInventory)tile, list, EnumFacing.DOWN, true, false); - } - else{ - EntityItem item = new EntityItem(worldObj, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, fishable); - item.lifespan = 2000; - worldObj.spawnEntityInWorld(item); + LootContext.Builder builder = new LootContext.Builder((WorldServer)this.worldObj); + List fishables = this.worldObj.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING).generateLootForPools(Util.RANDOM, builder.build()); + for(ItemStack fishable : fishables){ + TileEntity tile = worldObj.getTileEntity(PosUtil.offset(pos, 0, 1, 0)); + if(tile != null && tile instanceof IInventory){ + ArrayList list = new ArrayList(); + list.add(fishable); + WorldUtil.addToInventory((IInventory)tile, list, EnumFacing.DOWN, true, false); + } + else{ + EntityItem item = new EntityItem(worldObj, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, fishable); + item.lifespan = 2000; + worldObj.spawnEntityInWorld(item); + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index ca810aac3..f43a1fff0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -17,8 +17,8 @@ import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 213ec304e..2bc007c45 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -15,8 +15,8 @@ import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -82,7 +82,7 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro public boolean hasBlockAbove(){ for(int y = 1; y <= worldObj.getHeight(); y++){ BlockPos offset = PosUtil.offset(this.pos, 0, y, 0); - if(!PosUtil.getBlock(offset, worldObj).isAir(worldObj, offset)){ + if(!PosUtil.getBlock(offset, worldObj).isAir(worldObj.getBlockState(offset), worldObj, offset)){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index 5d0cb8ace..108bec22c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -17,7 +17,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockGrass; import net.minecraft.block.IGrowable; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.IPlantable; public class TileEntityGreenhouseGlass extends TileEntityBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 90d944eeb..1ed649db8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -164,7 +164,8 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } if(shouldPlaySound && !ConfigValues.lessSound){ - this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID_LOWER+":crusher", 0.25F, 1.0F); + //TODO Fix sound + //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID_LOWER+":crusher", 0.25F, 1.0F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 7f99db7ab..892bad291 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -18,8 +18,8 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -54,7 +54,7 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr BlockPos coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionBySidesInOrder(i), this.pos, 0); if(coords != null){ Block block = PosUtil.getBlock(coords, worldObj); - if(block != null && block.getMaterial() == Material.lava && PosUtil.getMetadata(coords, worldObj) == 0){ + if(block != null && block.getMaterial(worldObj.getBlockState(coords)) == Material.lava && PosUtil.getMetadata(coords, worldObj) == 0){ blocksAround.add(i); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 31fef578f..eaeb8c2b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -17,9 +17,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumFacing; -import net.minecraft.util.IChatComponent; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; public abstract class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ @@ -199,8 +199,8 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } @Override - public IChatComponent getDisplayName(){ - return new ChatComponentText(StringUtil.localize(this.getName())); + public ITextComponent getDisplayName(){ + return new TextComponentString(StringUtil.localize(this.getName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 976991cc0..aea665406 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -21,8 +21,8 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index b0ff839a3..f86e972ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -18,8 +18,8 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index ed5a5bf1d..a6be2af3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -19,14 +19,15 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.Collections; +import java.util.List; public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyProvider, IEnergySaver, IEnergyDisplay{ @@ -59,14 +60,14 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr this.nextUseCounter = 0; if(ENERGY_PRODUCED <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored()){ - ArrayList breakPositions = new ArrayList(); + List breakPositions = new ArrayList(); for(int reachX = -RANGE; reachX < RANGE+1; reachX++){ for(int reachZ = -RANGE; reachZ < RANGE+1; reachZ++){ for(int reachY = -RANGE; reachY < RANGE+1; reachY++){ BlockPos pos = PosUtil.offset(this.pos, reachX, reachY, reachZ); Block block = PosUtil.getBlock(pos, worldObj); - if(block != null && block.isLeaves(this.worldObj, pos)){ + if(block != null && block.isLeaves(this.worldObj.getBlockState(pos), this.worldObj, pos)){ breakPositions.add(pos); } } @@ -86,7 +87,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr this.storage.receiveEnergy(ENERGY_PRODUCED, false); if(!ConfigValues.lessParticles){ - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimensionId(), this.pos.getX(), this.pos.getY(), this.pos.getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.pos.getX(), this.pos.getY(), this.pos.getZ(), 64)); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index efd6d6737..8e6d93d7b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -23,8 +23,8 @@ import net.minecraft.block.BlockLiquid; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; @@ -96,8 +96,8 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR Block block = PosUtil.getBlock(pos, worldObj); int meta = PosUtil.getMetadata(pos, worldObj); - if(block != null && !block.isAir(this.worldObj, pos)){ - if(block.getHarvestLevel(worldObj.getBlockState(pos)) <= 3F && block.getBlockHardness(this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ + if(block != null && !block.isAir(this.worldObj.getBlockState(pos), this.worldObj, pos)){ + if(block.getHarvestLevel(worldObj.getBlockState(pos)) <= 3F && block.getBlockHardness(this.worldObj.getBlockState(pos), this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ ArrayList drops = new ArrayList(); drops.addAll(block.getDrops(worldObj, pos, worldObj.getBlockState(pos), 0)); @@ -157,7 +157,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR private void shootParticles(int endX, int endY, int endZ){ if(!ConfigValues.lessParticles){ - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimensionId(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 96)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 96)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 07bc698f8..8e2ef7d00 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -20,10 +20,10 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.Vec3; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -112,11 +112,11 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements @Override public boolean hasBoundPosition(){ if(this.boundPosition != null){ - if(this.worldObj.getTileEntity(boundPosition) instanceof IPhantomTile || (this.getPos().getX() == this.boundPosition.getX() && this.getPos().getY() == this.boundPosition.getY() && this.getPos().getZ() == this.boundPosition.getZ() && this.worldObj.provider.getDimensionId() == this.worldObj.provider.getDimensionId())){ + if(this.worldObj.getTileEntity(boundPosition) instanceof IPhantomTile || (this.getPos().getX() == this.boundPosition.getX() && this.getPos().getY() == this.boundPosition.getY() && this.getPos().getZ() == this.boundPosition.getZ() && this.worldObj.provider.getDimension() == this.worldObj.provider.getDimension())){ this.boundPosition = null; return false; } - return this.worldObj.provider.getDimensionId() == this.worldObj.provider.getDimensionId(); + return this.worldObj.provider.getDimension() == this.worldObj.provider.getDimension(); } return false; } @@ -124,7 +124,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements private void doWork(){ if(this.isBreaker){ Block blockToBreak = PosUtil.getBlock(boundPosition, worldObj); - if(blockToBreak != null && blockToBreak.getBlockHardness(worldObj, boundPosition) > -1.0F){ + if(blockToBreak != null && blockToBreak.getBlockHardness(worldObj.getBlockState(boundPosition), worldObj, boundPosition) > -1.0F){ ArrayList drops = new ArrayList(); drops.addAll(blockToBreak.getDrops(worldObj, boundPosition, worldObj.getBlockState(boundPosition), 0)); @@ -168,7 +168,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements @Override public boolean isBoundThingInRange(){ - return this.hasBoundPosition() && PosUtil.toVec(this.boundPosition).distanceTo(new Vec3(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ())) <= this.range; + return this.hasBoundPosition() && PosUtil.toVec(this.boundPosition).distanceTo(new Vec3d(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ())) <= this.range; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 929ba1f2e..9e5db3260 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -19,9 +19,9 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -94,12 +94,13 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP this.boundPosBefore = this.boundPosition; this.boundBlockBefore = this.boundPosition == null ? null : PosUtil.getBlock(this.boundPosition, this.worldObj); - this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 1, 0, 0)); + //TODO Find a replacement for markBlockForUpdate() + /*this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 1, 0, 0)); this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, -1, 0, 0)); this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, 1, 0)); this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, -1, 0)); this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, 0, 1)); - this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, 0, -1)); + this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, 0, -1));*/ this.sendUpdate(); this.markDirty(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index bad0d1d95..dcb4df0cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -16,8 +16,8 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; import java.util.ArrayList; @@ -50,7 +50,7 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement super.updateEntity(); if(!worldObj.isRemote){ if(!this.isRedstonePowered){ - ArrayList items = (ArrayList)this.worldObj.getEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.fromBounds(this.pos.getX()-RANGE, this.pos.getY()-RANGE, this.pos.getZ()-RANGE, this.pos.getX()+RANGE, this.pos.getY()+RANGE, this.pos.getZ()+RANGE)); + ArrayList items = (ArrayList)this.worldObj.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(this.pos.getX()-RANGE, this.pos.getY()-RANGE, this.pos.getZ()-RANGE, this.pos.getX()+RANGE, this.pos.getY()+RANGE, this.pos.getZ()+RANGE)); if(!items.isEmpty()){ for(EntityItem item : items){ if(!item.isDead && item.getEntityItem() != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java index 372f29bd5..f55689435 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.IChatComponent; +import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; @@ -31,13 +31,13 @@ public class UpdateCheckerClientNotificationEvent{ if(ticksElapsedBeforeInfo >= 800){ EntityPlayer player = Minecraft.getMinecraft().thePlayer; if(UpdateChecker.checkFailed){ - player.addChatComponentMessage(IChatComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.failed"))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.failed"))); notified = true; } else if(UpdateChecker.needsUpdateNotify){ - player.addChatComponentMessage(IChatComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.generic"))); - player.addChatComponentMessage(IChatComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString))); - player.addChatComponentMessage(IChatComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.buttons", UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.generic"))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.buttons", UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK))); notified = true; } ticksElapsedBeforeInfo = 0; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index f7171625d..a9633bb38 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -17,7 +17,7 @@ import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.VertexBuffer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.item.ItemStack; @@ -103,12 +103,12 @@ public class AssetUtil{ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); GlStateManager.shadeModel(7425); Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); - worldrenderer.pos((double)left, (double)top, (double)zLevel).color(f1, f2, f3, f).endVertex(); - worldrenderer.pos((double)left, (double)bottom, (double)zLevel).color(f1, f2, f3, f).endVertex(); - worldrenderer.pos((double)right, (double)bottom, (double)zLevel).color(f5, f6, f7, f4).endVertex(); - worldrenderer.pos((double)right, (double)top, (double)zLevel).color(f5, f6, f7, f4).endVertex(); + VertexBuffer renderer = tessellator.getBuffer(); + renderer.begin(7, DefaultVertexFormats.POSITION_COLOR); + renderer.pos((double)left, (double)top, (double)zLevel).color(f1, f2, f3, f).endVertex(); + renderer.pos((double)left, (double)bottom, (double)zLevel).color(f1, f2, f3, f).endVertex(); + renderer.pos((double)right, (double)bottom, (double)zLevel).color(f5, f6, f7, f4).endVertex(); + renderer.pos((double)right, (double)top, (double)zLevel).color(f5, f6, f7, f4).endVertex(); tessellator.draw(); GlStateManager.shadeModel(7424); GlStateManager.disableBlend(); @@ -132,15 +132,15 @@ public class AssetUtil{ GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + VertexBuffer renderer = tessellator.getBuffer(); int i = 0; int j = fontrenderer.getStringWidth(tag)/2; GlStateManager.disableTexture2D(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); - worldrenderer.pos((double)(-j-1), (double)(-1+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos((double)(-j-1), (double)(8+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos((double)(j+1), (double)(8+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); - worldrenderer.pos((double)(j+1), (double)(-1+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + renderer.begin(7, DefaultVertexFormats.POSITION_COLOR); + renderer.pos((double)(-j-1), (double)(-1+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + renderer.pos((double)(-j-1), (double)(8+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + renderer.pos((double)(j+1), (double)(8+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); + renderer.pos((double)(j+1), (double)(-1+i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex(); tessellator.draw(); GlStateManager.enableTexture2D(); fontrenderer.drawString(tag, -fontrenderer.getStringWidth(tag)/2, i, 553648127); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index cc0bd4652..8c1d9e551 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -12,8 +12,8 @@ package de.ellpeck.actuallyadditions.mod.util; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMapperBase; -import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.Fluid; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index 305c9cb7c..123c38405 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -94,7 +94,7 @@ public class ItemUtil{ if(ench != null){ for(int i = 0; i < ench.tagCount(); i++){ short id = ench.getCompoundTagAt(i).getShort("id"); - if(id == e.effectId){ + if(id == Enchantment.getEnchantmentID(e)){ return true; } } @@ -107,7 +107,7 @@ public class ItemUtil{ if(ench != null){ for(int i = 0; i < ench.tagCount(); i++){ short id = ench.getCompoundTagAt(i).getShort("id"); - if(id == e.effectId){ + if(id == Enchantment.getEnchantmentID(e)){ ench.removeTag(i); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index 5ac8cf905..b84b4d060 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -15,15 +15,15 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; -import net.minecraft.util.BlockPos; -import net.minecraft.util.Vec3; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class PosUtil{ public static Material getMaterial(BlockPos pos, IBlockAccess world){ - return getBlock(pos, world).getMaterial(); + return getBlock(pos, world).getMaterial(world.getBlockState(pos)); } public static Block getBlock(BlockPos pos, IBlockAccess world){ @@ -54,8 +54,8 @@ public class PosUtil{ return world.setBlockState(pos, block.getStateFromMeta(meta), flag); } - public static Vec3 toVec(BlockPos pos){ - return new Vec3(pos.getX(), pos.getY(), pos.getZ()); + public static Vec3d toVec(BlockPos pos){ + return new Vec3d(pos.getX(), pos.getY(), pos.getZ()); } public static BlockPos copyPos(BlockPos pos){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index 1086099db..fd6196f4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.util; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.util.StatCollector; +import net.minecraft.util.text.translation.I18n; import net.minecraftforge.fluids.FluidTank; import java.util.List; @@ -29,14 +29,14 @@ public class StringUtil{ * Localizes a given String via StatCollector */ public static String localize(String text){ - return StatCollector.translateToLocal(text); + return I18n.translateToLocal(text); } /** * Localizes a given formatted String with the given Replacements */ public static String localizeFormatted(String text, Object... replace){ - return StatCollector.translateToLocalFormatted(text, replace); + return I18n.translateToLocalFormatted(text, replace); } public static boolean equalsToLowerCase(String one, String two){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 14618ebcf..c38866eaf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -14,7 +14,7 @@ import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; -import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.oredict.OreDictionary; @@ -27,14 +27,14 @@ public class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; - public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalRed", EnumChatFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); - public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalBlue", EnumChatFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); - public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalLightBlue", EnumChatFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); - public static final EnumRarity CRYSTAL_BLACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalBlack", EnumChatFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); - public static final EnumRarity CRYSTAL_GREEN_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalGreen", EnumChatFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); - public static final EnumRarity CRYSTAL_WHITE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalWhite", EnumChatFormatting.GRAY, ModUtil.NAME+" White Crystal"); + public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); + public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); + public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); + public static final EnumRarity CRYSTAL_BLACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); + public static final EnumRarity CRYSTAL_GREEN_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); + public static final EnumRarity CRYSTAL_WHITE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); - public static final EnumRarity FALLBACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+".fallback", EnumChatFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); + public static final EnumRarity FALLBACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+".fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); public static void registerEvent(Object o){ MinecraftForge.EVENT_BUS.register(o); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 72fe91876..aaeee1086 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -22,14 +22,19 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; +import net.minecraft.init.Enchantments; import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; -import net.minecraft.network.play.client.C07PacketPlayerDigging; -import net.minecraft.network.play.server.S23PacketBlockChange; +import net.minecraft.network.play.client.CPacketPlayerDigging; +import net.minecraft.network.play.server.SPacketBlockChange; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.ForgeHooks; @@ -144,11 +149,12 @@ public class WorldUtil{ //Everything else else{ try{ - stack.onItemUse(FakePlayerUtil.getFakePlayer(world), world, offsetPos, side.getOpposite(), 0.5F, 0.5F, 0.5F); + EntityPlayer fake = FakePlayerUtil.getFakePlayer(world); + stack.onItemUse(fake, world, offsetPos, fake.getActiveHand(), side.getOpposite(), 0.5F, 0.5F, 0.5F); return stack; } catch(Exception e){ - ModUtil.LOGGER.error("Something that places Blocks at "+offsetPos.getX()+", "+offsetPos.getY()+", "+offsetPos.getZ()+" in World "+world.provider.getDimensionId()+" threw an Exception! Don't let that happen again!", e); + ModUtil.LOGGER.error("Something that places Blocks at "+offsetPos.getX()+", "+offsetPos.getY()+", "+offsetPos.getZ()+" in World "+world.provider.getDimension()+" threw an Exception! Don't let that happen again!", e); } } } @@ -315,29 +321,29 @@ public class WorldUtil{ return 0; } - public static MovingObjectPosition getNearestPositionWithAir(World world, EntityPlayer player, int reach){ + public static RayTraceResult getNearestPositionWithAir(World world, EntityPlayer player, int reach){ return getMovingObjectPosWithReachDistance(world, player, reach, false, false, true); } - private static MovingObjectPosition getMovingObjectPosWithReachDistance(World world, EntityPlayer player, double distance, boolean p1, boolean p2, boolean p3){ + private static RayTraceResult getMovingObjectPosWithReachDistance(World world, EntityPlayer player, double distance, boolean p1, boolean p2, boolean p3){ float f = player.rotationPitch; float f1 = player.rotationYaw; double d0 = player.posX; double d1 = player.posY+(double)player.getEyeHeight(); double d2 = player.posZ; - Vec3 vec3 = new Vec3(d0, d1, d2); + Vec3d vec3 = new Vec3d(d0, d1, d2); float f2 = MathHelper.cos(-f1*0.017453292F-(float)Math.PI); float f3 = MathHelper.sin(-f1*0.017453292F-(float)Math.PI); float f4 = -MathHelper.cos(-f*0.017453292F); float f5 = MathHelper.sin(-f*0.017453292F); float f6 = f3*f4; float f7 = f2*f4; - Vec3 vec31 = vec3.addVector((double)f6*distance, (double)f5*distance, (double)f7*distance); + Vec3d vec31 = vec3.addVector((double)f6*distance, (double)f5*distance, (double)f7*distance); return world.rayTraceBlocks(vec3, vec31, p1, p2, p3); } - public static MovingObjectPosition getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player){ - return getMovingObjectPosWithReachDistance(world, player, player instanceof EntityPlayerMP ? ((EntityPlayerMP)player).theItemInWorldManager.getBlockReachDistance() : 5.0D, false, true, false); + public static RayTraceResult getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player){ + return getMovingObjectPosWithReachDistance(world, player, player instanceof EntityPlayerMP ? ((EntityPlayerMP)player).interactionManager.getBlockReachDistance() : 5.0D, false, true, false); } /** @@ -350,15 +356,15 @@ public class WorldUtil{ public static boolean playerHarvestBlock(World world, BlockPos pos, EntityPlayer player){ Block block = PosUtil.getBlock(pos, world); IBlockState state = world.getBlockState(pos); - int meta = PosUtil.getMetadata(pos, world); TileEntity tile = world.getTileEntity(pos); + ItemStack stack = player.getActiveItemStack(); + //If the Block can be harvested or not boolean canHarvest = block.canHarvestBlock(world, pos, player); //Send Block Breaking Event if(player instanceof EntityPlayerMP){ - int event = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP)player).theItemInWorldManager.getGameType(), (EntityPlayerMP)player, pos); - if(event == -1){ + if(ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP)player).interactionManager.getGameType(), (EntityPlayerMP)player, pos) == -1){ return false; } } @@ -373,7 +379,7 @@ public class WorldUtil{ } //If the Block was actually "removed", meaning it will drop an Item - boolean removed = block.removedByPlayer(world, pos, player, canHarvest); + boolean removed = block.removedByPlayer(state, world, pos, player, canHarvest); //Actually removes the Block from the World if(removed){ //Before the Block is destroyed, special cases @@ -382,12 +388,12 @@ public class WorldUtil{ if(!world.isRemote && !player.capabilities.isCreativeMode){ //Actually drops the Block's Items etc. if(canHarvest){ - block.harvestBlock(world, player, pos, state, tile); + block.harvestBlock(world, player, pos, state, tile, stack); } //Only drop XP when no Silk Touch is applied - if(!EnchantmentHelper.getSilkTouchModifier(player)){ + if(EnchantmentHelper.getEnchantmentLevel(Enchantments.silkTouch, stack) <= 0){ //Drop XP depending on Fortune Level - block.dropXpOnBlockBreak(world, pos, block.getExpDrop(world, pos, EnchantmentHelper.getFortuneModifier(player))); + block.dropXpOnBlockBreak(world, pos, block.getExpDrop(state, world, pos, EnchantmentHelper.getEnchantmentLevel(Enchantments.fortune, stack))); } } } @@ -395,12 +401,12 @@ public class WorldUtil{ if(!world.isRemote){ //Update the Client of a Block Change if(player instanceof EntityPlayerMP){ - ((EntityPlayerMP)player).playerNetServerHandler.sendPacket(new S23PacketBlockChange(world, pos)); + ((EntityPlayerMP)player).playerNetServerHandler.sendPacket(new SPacketBlockChange(world, pos)); } } else{ //Check the Server if a Block that changed on the Client really changed, if not, revert the change - Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C07PacketPlayerDigging(C07PacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, Minecraft.getMinecraft().objectMouseOver.sideHit)); + Minecraft.getMinecraft().getNetHandler().addToSendQueue(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, Minecraft.getMinecraft().objectMouseOver.sideHit)); } return removed; } From 0499fbdf7ffcef15a5e10e0e3c0ffa58459032a6 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 19 Mar 2016 11:36:17 +0100 Subject: [PATCH 038/322] Made the game actually run --- .../mod/items/InitForeignPaxels.java | 1 - .../mod/items/{base => }/ItemAllToolAA.java | 77 +++--------------- .../mod/items/ItemAxeAA.java | 41 ++++++++++ .../mod/items/ItemPickaxeAA.java | 47 +++++++++++ .../mod/items/ItemShovelAA.java | 79 +++++++++++++++++++ .../mod/items/base/ItemAxeAA.java | 64 --------------- .../mod/items/base/ItemPickaxeAA.java | 64 --------------- .../mod/items/base/ItemShovelAA.java | 65 --------------- .../mod/items/base/ItemToolAA.java | 78 ++++++++++++++++++ 9 files changed, 257 insertions(+), 259 deletions(-) rename src/main/java/de/ellpeck/actuallyadditions/mod/items/{base => }/ItemAllToolAA.java (69%) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java index 03224bc30..95fd3d25c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.crafting.ToolCrafting; import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; -import de.ellpeck.actuallyadditions.mod.items.base.ItemAllToolAA; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java similarity index 69% rename from src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 28e98caa4..78f153dfd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -8,74 +8,44 @@ * © 2016 Ellpeck */ -package de.ellpeck.actuallyadditions.mod.items.base; +package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemTool; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.oredict.OreDictionary; import java.util.HashSet; import java.util.Set; @SuppressWarnings("unchecked") -public class ItemAllToolAA extends ItemTool{ +public class ItemAllToolAA extends ItemToolAA implements IItemColor{ private int color; - private String name; - private EnumRarity rarity; - private ItemStack repairItem; - private String repairOredict; - public ItemAllToolAA(ToolMaterial toolMat, String repairItem, String unlocalizedName, EnumRarity rarity, int color){ - this(toolMat, (ItemStack)null, unlocalizedName, rarity, color); - this.repairOredict = repairItem; + super(4.0F, -2F, toolMat, repairItem, unlocalizedName, rarity, new HashSet()); + this.color = color; } public ItemAllToolAA(ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity, int color){ - super(4.0F, -2F, toolMat, new HashSet()); - - this.repairItem = repairItem; - this.name = unlocalizedName; - this.rarity = rarity; + super(4.0F, -2F, toolMat, repairItem, unlocalizedName, rarity, new HashSet()); this.color = color; - - this.setMaxDamage(this.getMaxDamage()*4); - - this.register(); - } - - private void register(){ - ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); - - this.registerRendering(); - } - - protected String getBaseName(){ - return this.name; - } - - public boolean shouldAddCreative(){ - return true; } protected void registerRendering(){ @@ -88,18 +58,6 @@ public class ItemAllToolAA extends ItemTool{ return Items.iron_hoe.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); } - //TODO Fix ItemStack color - /*@Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass){ - return pass > 0 ? this.color : super.(stack, pass); - }*/ - - @Override - public EnumRarity getRarity(ItemStack stack){ - return this.rarity; - } - @Override public boolean canHarvestBlock(IBlockState state, ItemStack stack){ @@ -118,22 +76,6 @@ public class ItemAllToolAA extends ItemTool{ return false; } - @Override - public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ - if(this.repairItem != null){ - return ItemUtil.areItemsEqual(this.repairItem, stack, false); - } - else if(this.repairOredict != null){ - int[] idsStack = OreDictionary.getOreIDs(stack); - for(int id : idsStack){ - if(OreDictionary.getOreName(id).equals(this.repairOredict)){ - return true; - } - } - } - return false; - } - @Override public Set getToolClasses(ItemStack stack){ HashSet hashSet = new HashSet(); @@ -147,4 +89,9 @@ public class ItemAllToolAA extends ItemTool{ public float getStrVsBlock(ItemStack stack, IBlockState state){ return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getHarvestTool(state) == null || state.getBlock().getHarvestTool(state).isEmpty() || this.getToolClasses(stack).contains(state.getBlock().getHarvestTool(state)) ? this.efficiencyOnProperMaterial : 1.0F; } + + @Override + public int getColorFromItemstack(ItemStack stack, int tintIndex){ + return tintIndex > 0 ? this.color : 0xFFFFFF; + } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java new file mode 100644 index 000000000..1b879a5d6 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -0,0 +1,41 @@ +/* + * This file ("ItemAxeAA.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items; + +import com.google.common.collect.Sets; +import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import java.util.Set; + +public class ItemAxeAA extends ItemToolAA{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.planks, Blocks.bookshelf, Blocks.log, Blocks.log2, Blocks.chest, Blocks.pumpkin, Blocks.lit_pumpkin, Blocks.melon_block, Blocks.ladder, Blocks.wooden_button, Blocks.wooden_pressure_plate); + + public ItemAxeAA(Item.ToolMaterial material, String repairItem, String unlocalizedName, EnumRarity rarity){ + super(6.0F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); + } + + public ItemAxeAA(Item.ToolMaterial material, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ + super(6.0F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); + } + + public float getStrVsBlock(ItemStack stack, IBlockState state){ + Material material = state.getMaterial(); + return material != Material.wood && material != Material.plants && material != Material.vine ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java new file mode 100644 index 000000000..404db70ca --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -0,0 +1,47 @@ +/* + * This file ("ItemPickaxeAA.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items; + +import com.google.common.collect.Sets; +import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import java.util.Set; + +public class ItemPickaxeAA extends ItemToolAA{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.activator_rail, Blocks.coal_ore, Blocks.cobblestone, Blocks.detector_rail, Blocks.diamond_block, Blocks.diamond_ore, Blocks.double_stone_slab, Blocks.golden_rail, Blocks.gold_block, Blocks.gold_ore, Blocks.ice, Blocks.iron_block, Blocks.iron_ore, Blocks.lapis_block, Blocks.lapis_ore, Blocks.lit_redstone_ore, Blocks.mossy_cobblestone, Blocks.netherrack, Blocks.packed_ice, Blocks.rail, Blocks.redstone_ore, Blocks.sandstone, Blocks.red_sandstone, Blocks.stone, Blocks.stone_slab, Blocks.stone_button, Blocks.stone_pressure_plate); + + public ItemPickaxeAA(Item.ToolMaterial material, String repairItem, String unlocalizedName, EnumRarity rarity){ + super(1.0F, -2.8F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); + } + + public ItemPickaxeAA(Item.ToolMaterial material, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ + super(1.0F, -2.8F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); + } + + @Override + public boolean canHarvestBlock(IBlockState state) { + Block blockIn = state.getBlock(); + return blockIn == Blocks.obsidian ? toolMaterial.getHarvestLevel() == 3 : blockIn != Blocks.diamond_block && blockIn != Blocks.diamond_ore ? blockIn != Blocks.emerald_ore && blockIn != Blocks.emerald_block ? blockIn != Blocks.gold_block && blockIn != Blocks.gold_ore ? blockIn != Blocks.iron_block && blockIn != Blocks.iron_ore ? blockIn != Blocks.lapis_block && blockIn != Blocks.lapis_ore ? blockIn != Blocks.redstone_ore && blockIn != Blocks.lit_redstone_ore ? state.getMaterial() == Material.rock || (state.getMaterial() == Material.iron || state.getMaterial() == Material.anvil) : toolMaterial.getHarvestLevel() >= 2 : toolMaterial.getHarvestLevel() >= 1 : toolMaterial.getHarvestLevel() >= 1 : toolMaterial.getHarvestLevel() >= 2 : toolMaterial.getHarvestLevel() >= 2 : toolMaterial.getHarvestLevel() >= 2; + } + + public float getStrVsBlock(ItemStack stack, IBlockState state){ + Material material = state.getMaterial(); + return material != Material.iron && material != Material.anvil && material != Material.rock ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java new file mode 100644 index 000000000..b22a29ad6 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -0,0 +1,79 @@ +/* + * This file ("ItemShovelAA.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items; + +import com.google.common.collect.Sets; +import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import java.util.Set; + +public class ItemShovelAA extends ItemToolAA{ + + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.clay, Blocks.dirt, Blocks.farmland, Blocks.grass, Blocks.gravel, Blocks.mycelium, Blocks.sand, Blocks.snow, Blocks.snow_layer, Blocks.soul_sand, Blocks.grass_path); + + public ItemShovelAA(Item.ToolMaterial material, String repairItem, String unlocalizedName, EnumRarity rarity){ + super(1.5F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); + } + + public ItemShovelAA(Item.ToolMaterial material, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ + super(1.5F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); + } + + public float getStrVsBlock(ItemStack stack, IBlockState state){ + Material material = state.getMaterial(); + return material != Material.wood && material != Material.plants && material != Material.vine ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; + } + + public boolean canHarvestBlock(IBlockState blockIn){ + Block block = blockIn.getBlock(); + return block == Blocks.snow_layer || block == Blocks.snow; + } + + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + if(!playerIn.canPlayerEdit(pos.offset(facing), facing, stack)){ + return EnumActionResult.FAIL; + } + else{ + IBlockState iblockstate = worldIn.getBlockState(pos); + Block block = iblockstate.getBlock(); + + if(facing != EnumFacing.DOWN && worldIn.getBlockState(pos.up()).getMaterial() == Material.air && block == Blocks.grass){ + IBlockState iblockstate1 = Blocks.grass_path.getDefaultState(); + worldIn.playSound(playerIn, pos, SoundEvents.item_shovel_flatten, SoundCategory.BLOCKS, 1.0F, 1.0F); + + if(!worldIn.isRemote){ + worldIn.setBlockState(pos, iblockstate1, 11); + stack.damageItem(1, playerIn); + } + + return EnumActionResult.SUCCESS; + } + else{ + return EnumActionResult.PASS; + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java deleted file mode 100644 index fcf7cc0cb..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemAxeAA.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file ("ItemAxeAA.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items.base; - -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.ItemAxe; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class ItemAxeAA extends ItemAxe{ - - private String name; - private EnumRarity rarity; - private ItemStack repairItem; - - public ItemAxeAA(ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ - super(toolMat); - - this.repairItem = repairItem; - this.name = unlocalizedName; - this.rarity = rarity; - - this.register(); - } - - private void register(){ - ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); - - this.registerRendering(); - } - - protected String getBaseName(){ - return this.name; - } - - public boolean shouldAddCreative(){ - return true; - } - - protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); - } - - @Override - public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ - return ItemUtil.areItemsEqual(this.repairItem, stack, false); - } - - @Override - public EnumRarity getRarity(ItemStack stack){ - return this.rarity; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java deleted file mode 100644 index 30864b796..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemPickaxeAA.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file ("ItemPickaxeAA.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items.base; - -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.ItemPickaxe; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class ItemPickaxeAA extends ItemPickaxe{ - - private String name; - private EnumRarity rarity; - private ItemStack repairItem; - - public ItemPickaxeAA(ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ - super(toolMat); - - this.repairItem = repairItem; - this.name = unlocalizedName; - this.rarity = rarity; - - this.register(); - } - - private void register(){ - ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); - - this.registerRendering(); - } - - protected String getBaseName(){ - return this.name; - } - - public boolean shouldAddCreative(){ - return true; - } - - protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); - } - - @Override - public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ - return ItemUtil.areItemsEqual(this.repairItem, stack, false); - } - - @Override - public EnumRarity getRarity(ItemStack stack){ - return this.rarity; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java deleted file mode 100644 index 50f4ed67f..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemShovelAA.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file ("ItemShovelAA.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items.base; - -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemSpade; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class ItemShovelAA extends ItemSpade{ - - private String name; - private EnumRarity rarity; - private ItemStack repairItem; - - public ItemShovelAA(Item.ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ - super(toolMat); - - this.repairItem = repairItem; - this.name = unlocalizedName; - this.rarity = rarity; - - this.register(); - } - - private void register(){ - ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); - - this.registerRendering(); - } - - protected String getBaseName(){ - return this.name; - } - - public boolean shouldAddCreative(){ - return true; - } - - protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); - } - - @Override - public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ - return ItemUtil.areItemsEqual(this.repairItem, stack, false); - } - - @Override - public EnumRarity getRarity(ItemStack stack){ - return this.rarity; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java new file mode 100644 index 000000000..4ae0753c3 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -0,0 +1,78 @@ +package de.ellpeck.actuallyadditions.mod.items.base; + +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.block.Block; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.oredict.OreDictionary; + +import java.util.HashSet; +import java.util.Set; + +public class ItemToolAA extends ItemTool{ + + private String name; + private EnumRarity rarity; + private ItemStack repairItem; + private String repairOredict; + + public ItemToolAA(float attack, float speed, ToolMaterial toolMat, String repairItem, String unlocalizedName, EnumRarity rarity, Set effectiveStuff){ + this(attack, speed, toolMat, (ItemStack)null, unlocalizedName, rarity, effectiveStuff); + this.repairOredict = repairItem; + } + + public ItemToolAA(float attack, float speed, ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity, Set effectiveStuff){ + super(attack, speed, toolMat, effectiveStuff); + + this.repairItem = repairItem; + this.name = unlocalizedName; + this.rarity = rarity; + + this.register(); + } + + private void register(){ + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); + + this.registerRendering(); + } + + protected String getBaseName(){ + return this.name; + } + + public boolean shouldAddCreative(){ + return true; + } + + protected void registerRendering(){ + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); + ActuallyAdditions.proxy.addRenderVariant(this, new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return this.rarity; + } + + @Override + public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ + if(this.repairItem != null){ + return ItemUtil.areItemsEqual(this.repairItem, stack, false); + } + else if(this.repairOredict != null){ + int[] idsStack = OreDictionary.getOreIDs(stack); + for(int id : idsStack){ + if(OreDictionary.getOreName(id).equals(this.repairOredict)){ + return true; + } + } + } + return false; + } +} From 5d34bce19471dd10d0b3ad9ceb704846cf73f4a6 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 19 Mar 2016 11:42:11 +0100 Subject: [PATCH 039/322] Fixed Drill attack damage --- .../actuallyadditions/mod/items/ItemDrill.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 23798c1bb..02dbecbc2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -25,7 +25,6 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -215,10 +214,14 @@ public class ItemDrill extends ItemEnergy{ return EnumRarity.EPIC; } - @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ - Multimap map = super.getAttributeModifiers(slot, stack); - map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Drill Modifier", this.getEnergyStored(stack) >= ENERGY_USE ? 8.0F : 0.1F, 0)); + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ + Multimap map = super.getAttributeModifiers(slot, stack); + + if(slot == EntityEquipmentSlot.MAINHAND){ + map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Drill Modifier", this.getEnergyStored(stack) >= ENERGY_USE ? 8.0F : 0.1F, 0)); + map.put(SharedMonsterAttributes.ATTACK_SPEED.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_SPEED_MODIFIER, "Tool Modifier", -2.5F, 0)); + } + return map; } From 23f8ccc75cacde877e8089427b89a087035ff66f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 19 Mar 2016 15:10:20 +0100 Subject: [PATCH 040/322] Did some more stuff and things --- .../mod/items/ItemAllToolAA.java | 19 ++++++++++++---- .../mod/items/ItemBooklet.java | 2 +- .../actuallyadditions/mod/items/ItemDust.java | 22 ++++++++++++------- .../mod/items/ItemHairyBall.java | 1 - .../actuallyadditions/mod/items/ItemJams.java | 22 ++++++++++++------- .../mod/items/ItemPotionRing.java | 22 ++++++++++++------- .../mod/items/ItemResonantRice.java | 2 +- .../mod/items/base/ItemToolAA.java | 5 +---- .../mod/proxy/ClientProxy.java | 22 ++++++++++++++----- .../actuallyadditions/mod/proxy/IProxy.java | 2 ++ .../mod/proxy/ServerProxy.java | 5 +++++ .../mod/tile/TileEntityPhantomface.java | 11 ++++------ .../mod/util/IColorProvidingItem.java | 12 ++++++++++ .../actuallyadditions/mod/util/ItemUtil.java | 5 +++++ 14 files changed, 105 insertions(+), 47 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 78f153dfd..b96369af3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; +import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -29,14 +30,16 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import java.util.HashSet; import java.util.Set; @SuppressWarnings("unchecked") -public class ItemAllToolAA extends ItemToolAA implements IItemColor{ +public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ - private int color; + public final int color; public ItemAllToolAA(ToolMaterial toolMat, String repairItem, String unlocalizedName, EnumRarity rarity, int color){ super(4.0F, -2F, toolMat, repairItem, unlocalizedName, rarity, new HashSet()); @@ -51,6 +54,8 @@ public class ItemAllToolAA extends ItemToolAA implements IItemColor{ protected void registerRendering(){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); ActuallyAdditions.proxy.addRenderVariant(this, new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); + + } @Override @@ -90,8 +95,14 @@ public class ItemAllToolAA extends ItemToolAA implements IItemColor{ return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getHarvestTool(state) == null || state.getBlock().getHarvestTool(state).isEmpty() || this.getToolClasses(stack).contains(state.getBlock().getHarvestTool(state)) ? this.efficiencyOnProperMaterial : 1.0F; } + @SideOnly(Side.CLIENT) @Override - public int getColorFromItemstack(ItemStack stack, int tintIndex){ - return tintIndex > 0 ? this.color : 0xFFFFFF; + public IItemColor getColor(){ + return new IItemColor(){ + @Override + public int getColorFromItemstack(ItemStack stack, int pass){ + return pass > 0 ? color : 0xFFFFFF; + } + }; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index c11872f8f..7683888dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -81,7 +81,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ if(!world.isRemote){ player.addStat(TheAchievements.OPEN_BOOKLET.ach); } - return new ActionResult<>(EnumActionResult.SUCCESS, stack); + return new ActionResult(EnumActionResult.SUCCESS, stack); } @SuppressWarnings("unchecked") diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 7a5617caf..f4053b3b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -13,8 +13,10 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; +import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -25,7 +27,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; -public class ItemDust extends ItemBase{ +public class ItemDust extends ItemBase implements IColorProvidingItem{ public static final TheDusts[] allDusts = TheDusts.values(); @@ -44,13 +46,6 @@ public class ItemDust extends ItemBase{ return stack.getItemDamage() >= allDusts.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allDusts[stack.getItemDamage()].name; } - //TODO Figure out item colors - /*@Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass){ - return stack.getItemDamage() >= allDusts.length ? 0 : allDusts[stack.getItemDamage()].color; - }*/ - @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allDusts.length ? EnumRarity.COMMON : allDusts[stack.getItemDamage()].rarity; @@ -70,4 +65,15 @@ public class ItemDust extends ItemBase{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); } } + + @SideOnly(Side.CLIENT) + @Override + public IItemColor getColor(){ + return new IItemColor(){ + @Override + public int getColorFromItemstack(ItemStack stack, int pass){ + return stack.getItemDamage() >= allDusts.length ? 0xFFFFFF : allDusts[stack.getItemDamage()].color; + } + }; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index a2cbe312d..3c1669825 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; -import de.ellpeck.actuallyadditions.api.recipe.BallOfFurReturn; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.item.EntityItem; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 685695fb3..03dc159f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -13,8 +13,10 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheJams; +import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -32,7 +34,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; -public class ItemJams extends ItemFoodBase{ +public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ public static final TheJams[] allJams = TheJams.values(); @@ -53,13 +55,6 @@ public class ItemJams extends ItemFoodBase{ return stack.getItemDamage() >= allJams.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allJams[stack.getItemDamage()].name; } - //TODO Color - /*@Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass){ - return pass > 0 ? (stack.getItemDamage() >= allJams.length ? 0 : allJams[stack.getItemDamage()].color) : super.getColorFromItemStack(stack, pass); - }*/ - @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allJams.length ? EnumRarity.COMMON : allJams[stack.getItemDamage()].rarity; @@ -110,4 +105,15 @@ public class ItemJams extends ItemFoodBase{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); } } + + @Override + @SideOnly(Side.CLIENT) + public IItemColor getColor(){ + return new IItemColor(){ + @Override + public int getColorFromItemstack(ItemStack stack, int pass){ + return pass > 0 ? (stack.getItemDamage() >= allJams.length ? 0xFFFFFF : allJams[stack.getItemDamage()].color) : 0xFFFFFF; + } + }; + } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index abd721f01..5de85c0c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -13,8 +13,10 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.ThePotionRings; +import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -30,7 +32,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; -public class ItemPotionRing extends ItemBase{ +public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ public static final ThePotionRings[] allRings = ThePotionRings.values(); @@ -53,13 +55,6 @@ public class ItemPotionRing extends ItemBase{ return stack.getItemDamage() >= allRings.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allRings[stack.getItemDamage()].name; } - //TODO Color - /*@Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass){ - return stack.getItemDamage() >= allRings.length ? 0 : allRings[stack.getItemDamage()].color; - }*/ - @Override @SuppressWarnings("unchecked") public void onUpdate(ItemStack stack, World world, Entity player, int par4, boolean par5){ @@ -115,4 +110,15 @@ public class ItemPotionRing extends ItemBase{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); } } + + @Override + @SideOnly(Side.CLIENT) + public IItemColor getColor(){ + return new IItemColor(){ + @Override + public int getColorFromItemstack(ItemStack stack, int tintIndex){ + return stack.getItemDamage() >= allRings.length ? 0xFFFFFF : allRings[stack.getItemDamage()].color; + } + }; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 6b74c1b3a..7b8a360cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -32,7 +32,7 @@ public class ItemResonantRice extends ItemBase{ stack.stackSize--; world.createExplosion(null, player.posX, player.posY, player.posZ, 0.5F, true); } - return new ActionResult<>(EnumActionResult.SUCCESS, stack); + return new ActionResult(EnumActionResult.SUCCESS, stack); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index 4ae0753c3..7c619a9ac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -8,10 +8,8 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; import net.minecraftforge.oredict.OreDictionary; -import java.util.HashSet; import java.util.Set; public class ItemToolAA extends ItemTool{ @@ -51,8 +49,7 @@ public class ItemToolAA extends ItemTool{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); - ActuallyAdditions.proxy.addRenderVariant(this, new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 9166a2e12..c6f2c39a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -26,6 +26,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; +import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; @@ -47,9 +48,7 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import java.io.File; -import java.util.Calendar; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class ClientProxy implements IProxy{ @@ -58,6 +57,8 @@ public class ClientProxy implements IProxy{ public static boolean bulletForMyValentine; public static int bookletWordCount; public static int bookletCharCount; + + private static List colorProdividingItemsForRegistering = new ArrayList(); private static Map modelLocationsForRegistering = new HashMap(); private static Map modelVariantsForRegistering = new HashMap(); @@ -97,9 +98,13 @@ public class ClientProxy implements IProxy{ PersistentClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"Data.dat")); + for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ + ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), new ModelResourceLocation(entry.getValue(), "inventory")); + } for(Map.Entry entry : modelVariantsForRegistering.entrySet()){ ModelBakery.registerItemVariants(entry.getKey(), entry.getValue()); } + this.registerCustomFluidBlockRenderer(InitFluids.fluidCanolaOil); this.registerCustomFluidBlockRenderer(InitFluids.fluidOil); @@ -140,8 +145,10 @@ public class ClientProxy implements IProxy{ //TODO Fix villager, doesn't work in this Version of Forge //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/entity/villager/jamVillager.png")); - for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ - Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(entry.getKey().getItem(), entry.getKey().getItemDamage(), new ModelResourceLocation(entry.getValue(), "inventory")); + for(Item item : colorProdividingItemsForRegistering){ + if(item instanceof IColorProvidingItem){ + Minecraft.getMinecraft().getItemColors().registerItemColorHandler(((IColorProvidingItem)item).getColor(), item); + } } } @@ -163,4 +170,9 @@ public class ClientProxy implements IProxy{ public void addRenderVariant(Item item, ResourceLocation... location){ modelVariantsForRegistering.put(item, location); } + + @Override + public void addColoredItem(Item item){ + colorProdividingItemsForRegistering.add(item); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index e15121884..b5eeeabee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -28,4 +28,6 @@ public interface IProxy{ void addRenderRegister(ItemStack stack, ResourceLocation location); void addRenderVariant(Item item, ResourceLocation... location); + + void addColoredItem(Item item); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index cd4b73a1c..a4a92cfd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -45,4 +45,9 @@ public class ServerProxy implements IProxy{ public void addRenderVariant(Item item, ResourceLocation... location){ } + + @Override + public void addColoredItem(Item item){ + + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 9e5db3260..59046ba17 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -94,13 +95,9 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP this.boundPosBefore = this.boundPosition; this.boundBlockBefore = this.boundPosition == null ? null : PosUtil.getBlock(this.boundPosition, this.worldObj); - //TODO Find a replacement for markBlockForUpdate() - /*this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 1, 0, 0)); - this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, -1, 0, 0)); - this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, 1, 0)); - this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, -1, 0)); - this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, 0, 1)); - this.worldObj.markBlockForUpdate(PosUtil.offset(this.pos, 0, 0, -1));*/ + IBlockState myState = this.worldObj.getBlockState(this.pos); + this.worldObj.notifyBlockUpdate(this.pos, myState, myState, 3); + this.sendUpdate(); this.markDirty(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java new file mode 100644 index 000000000..ba8fc0fd1 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java @@ -0,0 +1,12 @@ +package de.ellpeck.actuallyadditions.mod.util; + +import net.minecraft.client.renderer.color.IItemColor; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public interface IColorProvidingItem{ + + @SideOnly(Side.CLIENT) + IItemColor getColor(); + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index 123c38405..c59e174af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.util; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import net.minecraft.block.Block; @@ -49,6 +50,10 @@ public class ItemUtil{ GameRegistry.registerItem(item); item.setCreativeTab(addTab ? CreativeTab.instance : null); + + if(item instanceof IColorProvidingItem){ + ActuallyAdditions.proxy.addColoredItem(item); + } } /** From 08ea43e70dd83d85c8ac71f28284a3363843f7d6 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 20 Apr 2016 21:39:03 +0200 Subject: [PATCH 041/322] Fudge my life, 1.9 --- build.gradle | 4 +- .../api/ActuallyAdditionsAPI.java | 4 +- .../mod/ActuallyAdditions.java | 4 +- .../mod/achievement/InitAchievements.java | 2 +- .../mod/achievement/TheAchievements.java | 2 +- .../mod/blocks/BlockAtomicReconstructor.java | 12 +-- .../mod/blocks/BlockBreaker.java | 4 +- .../mod/blocks/BlockCanolaPress.java | 4 +- .../mod/blocks/BlockCoalGenerator.java | 4 +- .../mod/blocks/BlockCoffeeMachine.java | 4 +- .../mod/blocks/BlockColoredLamp.java | 12 +-- .../mod/blocks/BlockCompost.java | 4 +- .../mod/blocks/BlockCrystal.java | 10 +-- .../mod/blocks/BlockDirectionalBreaker.java | 4 +- .../mod/blocks/BlockDropper.java | 4 +- .../mod/blocks/BlockEnergizer.java | 4 +- .../mod/blocks/BlockFeeder.java | 4 +- .../mod/blocks/BlockFermentingBarrel.java | 4 +- .../mod/blocks/BlockFireworkBox.java | 4 +- .../mod/blocks/BlockFishingNet.java | 4 +- .../mod/blocks/BlockFluidCollector.java | 4 +- .../mod/blocks/BlockFurnaceDouble.java | 4 +- .../mod/blocks/BlockFurnaceSolar.java | 4 +- .../mod/blocks/BlockGeneric.java | 4 +- .../mod/blocks/BlockGiantChest.java | 4 +- .../mod/blocks/BlockGreenhouseGlass.java | 4 +- .../mod/blocks/BlockGrinder.java | 4 +- .../mod/blocks/BlockHeatCollector.java | 4 +- .../mod/blocks/BlockInputter.java | 10 +-- .../mod/blocks/BlockItemRepairer.java | 4 +- .../mod/blocks/BlockLampPowerer.java | 4 +- .../mod/blocks/BlockLaserRelay.java | 4 +- .../blocks/BlockLavaFactoryController.java | 8 +- .../mod/blocks/BlockLeafGenerator.java | 4 +- .../mod/blocks/BlockMiner.java | 4 +- .../mod/blocks/BlockMisc.java | 10 +-- .../mod/blocks/BlockOilGenerator.java | 4 +- .../mod/blocks/BlockPhantom.java | 14 ++-- .../mod/blocks/BlockPhantomBooster.java | 4 +- .../mod/blocks/BlockRangedCollector.java | 4 +- .../mod/blocks/BlockSlabs.java | 4 +- .../mod/blocks/BlockSmileyCloud.java | 4 +- .../mod/blocks/BlockTreasureChest.java | 4 +- .../mod/blocks/BlockWallAA.java | 4 +- .../mod/blocks/BlockWildPlant.java | 12 +-- .../mod/blocks/BlockXPSolidifier.java | 4 +- .../mod/blocks/base/BlockBase.java | 6 +- .../mod/blocks/base/BlockBushBase.java | 8 +- .../mod/blocks/base/BlockContainerBase.java | 19 ++--- .../mod/blocks/base/BlockFluidFlowing.java | 4 +- .../mod/blocks/base/BlockPlant.java | 6 +- .../mod/blocks/base/BlockStair.java | 6 +- .../mod/blocks/render/RenderCompost.java | 2 +- .../mod/booklet/BookletUtils.java | 12 +-- .../mod/booklet/GuiBooklet.java | 12 ++- .../mod/booklet/InitBooklet.java | 2 +- .../mod/booklet/button/IndexButton.java | 2 +- .../mod/booklet/chapter/BookletChapter.java | 2 +- .../mod/booklet/entry/BookletEntry.java | 2 +- .../mod/booklet/page/BookletPageAA.java | 4 +- .../mod/booklet/page/PageCrafting.java | 4 +- .../mod/booklet/page/PageCrusherRecipe.java | 2 +- .../mod/booklet/page/PageFurnace.java | 2 +- .../mod/booklet/page/PageReconstructor.java | 2 +- .../mod/config/ConfigurationHandler.java | 2 +- .../mod/crafting/BlockCrafting.java | 60 ++++++------- .../mod/crafting/CrusherCrafting.java | 44 +++++----- .../mod/crafting/FoodCrafting.java | 42 +++++----- .../mod/crafting/ItemCrafting.java | 82 +++++++++--------- .../mod/crafting/MiscCrafting.java | 6 +- .../mod/crafting/ToolCrafting.java | 64 +++++++------- .../mod/creative/CreativeTab.java | 2 +- .../mod/event/EntityLivingEvent.java | 12 +-- .../actuallyadditions/mod/event/HudEvent.java | 12 +-- .../mod/event/LivingDropEvent.java | 14 ++-- .../mod/event/PlayerObtainEvents.java | 4 +- .../mod/event/TooltipEvent.java | 46 +++++----- .../mod/event/WorldDecorationEvent.java | 54 ++++++------ .../actuallyadditions/mod/fluids/FluidAA.java | 4 +- .../mod/fluids/InitFluids.java | 4 +- .../mod/gen/InitVillager.java | 6 +- .../mod/gen/JamVillagerTradeHandler.java | 6 +- .../actuallyadditions/mod/gen/OreGen.java | 2 +- .../mod/inventory/ContainerCrafter.java | 2 +- .../mod/inventory/gui/GuiCoffeeMachine.java | 4 +- .../mod/inventory/gui/GuiCrafter.java | 2 +- .../mod/inventory/gui/GuiDrill.java | 2 +- .../mod/inventory/gui/GuiFeeder.java | 2 +- .../mod/inventory/gui/GuiInputter.java | 32 +++---- .../mod/inventory/gui/GuiRangedCollector.java | 2 +- .../mod/inventory/gui/GuiSmileyCloud.java | 4 +- .../mod/items/InitItems.java | 50 +++++------ .../mod/items/ItemAllToolAA.java | 10 +-- .../mod/items/ItemAxeAA.java | 4 +- .../mod/items/ItemBooklet.java | 2 +- .../mod/items/ItemCoffee.java | 19 ++--- .../mod/items/ItemCrystal.java | 4 +- .../mod/items/ItemDrill.java | 16 ++-- .../actuallyadditions/mod/items/ItemDust.java | 2 +- .../mod/items/ItemFoods.java | 5 +- .../actuallyadditions/mod/items/ItemJams.java | 4 +- .../mod/items/ItemLaserWrench.java | 10 +-- .../actuallyadditions/mod/items/ItemMisc.java | 4 +- .../mod/items/ItemPhantomConnector.java | 10 +-- .../mod/items/ItemPickaxeAA.java | 46 ++++++++-- .../mod/items/ItemPotionRing.java | 2 +- .../mod/items/ItemShovelAA.java | 33 +------- .../mod/items/ItemWaterRemovalRing.java | 4 +- .../mod/items/base/ItemArmorAA.java | 3 +- .../mod/items/base/ItemBase.java | 2 +- .../mod/items/base/ItemBucketAA.java | 4 +- .../mod/items/base/ItemEnergy.java | 2 +- .../mod/items/base/ItemFoodBase.java | 2 +- .../mod/items/base/ItemHoeAA.java | 2 +- .../mod/items/base/ItemSeed.java | 4 +- .../mod/items/base/ItemSwordAA.java | 2 +- .../mod/items/base/ItemToolAA.java | 2 +- .../mod/items/lens/LensColor.java | 12 +-- .../mod/items/lens/LensNoneRecipeHandler.java | 34 ++++---- .../mod/items/metalists/TheFoods.java | 6 +- .../mod/items/metalists/ThePotionRings.java | 20 ++--- .../mod/jei/JEIActuallyAdditionsPlugin.java | 29 ++----- .../mod/jei/RecipeWrapperWithButton.java | 2 +- .../mod/jei/booklet/BookletRecipeWrapper.java | 9 +- .../coffee/CoffeeMachineRecipeWrapper.java | 9 +- .../mod/jei/crusher/CrusherRecipeWrapper.java | 5 -- .../ReconstructorRecipeWrapper.java | 5 -- .../mod/material/InitArmorMaterials.java | 19 ++--- .../mod/misc/DamageSources.java | 2 +- .../mod/misc/DispenserHandlerEmptyBucket.java | 2 +- .../mod/misc/DispenserHandlerFillBucket.java | 8 +- .../mod/misc/cloud/SmileyCloudEasterEggs.java | 84 +++++++++---------- .../mod/misc/special/RenderSpecial.java | 2 +- .../mod/misc/special/SpecialRenderInit.java | 12 +-- .../mod/nei/NEIBookletRecipe.java | 6 +- .../mod/nei/NEICoffeeMachineRecipe.java | 6 +- .../mod/nei/NEICompostRecipe.java | 2 +- .../mod/nei/NEICrusherRecipe.java | 4 +- .../mod/nei/NEIFurnaceDoubleRecipe.java | 2 +- .../mod/nei/NEIHairyBallRecipe.java | 2 +- .../mod/nei/NEIReconstructorRecipe.java | 2 +- .../mod/nei/NEIScreenEvents.java | 2 +- .../mod/nei/NEITreasureChestRecipe.java | 4 +- .../mod/network/PacketHandler.java | 2 +- .../mod/ore/InitOreDict.java | 4 +- .../mod/proxy/ClientProxy.java | 2 +- .../mod/recipe/HairyBallHandler.java | 46 +++++----- .../mod/recipe/TreasureChestHandler.java | 50 +++++------ .../tile/TileEntityAtomicReconstructor.java | 2 +- .../mod/tile/TileEntityBase.java | 82 +++++++++--------- .../mod/tile/TileEntityCanolaPress.java | 2 +- .../mod/tile/TileEntityCoffeeMachine.java | 2 +- .../mod/tile/TileEntityFermentingBarrel.java | 4 +- .../mod/tile/TileEntityFireworkBox.java | 4 +- .../mod/tile/TileEntityFishingNet.java | 2 +- .../mod/tile/TileEntityFluidCollector.java | 4 +- .../mod/tile/TileEntityGrinder.java | 2 +- .../mod/tile/TileEntityHeatCollector.java | 8 +- .../mod/tile/TileEntityInventoryBase.java | 2 +- .../tile/TileEntityLavaFactoryController.java | 4 +- .../mod/tile/TileEntityMiner.java | 4 +- .../UpdateCheckerClientNotificationEvent.java | 8 +- .../actuallyadditions/mod/util/AssetUtil.java | 4 +- .../mod/util/CompatUtil.java | 6 +- .../mod/util/FluidStateMapper.java | 2 +- .../actuallyadditions/mod/util/ItemUtil.java | 17 ++-- .../actuallyadditions/mod/util/ModUtil.java | 3 - .../mod/util/StringUtil.java | 2 +- .../actuallyadditions/mod/util/Util.java | 16 ++-- .../actuallyadditions/mod/util/WorldUtil.java | 13 ++- .../assets/actuallyadditions/lang/en_US.lang | 2 +- 171 files changed, 819 insertions(+), 867 deletions(-) diff --git a/build.gradle b/build.gradle index 71a7368cf..57680b5c2 100644 --- a/build.gradle +++ b/build.gradle @@ -17,10 +17,10 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.9-12.16.0.1767-1.9" + version = "1.9-12.16.0.1865-1.9" runDir = "idea" - mappings = "snapshot_20160312" + mappings = "snapshot_20160420" makeObfSourceJar = false //useDepAts = true diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 840c6e8cc..54d956681 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -25,8 +25,8 @@ import java.util.List; public class ActuallyAdditionsAPI{ - public static final String MOD_ID = "ActuallyAdditions"; - public static final String API_ID = MOD_ID+"API"; + public static final String MOD_ID = "actuallyadditions"; + public static final String API_ID = MOD_ID+"api"; public static final String API_VERSION = "8"; public static List crusherRecipes = new ArrayList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 619ee1700..0c4202df6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -119,7 +119,7 @@ public class ActuallyAdditions{ public void serverStarting(FMLServerStartingEvent event){ Util.registerDispenserHandler(InitItems.itemBucketOil, new DispenserHandlerEmptyBucket()); Util.registerDispenserHandler(InitItems.itemBucketCanolaOil, new DispenserHandlerEmptyBucket()); - Util.registerDispenserHandler(Items.bucket, new DispenserHandlerFillBucket()); + Util.registerDispenserHandler(Items.BUCKET, new DispenserHandlerFillBucket()); Util.registerDispenserHandler(InitItems.itemFertilizer, new DispenserHandlerFertilize()); WorldData.init(event.getServer()); @@ -129,7 +129,7 @@ public class ActuallyAdditions{ public void missingMapping(FMLMissingMappingsEvent event){ for(FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()){ //Ignore removal of foreign paxels - if(mapping.name != null && mapping.name.toLowerCase(Locale.ROOT).startsWith(ModUtil.MOD_ID_LOWER+":")){ + if(mapping.name != null && mapping.name.toLowerCase(Locale.ROOT).startsWith(ModUtil.MOD_ID+":")){ if(mapping.name.contains("paxel") || mapping.name.contains("itemSpecial") || mapping.name.contains("blockBookStand")){ mapping.ignore(); ModUtil.LOGGER.info("Missing Mapping "+mapping.name+" is getting ignored. This is intentional."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java index e8bf4f7eb..3b9db821f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java @@ -30,7 +30,7 @@ public class InitAchievements{ achievementList.add(TheAchievements.values()[i].ach); } - theAchievementPage = new AchievementPage(StringUtil.localize("achievement.page."+ModUtil.MOD_ID_LOWER), achievementList.toArray(new Achievement[achievementList.size()])); + theAchievementPage = new AchievementPage(StringUtil.localize("achievement.page."+ModUtil.MOD_ID), achievementList.toArray(new Achievement[achievementList.size()])); pageNumber = AchievementPage.getAchievementPages().size(); AchievementPage.registerAchievementPage(theAchievementPage); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java index 09043220f..e9dd58bbd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java @@ -40,7 +40,7 @@ public enum TheAchievements{ } TheAchievements(String name, int x, int y, ItemStack displayStack, TheAchievements hasToHaveBefore, InitAchievements.Type type, boolean special){ - this.ach = new Achievement("achievement."+ModUtil.MOD_ID_LOWER+"."+name, ModUtil.MOD_ID_LOWER+"."+name, x, y, displayStack, hasToHaveBefore == null ? null : hasToHaveBefore.ach); + this.ach = new Achievement("achievement."+ModUtil.MOD_ID+"."+name, ModUtil.MOD_ID+"."+name, x, y, displayStack, hasToHaveBefore == null ? null : hasToHaveBefore.ach); if(hasToHaveBefore == null){ this.ach.initIndependentStat(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 1d3ba4006..e7eaaf5cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -47,11 +47,11 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); public BlockAtomicReconstructor(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(10F); this.setResistance(80F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override @@ -105,7 +105,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud ItemStack slot = ((TileEntityAtomicReconstructor)tile).getStackInSlot(0); String strg; if(slot == null){ - strg = StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".noLens"); + strg = StringUtil.localize("info."+ModUtil.MOD_ID+".noLens"); } else{ strg = slot.getItem().getItemStackDisplayName(slot); @@ -117,8 +117,8 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud } @Override - protected Class getItemBlock(){ - return TheItemBlock.class; + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); } @Override @@ -171,7 +171,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud this.toPick2 = Util.RANDOM.nextInt(NAME_FLAVOR_AMOUNTS_2)+1; } - String base = "tile."+ModUtil.MOD_ID_LOWER+"."+((BlockAtomicReconstructor)this.block).getBaseName()+".info."; + String base = "tile."+ModUtil.MOD_ID+"."+((BlockAtomicReconstructor)this.block).getBaseName()+".info."; list.add(StringUtil.localize(base+"1."+this.toPick1)+" "+StringUtil.localize(base+"2."+this.toPick2)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index 256528f26..a3b75b5ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -37,12 +37,12 @@ public class BlockBreaker extends BlockContainerBase{ private boolean isPlacer; public BlockBreaker(boolean isPlacer, String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.isPlacer = isPlacer; this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index dd76ce5b2..78bb4be1f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -29,11 +29,11 @@ import net.minecraft.world.World; public class BlockCanolaPress extends BlockContainerBase{ public BlockCanolaPress(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 16f90805f..3b4bb6a5d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -40,11 +40,11 @@ public class BlockCoalGenerator extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 1); public BlockCoalGenerator(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); this.setTickRandomly(true); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index d8cc50724..8ea934fcd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -36,11 +36,11 @@ public class BlockCoffeeMachine extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); public BlockCoffeeMachine(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 9bb11da4a..4ef3ad9d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -47,7 +47,7 @@ public class BlockColoredLamp extends BlockBase{ public boolean isOn; public BlockColoredLamp(boolean isOn, String name){ - super(Material.redstoneLight, name); + super(Material.REDSTONE_LIGHT, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(0.5F); this.setResistance(3.0F); @@ -118,8 +118,8 @@ public class BlockColoredLamp extends BlockBase{ } @Override - public Class getItemBlock(){ - return TheItemBlock.class; + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); } @Override @@ -127,8 +127,8 @@ public class BlockColoredLamp extends BlockBase{ ResourceLocation[] resLocs = new ResourceLocation[allLampTypes.length]; for(int i = 0; i < allLampTypes.length; i++){ String name = this.getBaseName()+allLampTypes[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } @@ -156,7 +156,7 @@ public class BlockColoredLamp extends BlockBase{ if(stack.getItemDamage() >= allLampTypes.length){ return null; } - return StringUtil.localize(this.getUnlocalizedName(stack)+".name")+(((BlockColoredLamp)this.block).isOn ? " ("+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".onSuffix.desc")+")" : ""); + return StringUtil.localize(this.getUnlocalizedName(stack)+".name")+(((BlockColoredLamp)this.block).isOn ? " ("+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".onSuffix.desc")+")" : ""); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 74993b07d..0d1b3fc03 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -39,11 +39,11 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class BlockCompost extends BlockContainerBase implements IHudDisplay{ public BlockCompost(String name){ - super(Material.wood, name); + super(Material.WOOD, name); this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(5.0F); - this.setStepSound(SoundType.WOOD); + this.setSoundType(SoundType.WOOD); //this.setBlockBoundsForItemRender(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index 99f96dc5e..fea22ae8f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -36,7 +36,7 @@ public class BlockCrystal extends BlockBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, allCrystals.length-1); public BlockCrystal(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHardness(1.5F); this.setResistance(10.0F); this.setHarvestLevel("pickaxe", 1); @@ -56,8 +56,8 @@ public class BlockCrystal extends BlockBase{ } @Override - public Class getItemBlock(){ - return TheItemBlock.class; + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); } @Override @@ -65,8 +65,8 @@ public class BlockCrystal extends BlockBase{ ResourceLocation[] resLocs = new ResourceLocation[allCrystals.length]; for(int i = 0; i < allCrystals.length; i++){ String name = this.getBaseName()+allCrystals[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index 8105849d2..d88d5516e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -36,11 +36,11 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); public BlockDirectionalBreaker(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index 8c38f3a98..fd7e33566 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -35,11 +35,11 @@ public class BlockDropper extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); public BlockDropper(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java index 83797a8a2..9da4e915b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java @@ -32,12 +32,12 @@ public class BlockEnergizer extends BlockContainerBase{ private boolean isEnergizer; public BlockEnergizer(boolean isEnergizer, String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.isEnergizer = isEnergizer; this.setHarvestLevel("pickaxe", 0); this.setHardness(2.0F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index d139dc427..dd10a1579 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -29,11 +29,11 @@ import net.minecraft.world.World; public class BlockFeeder extends BlockContainerBase{ public BlockFeeder(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(0.5F); this.setResistance(6.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index 2777b4264..d8794f597 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -29,11 +29,11 @@ import net.minecraft.world.World; public class BlockFermentingBarrel extends BlockContainerBase{ public BlockFermentingBarrel(String name){ - super(Material.wood, name); + super(Material.WOOD, name); this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(5.0F); - this.setStepSound(SoundType.WOOD); + this.setSoundType(SoundType.WOOD); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java index b21028f58..dde47a345 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java @@ -28,11 +28,11 @@ import net.minecraft.world.World; public class BlockFireworkBox extends BlockContainerBase{ public BlockFireworkBox(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index 927960329..c026a16c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -23,11 +23,11 @@ import net.minecraft.world.World; public class BlockFishingNet extends BlockContainerBase{ public BlockFishingNet(String name){ - super(Material.wood, name); + super(Material.WOOD, name); this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(3.0F); - this.setStepSound(SoundType.WOOD); + this.setSoundType(SoundType.WOOD); //TODO Fix block bounds //this.setBlockBounds(0F, 0F, 0F, 1F, 1F/16F, 1F); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index dbf04cddf..7f4f5ad2f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -38,12 +38,12 @@ public class BlockFluidCollector extends BlockContainerBase{ private boolean isPlacer; public BlockFluidCollector(boolean isPlacer, String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.isPlacer = isPlacer; this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index d25f4726f..29d2df273 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -42,11 +42,11 @@ public class BlockFurnaceDouble extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 7); public BlockFurnaceDouble(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); this.setTickRandomly(true); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index 81f9aa944..5978a3767 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -23,11 +23,11 @@ import net.minecraft.world.World; public class BlockFurnaceSolar extends BlockContainerBase{ public BlockFurnaceSolar(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); //TODO Block bounds //this.setBlockBounds(0F, 0F, 0F, 1F, 6F/16F, 1F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java index da301b1ad..b2bad00d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java @@ -19,11 +19,11 @@ import net.minecraft.item.ItemStack; public class BlockGeneric extends BlockBase{ public BlockGeneric(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 6d8ace673..16a3d8867 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -37,11 +37,11 @@ import java.util.ArrayList; public class BlockGiantChest extends BlockContainerBase{ public BlockGiantChest(String name){ - super(Material.wood, name); + super(Material.WOOD, name); this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(15.0F); - this.setStepSound(SoundType.WOOD); + this.setSoundType(SoundType.WOOD); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index 6017160f5..d0dd697f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -30,11 +30,11 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class BlockGreenhouseGlass extends BlockContainerBase{ public BlockGreenhouseGlass(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(0.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index d7938d1fc..d9498ad18 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -41,12 +41,12 @@ public class BlockGrinder extends BlockContainerBase{ private final boolean isDouble; public BlockGrinder(boolean isDouble, String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.isDouble = isDouble; this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); this.setTickRandomly(true); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java index bff65e535..31ed59697 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java @@ -22,11 +22,11 @@ import net.minecraft.world.World; public class BlockHeatCollector extends BlockContainerBase{ public BlockHeatCollector(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(2.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index b9d541cae..7d027651e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -40,11 +40,11 @@ public class BlockInputter extends BlockContainerBase{ public boolean isAdvanced; public BlockInputter(boolean isAdvanced, String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); this.setTickRandomly(true); this.isAdvanced = isAdvanced; } @@ -79,8 +79,8 @@ public class BlockInputter extends BlockContainerBase{ } @Override - public Class getItemBlock(){ - return TheItemBlock.class; + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); } @Override @@ -118,7 +118,7 @@ public class BlockInputter extends BlockContainerBase{ this.toPick = Util.RANDOM.nextInt(NAME_FLAVOR_AMOUNTS)+1; } - return StringUtil.localize(this.getUnlocalizedName()+".name")+" ("+StringUtil.localize("tile."+ModUtil.MOD_ID_LOWER+".blockInputter.add."+this.toPick+".name")+")"; + return StringUtil.localize(this.getUnlocalizedName()+".name")+" ("+StringUtil.localize("tile."+ModUtil.MOD_ID+".blockInputter.add."+this.toPick+".name")+")"; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index a491fad67..bdc9da2a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -32,11 +32,11 @@ import net.minecraft.world.World; public class BlockItemRepairer extends BlockContainerBase{ public BlockItemRepairer(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(20.0F); this.setResistance(15.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); this.setTickRandomly(true); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index dfac56797..6bbd89dc5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -31,11 +31,11 @@ public class BlockLampPowerer extends BlockBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); public BlockLampPowerer(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 7e64c02f7..8da959c04 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -31,11 +31,11 @@ public class BlockLaserRelay extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); public BlockLaserRelay(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java index d6e13c6aa..ae0bc9315 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java @@ -31,11 +31,11 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class BlockLavaFactoryController extends BlockContainerBase implements IHudDisplay{ public BlockLavaFactoryController(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(4.5F); this.setResistance(20.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override @@ -55,10 +55,10 @@ public class BlockLavaFactoryController extends BlockContainerBase implements IH if(factory != null){ int state = factory.isMultiblock(); if(state == TileEntityLavaFactoryController.NOT_MULTI){ - StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".factory.notPart.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+5, 200, StringUtil.DECIMAL_COLOR_WHITE, true); + StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localize("tooltip."+ModUtil.MOD_ID+".factory.notPart.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+5, 200, StringUtil.DECIMAL_COLOR_WHITE, true); } else if(state == TileEntityLavaFactoryController.HAS_AIR || state == TileEntityLavaFactoryController.HAS_LAVA){ - StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".factory.works.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+5, 200, StringUtil.DECIMAL_COLOR_WHITE, true); + StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localize("tooltip."+ModUtil.MOD_ID+".factory.works.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+5, 200, StringUtil.DECIMAL_COLOR_WHITE, true); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java index fd6bef369..0c90045e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java @@ -24,11 +24,11 @@ import net.minecraft.world.World; public class BlockLeafGenerator extends BlockContainerBase{ public BlockLeafGenerator(String name){ - super(Material.iron, name); + super(Material.IRON, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(5.0F); this.setResistance(10.0F); - this.setStepSound(SoundType.METAL); + this.setSoundType(SoundType.METAL); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index b8bfee837..89f0c83e3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -37,11 +37,11 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class BlockMiner extends BlockContainerBase implements IHudDisplay{ public BlockMiner(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(8F); this.setResistance(30F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index a9aa228cb..931386013 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -36,7 +36,7 @@ public class BlockMisc extends BlockBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, allMiscBlocks.length-1); public BlockMisc(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHardness(1.5F); this.setResistance(10.0F); this.setHarvestLevel("pickaxe", 1); @@ -56,8 +56,8 @@ public class BlockMisc extends BlockBase{ } @Override - public Class getItemBlock(){ - return TheItemBlock.class; + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); } @Override @@ -65,8 +65,8 @@ public class BlockMisc extends BlockBase{ ResourceLocation[] resLocs = new ResourceLocation[allMiscBlocks.length]; for(int i = 0; i < allMiscBlocks.length; i++){ String name = this.getBaseName()+allMiscBlocks[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index e9dd58f0d..12ba314e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -40,11 +40,11 @@ public class BlockOilGenerator extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 1); public BlockOilGenerator(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); this.setTickRandomly(true); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index cf9046eda..9f6974992 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -43,12 +43,12 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ public int range; public BlockPhantom(Type type, String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.type = type; this.setHarvestLevel("pickaxe", 0); this.setHardness(4.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); if(type == Type.FACE || type == Type.LIQUIFACE || type == Type.ENERGYFACE){ this.range = TileEntityPhantomface.RANGE; @@ -108,22 +108,22 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ if(tile != null){ if(tile instanceof IPhantomTile){ IPhantomTile phantom = (IPhantomTile)tile; - minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.GOLD+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".blockPhantomRange.desc")+": "+phantom.getRange(), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-40, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.GOLD+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".blockPhantomRange.desc")+": "+phantom.getRange(), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-40, StringUtil.DECIMAL_COLOR_WHITE); if(phantom.hasBoundPosition()){ int distance = (int)new Vec3d(posHit.getBlockPos()).distanceTo(new Vec3d(phantom.getBoundPosition())); Item item = PosUtil.getItemBlock(phantom.getBoundPosition(), minecraft.theWorld); String name = item == null ? "Absolutely Nothing" : item.getItemStackDisplayName(new ItemStack(PosUtil.getBlock(phantom.getBoundPosition(), minecraft.theWorld), 1, PosUtil.getMetadata(phantom.getBoundPosition(), minecraft.theWorld))); - StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localizeFormatted("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.blockInfo.desc", name, phantom.getBoundPosition().getX(), phantom.getBoundPosition().getY(), phantom.getBoundPosition().getZ(), distance), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-30, 200, StringUtil.DECIMAL_COLOR_WHITE, true); + StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localizeFormatted("tooltip."+ModUtil.MOD_ID+".phantom.blockInfo.desc", name, phantom.getBoundPosition().getX(), phantom.getBoundPosition().getY(), phantom.getBoundPosition().getZ(), distance), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-30, 200, StringUtil.DECIMAL_COLOR_WHITE, true); if(phantom.isBoundThingInRange()){ - StringUtil.drawSplitString(minecraft.fontRendererObj, TextFormatting.DARK_GREEN+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); + StringUtil.drawSplitString(minecraft.fontRendererObj, TextFormatting.DARK_GREEN+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.connectedRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); } else{ - StringUtil.drawSplitString(minecraft.fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connectedNoRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); + StringUtil.drawSplitString(minecraft.fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.connectedNoRange.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, 200, StringUtil.DECIMAL_COLOR_WHITE, true); } } else{ - minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.notConnected.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.RED+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.notConnected.desc"), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+25, StringUtil.DECIMAL_COLOR_WHITE); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index dba6d34cf..24873bc0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -23,11 +23,11 @@ import net.minecraft.world.World; public class BlockPhantomBooster extends BlockContainerBase{ public BlockPhantomBooster(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); //TODO Fix block bounds //float f = 1F/16F; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java index b28ef8bb4..164e6fdb8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java @@ -29,11 +29,11 @@ import net.minecraft.world.World; public class BlockRangedCollector extends BlockContainerBase{ public BlockRangedCollector(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index e1d9c5de3..a12121528 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -85,8 +85,8 @@ public class BlockSlabs extends BlockBase{ } @Override - public Class getItemBlock(){ - return TheItemBlock.class; + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 07af8bbf5..9aef4bef9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -45,10 +45,10 @@ public class BlockSmileyCloud extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 7); public BlockSmileyCloud(String name){ - super(Material.cloth, name); + super(Material.CLOTH, name); this.setHardness(0.5F); this.setResistance(5.0F); - this.setStepSound(SoundType.CLOTH); + this.setSoundType(SoundType.CLOTH); this.setTickRandomly(true); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 2d6c4fddc..229d1b40f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -41,11 +41,11 @@ public class BlockTreasureChest extends BlockBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); public BlockTreasureChest(String name){ - super(Material.wood, name); + super(Material.WOOD, name); this.setHarvestLevel("axe", 0); this.setHardness(300.0F); this.setResistance(50.0F); - this.setStepSound(SoundType.WOOD); + this.setSoundType(SoundType.WOOD); this.setTickRandomly(true); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index fce909380..fc5de2f80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -51,7 +51,7 @@ public class BlockWallAA extends BlockBase{ this.setHardness(1.5F); this.setResistance(10F); - this.setStepSound(base.getStepSound()); + this.setSoundType(base.getSoundType()); this.setDefaultState(this.blockState.getBaseState().withProperty(BlockWall.UP, false).withProperty(BlockWall.NORTH, false).withProperty(BlockWall.EAST, false).withProperty(BlockWall.SOUTH, false).withProperty(BlockWall.WEST, false)); } @@ -129,7 +129,7 @@ public class BlockWallAA extends BlockBase{ public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos){ Block block = PosUtil.getBlock(pos, worldIn); IBlockState state = worldIn.getBlockState(pos); - return block != Blocks.barrier && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial(state).isOpaque() && block.isFullCube(state)) && block.getMaterial(state) != Material.gourd)); + return block != Blocks.BARRIER && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial(state).isOpaque() && block.isFullCube(state)) && block.getMaterial(state) != Material.GOURD)); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 2bcb28691..b212845d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -47,13 +47,13 @@ public class BlockWildPlant extends BlockBushBase{ public BlockWildPlant(String name){ super(name); - this.setStepSound(SoundType.PLANT); + this.setSoundType(SoundType.PLANT); } @Override public boolean canBlockStay(World world, BlockPos pos, IBlockState state){ BlockPos offset = PosUtil.offset(pos, 0, -1, 0); - return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.water : PosUtil.getBlock(offset, world).canSustainPlant(world.getBlockState(offset), world, offset, EnumFacing.UP, this); + return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.WATER : PosUtil.getBlock(offset, world).canSustainPlant(world.getBlockState(offset), world, offset, EnumFacing.UP, this); } @Override @@ -83,8 +83,8 @@ public class BlockWildPlant extends BlockBushBase{ } @Override - public Class getItemBlock(){ - return TheItemBlock.class; + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); } @Override @@ -97,8 +97,8 @@ public class BlockWildPlant extends BlockBushBase{ ResourceLocation[] resLocs = new ResourceLocation[allWildPlants.length]; for(int i = 0; i < allWildPlants.length; i++){ String name = this.getBaseName()+allWildPlants[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index e4e0858c4..c4ed64801 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -39,11 +39,11 @@ public class BlockXPSolidifier extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); public BlockXPSolidifier(String name){ - super(Material.rock, name); + super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(2.5F); this.setResistance(10.0F); - this.setStepSound(SoundType.STONE); + this.setSoundType(SoundType.STONE); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 0d149743f..0bb456f98 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -43,8 +43,8 @@ public class BlockBase extends Block{ return this.name; } - protected Class getItemBlock(){ - return ItemBlockBase.class; + protected ItemBlockBase getItemBlock(){ + return new ItemBlockBase(this); } public boolean shouldAddCreative(){ @@ -52,7 +52,7 @@ public class BlockBase extends Block{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index 262caa639..d509bec56 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -28,7 +28,7 @@ public class BlockBushBase extends BlockBush{ public BlockBushBase(String name){ this.name = name; - this.setStepSound(SoundType.PLANT); + this.setSoundType(SoundType.PLANT); this.register(); } @@ -43,8 +43,8 @@ public class BlockBushBase extends BlockBush{ return this.name; } - protected Class getItemBlock(){ - return ItemBlockBase.class; + protected ItemBlockBase getItemBlock(){ + return new ItemBlockBase(this); } public boolean shouldAddCreative(){ @@ -52,7 +52,7 @@ public class BlockBushBase extends BlockBush{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 67e108062..f7deb7a32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.creative.CreativeTab; import de.ellpeck.actuallyadditions.mod.tile.*; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; @@ -20,7 +20,6 @@ import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockRedstoneTorch; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockStateBase; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; @@ -38,7 +37,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fml.common.registry.GameRegistry; import java.util.ArrayList; import java.util.Random; @@ -55,14 +53,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } private void register(){ - this.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+this.getBaseName()); - GameRegistry.registerBlock(this, this.getItemBlock(), this.getBaseName()); - if(this.shouldAddCreative()){ - this.setCreativeTab(CreativeTab.instance); - } - else{ - this.setCreativeTab(null); - } + ItemUtil.registerBlock(this, this.getItemBlock(), this.getBaseName(), this.shouldAddCreative()); this.registerRendering(); } @@ -71,8 +62,8 @@ public abstract class BlockContainerBase extends BlockContainer{ return this.name; } - protected Class getItemBlock(){ - return ItemBlockBase.class; + protected ItemBlockBase getItemBlock(){ + return new ItemBlockBase(this); } public boolean shouldAddCreative(){ @@ -80,7 +71,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index c88ffda61..6dacad292 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -42,8 +42,8 @@ public class BlockFluidFlowing extends BlockFluidClassic{ return this.name; } - protected Class getItemBlock(){ - return ItemBlockBase.class; + protected ItemBlockBase getItemBlock(){ + return new ItemBlockBase(this); } public boolean shouldAddCreative(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 9ff9a0d40..3688daa01 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -57,8 +57,8 @@ public class BlockPlant extends BlockCrops{ return this.name; } - protected Class getItemBlock(){ - return ItemBlockBase.class; + protected ItemBlockBase getItemBlock(){ + return new ItemBlockBase(this); } public boolean shouldAddCreative(){ @@ -66,7 +66,7 @@ public class BlockPlant extends BlockCrops{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index 39056f9c3..c8294e7ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -46,8 +46,8 @@ public class BlockStair extends BlockStairs{ return this.name; } - protected Class getItemBlock(){ - return ItemBlockBase.class; + protected ItemBlockBase getItemBlock(){ + return new ItemBlockBase(this); } public boolean shouldAddCreative(){ @@ -55,7 +55,7 @@ public class BlockStair extends BlockStairs{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index d9938ee01..d180e5027 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -34,7 +34,7 @@ public class RenderCompost extends TileEntitySpecialRenderer{ GlStateManager.translate(0F, 1F, 0F); } GlStateManager.scale(1.5F, i, 1.5F); - AssetUtil.renderBlockInWorld(Blocks.dirt, compost.getStackInSlot(0).getItem() == InitItems.itemFertilizer ? 1 : 0); + AssetUtil.renderBlockInWorld(Blocks.DIRT, compost.getStackInSlot(0).getItem() == InitItems.itemFertilizer ? 1 : 0); GlStateManager.popMatrix(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index ffa745839..67afcdb41 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -80,9 +80,9 @@ public class BookletUtils{ //Draw No Entry title if(booklet.currentEntrySet.entry == null){ - String strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.manualName.1"); + String strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID+".booklet.manualName.1"); booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+12, 0); - strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.manualName.2"); + strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID+".booklet.manualName.2"); booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+12+booklet.getFontRenderer().FONT_HEIGHT, 0); String version; @@ -103,13 +103,13 @@ public class BookletUtils{ version = "Dev's Edition"; } else{ - version = StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".booklet.edition")+" "+ModUtil.VERSION.substring(ModUtil.VERSION.indexOf("r")+1); + version = StringUtil.localize("info."+ModUtil.MOD_ID+".booklet.edition")+" "+ModUtil.VERSION.substring(ModUtil.VERSION.indexOf("r")+1); } strg = TextFormatting.GOLD+TextFormatting.ITALIC.toString()+"-"+version+"-"; booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+33, 0); } - String strg = booklet.currentEntrySet.chapter == null ? (booklet.currentEntrySet.entry == null ? StringUtil.localize("itemGroup."+ModUtil.MOD_ID_LOWER) : booklet.currentEntrySet.entry.getLocalizedName()) : booklet.currentEntrySet.chapter.getLocalizedName(); + String strg = booklet.currentEntrySet.chapter == null ? (booklet.currentEntrySet.entry == null ? StringUtil.localize("itemGroup."+ModUtil.MOD_ID) : booklet.currentEntrySet.entry.getLocalizedName()) : booklet.currentEntrySet.chapter.getLocalizedName(); booklet.drawCenteredString(booklet.getFontRenderer(), strg, booklet.guiLeft+booklet.xSize/2, booklet.guiTop-9, StringUtil.DECIMAL_COLOR_WHITE); } @@ -177,10 +177,10 @@ public class BookletUtils{ } //Renders the amount of words and chars the book has else{ - String wordCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID_LOWER+".amountOfWords", ClientProxy.bookletWordCount); + String wordCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID+".amountOfWords", ClientProxy.bookletWordCount); booklet.getFontRenderer().drawString(TextFormatting.ITALIC+wordCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(wordCountString)-15, booklet.guiTop+booklet.ySize-18-booklet.getFontRenderer().FONT_HEIGHT, 0); - String charCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID_LOWER+".amountOfChars", ClientProxy.bookletCharCount); + String charCountString = StringUtil.localizeFormatted("booklet."+ModUtil.MOD_ID+".amountOfChars", ClientProxy.bookletCharCount); booklet.getFontRenderer().drawString(TextFormatting.ITALIC+charCountString, booklet.guiLeft+booklet.xSize-booklet.getFontRenderer().getStringWidth(charCountString)-15, booklet.guiTop+booklet.ySize-18, 0); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index f39d8b2ad..03edd3adf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -26,8 +26,6 @@ import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; @@ -165,7 +163,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ if(AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){ if(this.hisNameIsAt+1 >= AND_HIS_NAME_IS.length){ //TODO Fix sound - //Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation(ModUtil.MOD_ID_LOWER, "duhDuhDuhDuuuh"))); + //Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation(ModUtil.MOD_ID, "duhDuhDuhDuuuh"))); ModUtil.LOGGER.info("AND HIS NAME IS JOHN CENA DUH DUH DUH DUUUH"); this.hisNameIsAt = 0; } @@ -286,12 +284,12 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ ArrayList updateHover = new ArrayList(); if(UpdateChecker.checkFailed){ - updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.failed")).getFormattedText()); + updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.failed")).getFormattedText()); } else if(UpdateChecker.needsUpdateNotify){ - updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.generic")).getFormattedText()); - updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString)).getFormattedText()); - updateHover.add(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.buttonOptions")); + updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.generic")).getFormattedText()); + updateHover.add(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString)).getFormattedText()); + updateHover.add(StringUtil.localize("info."+ModUtil.MOD_ID+".update.buttonOptions")); } this.buttonUpdate = new TexturedButton(4, this.guiLeft-11, this.guiTop-11, 245, 0, 11, 11, updateHover); this.buttonUpdate.visible = UpdateChecker.needsUpdateNotify; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index a32c0f256..5cdd81c78 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -62,7 +62,7 @@ public class InitBooklet{ new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(8, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(9, LensNoneRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); new BookletChapter("coalGen", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockCoalGenerator), new PageCrafting(1, BlockCrafting.recipeCoalGen).addTextReplacement("", TileEntityCoalGenerator.PRODUCE).setPageStacksWildcard()); new BookletChapter("craftingIngs", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeCoil).setNoText(), new PageCrafting(3, ItemCrafting.recipeCoilAdvanced).setNoText(), new PageCrafting(4, BlockCrafting.recipeCase).setNoText(), new PageCrafting(5, BlockCrafting.recipeEnderPearlBlock).setNoText(), new PageCrafting(6, BlockCrafting.recipeEnderCase).setNoText(), new PageCrafting(7, ItemCrafting.recipeRing).setNoText(), new PageCrafting(8, ItemCrafting.recipeKnifeHandle).setNoText(), new PageCrafting(9, ItemCrafting.recipeKnifeBlade).setNoText(), new PageCrafting(10, ItemCrafting.recipeKnife).setNoText(), new PageCrafting(11, ItemCrafting.recipeDough).setNoText(), new PageCrafting(12, ItemCrafting.recipeRiceDough).setNoText(), new PageCrafting(13, BlockCrafting.recipeIronCase).setNoText()).setImportant(); - new BookletChapter("rf", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(Items.redstone), new PageTextOnly(1)); + new BookletChapter("rf", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(Items.REDSTONE), new PageTextOnly(1)); //Miscellaneous new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, LensNoneRecipeHandler.recipeColorLens), new PageReconstructor(4, LensNoneRecipeHandler.recipeExplosionLens), new PageReconstructor(5, LensNoneRecipeHandler.recipeDamageLens), new PageReconstructor(6, LensNoneRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(7, LensNoneRecipeHandler.recipeLeather).setNoText(), new PageReconstructor(8, LensNoneRecipeHandler.recipeNetherWart).setNoText()).setImportant(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 87b019555..0367918d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -63,7 +63,7 @@ public class IndexButton extends GuiButton{ public void drawHover(int mouseX, int mouseY){ if(this.chap instanceof BookletChapter && ((BookletChapter)this.chap).isIncomplete){ - this.gui.drawHoveringText(this.gui.getFontRenderer().listFormattedStringToWidth(TextFormatting.RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".unavailable"), 250), mouseX, mouseY); + this.gui.drawHoveringText(this.gui.getFontRenderer().listFormattedStringToWidth(TextFormatting.RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".unavailable"), 250), mouseX, mouseY); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index b8de3244d..ded33f46e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -57,7 +57,7 @@ public class BookletChapter implements IBookletChapter{ @Override public String getLocalizedName(){ - return StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".chapter."+this.unlocalizedName+".name"); + return StringUtil.localize("booklet."+ModUtil.MOD_ID+".chapter."+this.unlocalizedName+".name"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java index 26dc947fc..aaa6391cc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java @@ -50,7 +50,7 @@ public class BookletEntry implements IBookletEntry{ @Override public String getLocalizedName(){ - return StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".indexEntry."+this.unlocalizedName+".name"); + return StringUtil.localize("booklet."+ModUtil.MOD_ID+".indexEntry."+this.unlocalizedName+".name"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java index c6d3553c6..7a5834efb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java @@ -43,7 +43,7 @@ public class BookletPageAA extends BookletPage{ return null; } - String base = StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".chapter."+this.chapter.getUnlocalizedName()+".text."+this.localizationKey); + String base = StringUtil.localize("booklet."+ModUtil.MOD_ID+".chapter."+this.chapter.getUnlocalizedName()+".text."+this.localizationKey); base = base.replaceAll("", TextFormatting.DARK_GREEN+""); base = base.replaceAll("", TextFormatting.BLUE+""); base = base.replaceAll("", TextFormatting.BLACK+""); @@ -80,7 +80,7 @@ public class BookletPageAA extends BookletPage{ @Override public String getClickToSeeRecipeString(){ - return TextFormatting.GOLD+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".clickToSeeRecipe"); + return TextFormatting.GOLD+StringUtil.localize("booklet."+ModUtil.MOD_ID+".clickToSeeRecipe"); } public BookletPage setNoText(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index 230e6a9fd..0ccfddebc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -64,10 +64,10 @@ public class PageCrafting extends BookletPageAA{ IRecipe recipe = this.recipes[this.recipePos]; if(recipe == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ - String strg = StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+"."+(recipe instanceof ShapedRecipes ? "shapedRecipe" : (recipe instanceof ShapelessRecipes ? "shapelessRecipe" : (recipe instanceof ShapelessOreRecipe ? "shapelessOreRecipe" : "shapedOreRecipe")))); + String strg = StringUtil.localize("booklet."+ModUtil.MOD_ID+"."+(recipe instanceof ShapedRecipes ? "shapedRecipe" : (recipe instanceof ShapelessRecipes ? "shapelessRecipe" : (recipe instanceof ShapelessOreRecipe ? "shapelessOreRecipe" : "shapedOreRecipe")))); Minecraft.getMinecraft().fontRendererObj.drawString(strg, gui.getGuiLeft()+gui.getXSize()/2-Minecraft.getMinecraft().fontRendererObj.getStringWidth(strg)/2, gui.getGuiTop()+10, 0); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index 85028df26..56169dd26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -53,7 +53,7 @@ public class PageCrusherRecipe extends BookletPageAA{ @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ if(recipe == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ String strg = "Crusher Recipe"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index 75d591dbe..bb52864c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -57,7 +57,7 @@ public class PageFurnace extends BookletPageAA{ public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ ItemStack input = this.input != null ? this.input : this.getInputForOutput(this.result); if(input == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ String strg = "Furnace Recipe"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index ffd2988de..66ec0bb2a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -58,7 +58,7 @@ public class PageReconstructor extends BookletPageAA{ public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ LensNoneRecipe recipe = this.recipes[this.recipePos]; if(recipe == null){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ String strg = "Atomic Reconstructor"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index d05064a5f..6a20cdfd6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -45,7 +45,7 @@ public class ConfigurationHandler{ @SubscribeEvent public void onConfigurationChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event){ - if(event.modID.equalsIgnoreCase(ModUtil.MOD_ID)){ + if(event.getModID().equalsIgnoreCase(ModUtil.MOD_ID)){ loadConfig(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index b6586a31c..c63a66788 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -88,8 +88,8 @@ public class BlockCrafting{ if(ConfigCrafting.FIREWORK_BOX.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFireworkBox), "GGG", "SSS", "CCC", - 'G', new ItemStack(Items.gunpowder), - 'S', new ItemStack(Items.stick), + 'G', new ItemStack(Items.GUNPOWDER), + 'S', new ItemStack(Items.STICK), 'C', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); recipeFireworkBox = RecipeUtil.lastIRecipe(); } @@ -174,8 +174,8 @@ public class BlockCrafting{ if(ConfigCrafting.LASER_RELAY.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLaserRelay, 2), "OBO", "RCR", "OBO", - 'B', new ItemStack(Blocks.redstone_block), - 'O', new ItemStack(Blocks.obsidian), + 'B', new ItemStack(Blocks.REDSTONE_BLOCK), + 'O', new ItemStack(Blocks.OBSIDIAN), 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); recipeLaserRelay = RecipeUtil.lastIRecipe(); @@ -185,8 +185,8 @@ public class BlockCrafting{ if(ConfigCrafting.RANGED_COLLECTOR.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockRangedCollector), " A ", "EHE", " C ", - 'E', new ItemStack(Items.ender_pearl), - 'H', new ItemStack(Blocks.hopper), + 'E', new ItemStack(Items.ENDER_PEARL), + 'H', new ItemStack(Blocks.HOPPER), 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'A', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()))); recipeRangedCollector = RecipeUtil.lastIRecipe(); @@ -205,7 +205,7 @@ public class BlockCrafting{ if(ConfigCrafting.CLOUD.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockSmileyCloud), " W ", "WXW", " W ", - 'W', new ItemStack(Blocks.wool, 1, Util.WILDCARD), + 'W', new ItemStack(Blocks.WOOL, 1, Util.WILDCARD), 'X', new ItemStack(InitItems.itemSolidifiedExperience))); recipeSmileyCloud = RecipeUtil.lastIRecipe(); } @@ -232,9 +232,9 @@ public class BlockCrafting{ //Charcoal Block GameRegistry.addRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.CHARCOAL_BLOCK.ordinal()), "CCC", "CCC", "CCC", - 'C', new ItemStack(Items.coal, 1, 1)); + 'C', new ItemStack(Items.COAL, 1, 1)); recipeBlockChar = RecipeUtil.lastIRecipe(); - GameRegistry.addShapelessRecipe(new ItemStack(Items.coal, 9, 1), + GameRegistry.addShapelessRecipe(new ItemStack(Items.COAL, 9, 1), new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.CHARCOAL_BLOCK.ordinal())); //Wood Casing @@ -261,7 +261,7 @@ public class BlockCrafting{ if(ConfigCrafting.ENDER_CASING.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()), "WSW", "SRS", "WSW", - 'W', new ItemStack(Items.ender_pearl), + 'W', new ItemStack(Items.ENDER_PEARL), 'R', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.QUARTZ.ordinal()), 'S', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()))); recipeEnderCase = RecipeUtil.lastIRecipe(); @@ -315,7 +315,7 @@ public class BlockCrafting{ 'C', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'S', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'I', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), - 'L', Items.lava_bucket)); + 'L', Items.LAVA_BUCKET)); recipeLavaFactory = RecipeUtil.lastIRecipe(); } @@ -355,7 +355,7 @@ public class BlockCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockPhantomface), " C ", "EBE", " S ", 'E', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), - 'C', Blocks.chest, + 'C', Blocks.CHEST, 'S', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'B', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()))); recipePhantomface = RecipeUtil.lastIRecipe(); @@ -390,7 +390,7 @@ public class BlockCrafting{ if(ConfigCrafting.PHANTOM_LIQUIFACE.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockPhantomLiquiface), "RFR", - 'R', Items.bucket, + 'R', Items.BUCKET, 'F', InitBlocks.blockPhantomface)); recipeLiquiface = RecipeUtil.lastIRecipe(); } @@ -399,7 +399,7 @@ public class BlockCrafting{ if(ConfigCrafting.LIQUID_PLACER.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFluidPlacer), "RFR", - 'R', Items.bucket, + 'R', Items.BUCKET, 'F', InitBlocks.blockPlacer)); recipeLiquidPlacer = RecipeUtil.lastIRecipe(); } @@ -408,7 +408,7 @@ public class BlockCrafting{ if(ConfigCrafting.LIQUID_BREAKER.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFluidCollector), "RFR", - 'R', Items.bucket, + 'R', Items.BUCKET, 'F', InitBlocks.blockBreaker)); recipeLiquidCollector = RecipeUtil.lastIRecipe(); } @@ -429,7 +429,7 @@ public class BlockCrafting{ "CRC", "CBC", "CRC", 'C', "cobblestone", 'B', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), - 'R', new ItemStack(Items.coal, 1, Util.WILDCARD))); + 'R', new ItemStack(Items.COAL, 1, Util.WILDCARD))); recipeCoalGen = RecipeUtil.lastIRecipe(); } @@ -448,9 +448,9 @@ public class BlockCrafting{ //Enderpearl Block GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()), "EE", "EE", - 'E', Items.ender_pearl)); + 'E', Items.ENDER_PEARL)); recipeEnderPearlBlock = RecipeUtil.lastIRecipe(); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(Items.ender_pearl, 4), + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(Items.ENDER_PEARL, 4), new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDERPEARL_BLOCK.ordinal()))); //Quartz Block @@ -464,7 +464,7 @@ public class BlockCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFishingNet), "SSS", "SDS", "SSS", 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), - 'S', Items.string)); + 'S', Items.STRING)); recipeFisher = RecipeUtil.lastIRecipe(); } @@ -487,7 +487,7 @@ public class BlockCrafting{ 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'Q', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), - 'B', new ItemStack(Blocks.iron_bars))); + 'B', new ItemStack(Blocks.IRON_BARS))); recipeSolar = RecipeUtil.lastIRecipe(); } @@ -496,11 +496,11 @@ public class BlockCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockHeatCollector), "BRB", "CDC", "BQB", 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), - 'R', new ItemStack(Items.repeater), + 'R', new ItemStack(Items.REPEATER), 'Q', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), - 'L', new ItemStack(Items.lava_bucket), + 'L', new ItemStack(Items.LAVA_BUCKET), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), - 'B', new ItemStack(Blocks.iron_bars))); + 'B', new ItemStack(Blocks.IRON_BARS))); recipeHeatCollector = RecipeUtil.lastIRecipe(); } @@ -541,8 +541,8 @@ public class BlockCrafting{ 'C', "cobblestone", 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'Q', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), - 'P', new ItemStack(Blocks.piston), - 'F', new ItemStack(Items.flint))); + 'P', new ItemStack(Blocks.PISTON), + 'F', new ItemStack(Items.FLINT))); recipeCrusher = RecipeUtil.lastIRecipe(); } @@ -554,7 +554,7 @@ public class BlockCrafting{ 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), 'R', InitBlocks.blockGrinder, 'F', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), - 'P', new ItemStack(Blocks.piston))); + 'P', new ItemStack(Blocks.PISTON))); recipeDoubleCrusher = RecipeUtil.lastIRecipe(); } @@ -564,7 +564,7 @@ public class BlockCrafting{ "PDC", "RFR", "CDP", 'C', "cobblestone", 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), - 'R', new ItemStack(Blocks.furnace), + 'R', new ItemStack(Blocks.FURNACE), 'F', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.IRON_CASING.ordinal()), 'P', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); recipeFurnace = RecipeUtil.lastIRecipe(); @@ -576,7 +576,7 @@ public class BlockCrafting{ "WCW", "DHD", "WCW", 'W', "plankWood", 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), - 'C', new ItemStack(Items.golden_carrot), + 'C', new ItemStack(Items.GOLDEN_CARROT), 'H', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()))); recipeFeeder = RecipeUtil.lastIRecipe(); } @@ -585,7 +585,7 @@ public class BlockCrafting{ if(ConfigCrafting.GIANT_CHEST.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockGiantChest), "CWC", "WDW", "CWC", - 'C', new ItemStack(Blocks.chest), + 'C', new ItemStack(Blocks.CHEST), 'D', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()), 'W', "plankWood")); recipeCrate = RecipeUtil.lastIRecipe(); @@ -627,7 +627,7 @@ public class BlockCrafting{ "CBC", "CDR", "CBC", 'B', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 'C', "cobblestone", - 'D', Blocks.dropper, + 'D', Blocks.DROPPER, 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); recipeDropper = RecipeUtil.lastIRecipe(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index c639e9c1a..8952b998c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -34,38 +34,38 @@ public class CrusherCrafting{ public static void init(){ ModUtil.LOGGER.info("Initializing Crusher Recipes..."); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.bone), new ItemStack(Items.dye, 6, 15)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.BONE), new ItemStack(Items.DYE, 6, 15)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.reeds), new ItemStack(Items.sugar, 3)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.REEDS), new ItemStack(Items.SUGAR, 3)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.yellow_flower), new ItemStack(Items.dye, 3, 11)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.YELLOW_FLOWER), new ItemStack(Items.DYE, 3, 11)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 0), new ItemStack(Items.dye, 3, 1)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 0), new ItemStack(Items.DYE, 3, 1)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 1), new ItemStack(Items.dye, 3, 12)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 1), new ItemStack(Items.DYE, 3, 12)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 2), new ItemStack(Items.dye, 3, 13)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 2), new ItemStack(Items.DYE, 3, 13)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 3), new ItemStack(Items.dye, 3, 7)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 3), new ItemStack(Items.DYE, 3, 7)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 4), new ItemStack(Items.dye, 3, 1)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 4), new ItemStack(Items.DYE, 3, 1)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 5), new ItemStack(Items.dye, 3, 14)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 5), new ItemStack(Items.DYE, 3, 14)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 6), new ItemStack(Items.dye, 3, 7)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 6), new ItemStack(Items.DYE, 3, 7)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 7), new ItemStack(Items.dye, 3, 9)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 7), new ItemStack(Items.DYE, 3, 9)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.red_flower, 1, 8), new ItemStack(Items.dye, 3, 7)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 8), new ItemStack(Items.DYE, 3, 7)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 0), new ItemStack(Items.dye, 4, 11)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 0), new ItemStack(Items.DYE, 4, 11)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 1), new ItemStack(Items.dye, 4, 13)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 1), new ItemStack(Items.DYE, 4, 13)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 4), new ItemStack(Items.dye, 4, 1)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 4), new ItemStack(Items.DYE, 4, 1)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.double_plant, 1, 5), new ItemStack(Items.dye, 4, 9)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 5), new ItemStack(Items.DYE, 4, 9)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe("oreRedstone", "dustRedstone", 10); @@ -75,26 +75,26 @@ public class CrusherCrafting{ ActuallyAdditionsAPI.addCrusherRecipe("blockCoal", "coal", 9); ActuallyAdditionsAPI.addCrusherRecipe("oreQuartz", "gemQuartz", 3); ActuallyAdditionsAPI.addCrusherRecipe("cobblestone", "sand", 1); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.gravel), new ItemStack(Items.flint), new ItemStack(Items.flint), 50); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.GRAVEL), new ItemStack(Items.FLINT), new ItemStack(Items.FLINT), 50); ActuallyAdditionsAPI.addCrusherRecipe("stone", "cobblestone", 1); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.sugar, 2)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.SUGAR, 2)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.glowstone), new ItemStack(Items.glowstone_dust, 4)); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.GLOWSTONE), new ItemStack(Items.GLOWSTONE_DUST, 4)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe("oreNickel", "dustNickel", 2, "dustPlatinum", 1, 15); ActuallyAdditionsAPI.addCrusherRecipe("oreIron", "dustIron", 2, "dustGold", 1, 20); if(ConfigCrafting.HORSE_ARMORS.isEnabled()){ - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.iron_horse_armor), "dustIron", 8); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.IRON_HORSE_ARMOR), "dustIron", 8); recipeIronHorseArmor = RecipeUtil.lastCrusherRecipe(); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.golden_horse_armor), "dustGold", 8); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.GOLDEN_HORSE_ARMOR), "dustGold", 8); recipeGoldHorseArmor = RecipeUtil.lastCrusherRecipe(); - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.diamond_horse_armor), "dustDiamond", 8); + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.DIAMOND_HORSE_ARMOR), "dustDiamond", 8); recipeDiamondHorseArmor = RecipeUtil.lastCrusherRecipe(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java index c037c124c..db4d3894b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java @@ -57,7 +57,7 @@ public class FoodCrafting{ //Bacon if(ConfigCrafting.BACON.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemFoods, 3, TheFoods.BACON.ordinal()), - knifeStack.copy(), new ItemStack(Items.cooked_porkchop))); + knifeStack.copy(), new ItemStack(Items.COOKED_PORKCHOP))); recipeBacon = RecipeUtil.lastIRecipe(); } @@ -72,9 +72,9 @@ public class FoodCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.PIZZA.ordinal()), "HKH", "MCF", " D ", 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DOUGH.ordinal()), - 'M', new ItemStack(Blocks.brown_mushroom), + 'M', new ItemStack(Blocks.BROWN_MUSHROOM), 'C', "cropCarrot", - 'F', new ItemStack(Items.cooked_fish, 1, Util.WILDCARD), + 'F', new ItemStack(Items.COOKED_FISH, 1, Util.WILDCARD), 'K', knifeStack.copy(), 'H', new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()))); recipePizza = RecipeUtil.lastIRecipe(); @@ -87,7 +87,7 @@ public class FoodCrafting{ 'T', new ItemStack(InitItems.itemFoods, 1, TheFoods.TOAST.ordinal()), 'C', new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()), 'K', knifeStack.copy(), - 'B', new ItemStack(Items.cooked_beef))); + 'B', new ItemStack(Items.COOKED_BEEF))); recipeHamburger = RecipeUtil.lastIRecipe(); } @@ -96,7 +96,7 @@ public class FoodCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.BIG_COOKIE.ordinal()), "DCD", "CDC", "DCD", 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DOUGH.ordinal()), - 'C', new ItemStack(Items.dye, 1, 3))); + 'C', new ItemStack(Items.DYE, 1, 3))); recipeBigCookie = RecipeUtil.lastIRecipe(); } @@ -104,9 +104,9 @@ public class FoodCrafting{ if(ConfigCrafting.SUB.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.SUBMARINE_SANDWICH.ordinal()), "KCP", "FB ", "PCP", - 'P', new ItemStack(Items.paper), + 'P', new ItemStack(Items.PAPER), 'C', new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()), - 'F', new ItemStack(Items.cooked_fish, 1, Util.WILDCARD), + 'F', new ItemStack(Items.COOKED_BEEF, 1, Util.WILDCARD), 'B', new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal()), 'K', knifeStack.copy())); recipeSubSandwich = RecipeUtil.lastIRecipe(); @@ -115,7 +115,7 @@ public class FoodCrafting{ //French Fry if(ConfigCrafting.FRENCH_FRY.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemFoods, 2, TheFoods.FRENCH_FRY.ordinal()), - new ItemStack(Items.baked_potato), + new ItemStack(Items.BAKED_POTATO), knifeStack.copy())); recipeFrenchFry = RecipeUtil.lastIRecipe(); } @@ -133,7 +133,7 @@ public class FoodCrafting{ if(ConfigCrafting.FISH_N_CHIPS.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.FISH_N_CHIPS.ordinal()), "FIF", " P ", - 'I', new ItemStack(Items.cooked_fish, 1, Util.WILDCARD), + 'I', new ItemStack(Items.COOKED_FISH, 1, Util.WILDCARD), 'P', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.PAPER_CONE.ordinal()), 'F', new ItemStack(InitItems.itemFoods, 1, TheFoods.FRENCH_FRY.ordinal()))); recipeFishNChips = RecipeUtil.lastIRecipe(); @@ -142,7 +142,7 @@ public class FoodCrafting{ //Cheese if(ConfigCrafting.CHEESE.isEnabled()){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.CHEESE.ordinal()), - new ItemStack(Items.milk_bucket)); + new ItemStack(Items.MILK_BUCKET)); recipeCheese = RecipeUtil.lastIRecipe(); } @@ -150,15 +150,15 @@ public class FoodCrafting{ if(ConfigCrafting.PUMPKIN_STEW.isEnabled()){ GameRegistry.addRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.PUMPKIN_STEW.ordinal()), "P", "B", - 'P', new ItemStack(Blocks.pumpkin), - 'B', new ItemStack(Items.bowl)); + 'P', new ItemStack(Blocks.PUMPKIN), + 'B', new ItemStack(Items.BOWL)); recipePumpkinStew = RecipeUtil.lastIRecipe(); } //Carrot Juice if(ConfigCrafting.CARROT_JUICE.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.CARROT_JUICE.ordinal()), - new ItemStack(Items.glass_bottle), "cropCarrot", knifeStack.copy())); + new ItemStack(Items.GLASS_BOTTLE), "cropCarrot", knifeStack.copy())); recipeCarrotJuice = RecipeUtil.lastIRecipe(); } @@ -167,7 +167,7 @@ public class FoodCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.SPAGHETTI.ordinal()), "NNN", " B ", 'N', new ItemStack(InitItems.itemFoods, 1, TheFoods.NOODLE.ordinal()), - 'B', new ItemStack(Items.bowl))); + 'B', new ItemStack(Items.BOWL))); recipeSpaghetti = RecipeUtil.lastIRecipe(); } @@ -182,8 +182,8 @@ public class FoodCrafting{ if(ConfigCrafting.CHOCOLATE.isEnabled()){ GameRegistry.addRecipe(new ItemStack(InitItems.itemFoods, 3, TheFoods.CHOCOLATE.ordinal()), "C C", "CMC", "C C", - 'C', new ItemStack(Items.dye, 1, 3), - 'M', new ItemStack(Items.milk_bucket)); + 'C', new ItemStack(Items.DYE, 1, 3), + 'M', new ItemStack(Items.MILK_BUCKET)); recipeChocolate = RecipeUtil.lastIRecipe(); } @@ -191,18 +191,18 @@ public class FoodCrafting{ if(ConfigCrafting.CHOCOLATE_CAKE.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.CHOCOLATE_CAKE.ordinal()), "MMM", "CCC", "EDS", - 'M', new ItemStack(Items.milk_bucket), - 'E', new ItemStack(Items.egg), + 'M', new ItemStack(Items.MILK_BUCKET), + 'E', new ItemStack(Items.EGG), 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DOUGH.ordinal()), - 'S', new ItemStack(Items.sugar), - 'C', new ItemStack(Items.dye, 1, 3))); + 'S', new ItemStack(Items.SUGAR), + 'C', new ItemStack(Items.DYE, 1, 3))); recipeChocolateCake = RecipeUtil.lastIRecipe(); } //Toast if(ConfigCrafting.TOAST.isEnabled()){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemFoods, 2, TheFoods.TOAST.ordinal()), - new ItemStack(Items.bread)); + new ItemStack(Items.BREAD)); recipeToast = RecipeUtil.lastIRecipe(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index d248b47b3..41de7dbc4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -95,7 +95,7 @@ public class ItemCrafting{ recipeBlackDye = RecipeUtil.lastIRecipe(); //Booklet - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemBooklet), new ItemStack(InitItems.itemCanolaSeed), new ItemStack(Items.paper))); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemBooklet), new ItemStack(InitItems.itemCanolaSeed), new ItemStack(Items.PAPER))); recipeBook = RecipeUtil.lastIRecipe(); //Clearing NBT Storage @@ -106,7 +106,7 @@ public class ItemCrafting{ if(ConfigCrafting.CHEST_TO_CRATE_UPGRADE.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemChestToCrateUpgrade), "CWC", "WWW", "CWC", - 'C', new ItemStack(Blocks.chest), + 'C', new ItemStack(Blocks.CHEST), 'W', "plankWood")); recipeChestToCrateUpgrade = RecipeUtil.lastIRecipe(); } @@ -132,26 +132,26 @@ public class ItemCrafting{ //Rice Stuff if(ConfigCrafting.RICE_GADGETS.isEnabled()){ - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Items.paper, 3), + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Items.PAPER, 3), "R ", " R ", " R", 'R', new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()))); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 4, TheMiscItems.RICE_SLIME.ordinal()), " R ", "RBR", " R ", 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RICE_DOUGH.ordinal()), - 'B', Items.water_bucket)); + 'B', Items.WATER_BUCKET)); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 4, TheMiscItems.RICE_SLIME.ordinal()), " R ", "RBR", " R ", 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RICE_DOUGH.ordinal()), - 'B', new ItemStack(Items.potionitem))); + 'B', new ItemStack(Items.POTIONITEM))); } //Leaf Blower if(ConfigCrafting.LEAF_BLOWER.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemLeafBlower), " F", "IP", "IC", - 'F', new ItemStack(Items.flint), + 'F', new ItemStack(Items.FLINT), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), - 'P', new ItemStack(Blocks.piston), + 'P', new ItemStack(Blocks.PISTON), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); recipeLeafBlower = RecipeUtil.lastIRecipe(); } @@ -201,21 +201,21 @@ public class ItemCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeSpeed), "ISI", "SRS", "ISI", 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), - 'S', Items.sugar, + 'S', Items.SUGAR, 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()))); recipeDrillSpeedI = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeSpeedII), "ISI", "SCS", "ISI", 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), - 'S', Items.sugar, - 'C', Items.cake)); + 'S', Items.SUGAR, + 'C', Items.CAKE)); recipeDrillSpeedII = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeSpeedIII), "ISI", "SFS", "ISI", 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), - 'S', Items.sugar, + 'S', Items.SUGAR, 'F', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()))); recipeDrillSpeedIII = RecipeUtil.lastIRecipe(); } @@ -224,14 +224,14 @@ public class ItemCrafting{ if(ConfigCrafting.DRILL_FORTUNE.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeFortune), "ISI", "SRS", "ISI", - 'I', Blocks.glowstone, - 'S', Items.redstone, + 'I', Blocks.GLOWSTONE, + 'S', Items.REDSTONE, 'R', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()))); recipeDrillFortuneI = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeFortuneII), "ISI", "SRS", "ISI", - 'I', Blocks.glowstone, + 'I', Blocks.GLOWSTONE, 'S', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'R', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()))); recipeDrillFortuneII = RecipeUtil.lastIRecipe(); @@ -269,7 +269,7 @@ public class ItemCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemDrillUpgradeBlockPlacing), "CEC", "RAR", "CEC", 'C', "cobblestone", - 'E', Items.paper, + 'E', Items.PAPER, 'A', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()))); recipeDrillPlacing = RecipeUtil.lastIRecipe(); @@ -301,7 +301,7 @@ public class ItemCrafting{ "RIB", "IOI", "BIR", 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), - 'B', new ItemStack(Items.dye, 1, 4), + 'B', new ItemStack(Items.DYE, 1, 4), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); recipeMagnetRing = RecipeUtil.lastIRecipe(); } @@ -310,7 +310,7 @@ public class ItemCrafting{ if(ConfigCrafting.GROWTH_RING.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemGrowthRing), "SIS", "IOI", "SIS", - 'S', new ItemStack(Items.wheat_seeds), + 'S', new ItemStack(Items.WHEAT_SEEDS), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); recipeGrowthRing = RecipeUtil.lastIRecipe(); @@ -320,7 +320,7 @@ public class ItemCrafting{ if(ConfigCrafting.WATER_RING.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemWaterRemovalRing), "BIB", "IOI", "BIB", - 'B', new ItemStack(Items.water_bucket), + 'B', new ItemStack(Items.WATER_BUCKET), 'I', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal()))); recipeWaterRing = RecipeUtil.lastIRecipe(); @@ -362,15 +362,15 @@ public class ItemCrafting{ "WNW", "WDW", "WNW", 'W', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal()), 'N', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), - 'D', new ItemStack(Items.nether_star))); + 'D', new ItemStack(Items.NETHER_STAR))); recipeWings = RecipeUtil.lastIRecipe(); } //Quartz if(ConfigCrafting.QUARTZ.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), - new ItemStack(Items.coal), - new ItemStack(Items.quartz))); + new ItemStack(Items.COAL), + new ItemStack(Items.QUARTZ))); } //Coil @@ -394,7 +394,7 @@ public class ItemCrafting{ //Resonant Rice if(ConfigCrafting.RESONANT_RICE.isEnabled() && !OreDictionary.getOres("nuggetEnderium").isEmpty()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemResonantRice), - new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), "nuggetEnderium", Items.gunpowder)); + new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), "nuggetEnderium", Items.GUNPOWDER)); } //Advanced Coil @@ -410,9 +410,9 @@ public class ItemCrafting{ if(ConfigCrafting.LEAF_BLOWER_ADVANCED.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemLeafBlowerAdvanced), " F", "DP", "DC", - 'F', new ItemStack(Items.flint), + 'F', new ItemStack(Items.FLINT), 'D', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), - 'P', new ItemStack(Blocks.piston), + 'P', new ItemStack(Blocks.PISTON), 'C', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); recipeLeafBlowerAdvanced = RecipeUtil.lastIRecipe(); } @@ -421,8 +421,8 @@ public class ItemCrafting{ if(ConfigCrafting.PHANTOM_CONNECTOR.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemPhantomConnector), "YE", "EY", "S ", - 'Y', Items.ender_eye, - 'E', Items.ender_pearl, + 'Y', Items.ENDER_EYE, + 'E', Items.ENDER_PEARL, 'S', "stickWood")); recipePhantomConnector = RecipeUtil.lastIRecipe(); } @@ -442,16 +442,16 @@ public class ItemCrafting{ //Crafter on a Stick if(ConfigCrafting.STICK_CRAFTER.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemCrafterOnAStick), - new ItemStack(Blocks.crafting_table), - new ItemStack(Items.sign))); + new ItemStack(Blocks.CRAFTING_TABLE), + new ItemStack(Items.SIGN))); } //Tiny Coal GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_COAL.ordinal()), - new ItemStack(Items.coal)); + new ItemStack(Items.COAL)); recipeTinyCoal = RecipeUtil.lastIRecipe(); GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_CHAR.ordinal()), - new ItemStack(Items.coal, 1, 1)); + new ItemStack(Items.COAL, 1, 1)); recipeTinyChar = RecipeUtil.lastIRecipe(); //Rice Seeds @@ -467,21 +467,21 @@ public class ItemCrafting{ //Ingots from Dusts GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.IRON.ordinal()), - new ItemStack(Items.iron_ingot), 1F); + new ItemStack(Items.IRON_INGOT), 1F); GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.GOLD.ordinal()), - new ItemStack(Items.gold_ingot), 1F); + new ItemStack(Items.GOLD_INGOT), 1F); GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.DIAMOND.ordinal()), - new ItemStack(Items.diamond), 1F); + new ItemStack(Items.DIAMOND), 1F); GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.EMERALD.ordinal()), - new ItemStack(Items.emerald), 1F); + new ItemStack(Items.EMERALD), 1F); GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.LAPIS.ordinal()), - new ItemStack(Items.dye, 1, 4), 1F); + new ItemStack(Items.DYE, 1, 4), 1F); GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.QUARTZ_BLACK.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), 1F); GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.QUARTZ.ordinal()), - new ItemStack(Items.quartz), 1F); + new ItemStack(Items.QUARTZ), 1F); GameRegistry.addSmelting(new ItemStack(InitItems.itemDust, 1, TheDusts.COAL.ordinal()), - new ItemStack(Items.coal), 1F); + new ItemStack(Items.COAL), 1F); } @@ -526,15 +526,15 @@ public class ItemCrafting{ } public static void addRingRecipeWithStack(ItemStack mainStack, int meta){ - GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), new ItemStack(Items.nether_wart), new ItemStack(Items.potionitem), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal())); + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), new ItemStack(Items.NETHER_WART), new ItemStack(Items.POTIONITEM), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal())); recipesPotionRings.add(RecipeUtil.lastIRecipe()); - GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(Items.nether_star), new ItemStack(Items.nether_star)); + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(Items.NETHER_STAR), new ItemStack(Items.NETHER_STAR)); recipesPotionRings.add(RecipeUtil.lastIRecipe()); } public static void initMashedFoodRecipes(){ if(ConfigCrafting.MASHED_FOOD.isEnabled()){ - for(Item item : Item.itemRegistry){ + for(Item item : Item.REGISTRY){ if(item instanceof ItemFood || item instanceof IPlantable || item instanceof IGrowable){ if(!isBlacklisted(item)){ ItemStack ingredient = new ItemStack(item, 1, Util.WILDCARD); @@ -548,7 +548,7 @@ public class ItemCrafting{ private static boolean isBlacklisted(Item item){ for(String except : ConfigValues.mashedFoodCraftingExceptions){ - if(item.getRegistryName().equals(except)){ + if(item.getRegistryName().toString().equals(except)){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index 807217415..c3c351e14 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -59,14 +59,14 @@ public class MiscCrafting{ if(ConfigCrafting.PAPER_CONE.isEnabled()){ GameRegistry.addRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.PAPER_CONE.ordinal()), "P P", " P ", - 'P', new ItemStack(Items.paper)); + 'P', new ItemStack(Items.PAPER)); } //Knife Handle if(ConfigCrafting.KNIFE_HANDLE.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.KNIFE_HANDLE.ordinal()), "stickWood", - new ItemStack(Items.leather))); + new ItemStack(Items.LEATHER))); ItemCrafting.recipeKnifeHandle = RecipeUtil.lastIRecipe(); } @@ -75,7 +75,7 @@ public class MiscCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.KNIFE_BLADE.ordinal()), "K", "K", "F", 'K', "ingotIron", - 'F', new ItemStack(Items.flint))); + 'F', new ItemStack(Items.FLINT))); ItemCrafting.recipeKnifeBlade = RecipeUtil.lastIRecipe(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java index 21a76c3c7..e7449f327 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java @@ -33,7 +33,7 @@ public class ToolCrafting{ public static void init(){ if(ConfigCrafting.TOOL_EMERALD.isEnabled()){ - addToolAndArmorRecipes(new ItemStack(Items.emerald), InitItems.itemPickaxeEmerald, InitItems.itemSwordEmerald, InitItems.itemAxeEmerald, InitItems.itemShovelEmerald, InitItems.itemHoeEmerald, InitItems.itemHelmEmerald, InitItems.itemChestEmerald, InitItems.itemPantsEmerald, InitItems.itemBootsEmerald); + addToolAndArmorRecipes(new ItemStack(Items.EMERALD), InitItems.itemPickaxeEmerald, InitItems.itemSwordEmerald, InitItems.itemAxeEmerald, InitItems.itemShovelEmerald, InitItems.itemHoeEmerald, InitItems.itemHelmEmerald, InitItems.itemChestEmerald, InitItems.itemPantsEmerald, InitItems.itemBootsEmerald); } if(ConfigCrafting.TOOL_QUARTZ.isEnabled()){ @@ -41,7 +41,7 @@ public class ToolCrafting{ } if(ConfigCrafting.TOOL_OBSIDIAN.isEnabled()){ - addToolAndArmorRecipes(new ItemStack(Blocks.obsidian), InitItems.itemPickaxeObsidian, InitItems.itemSwordObsidian, InitItems.itemAxeObsidian, InitItems.itemShovelObsidian, InitItems.itemHoeObsidian, InitItems.itemHelmObsidian, InitItems.itemChestObsidian, InitItems.itemPantsObsidian, InitItems.itemBootsObsidian); + addToolAndArmorRecipes(new ItemStack(Blocks.OBSIDIAN), InitItems.itemPickaxeObsidian, InitItems.itemSwordObsidian, InitItems.itemAxeObsidian, InitItems.itemShovelObsidian, InitItems.itemHoeObsidian, InitItems.itemHelmObsidian, InitItems.itemChestObsidian, InitItems.itemPantsObsidian, InitItems.itemBootsObsidian); } if(ConfigCrafting.TOOL_CRYSTALS.isEnabled()){ @@ -56,39 +56,39 @@ public class ToolCrafting{ //Paxels if(ConfigCrafting.PAXELS.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.woodenPaxel), - new ItemStack(Items.wooden_axe), - new ItemStack(Items.wooden_pickaxe), - new ItemStack(Items.wooden_shovel), - new ItemStack(Items.wooden_sword), - new ItemStack(Items.wooden_hoe))); + new ItemStack(Items.WOODEN_AXE), + new ItemStack(Items.WOODEN_PICKAXE), + new ItemStack(Items.WOODEN_SHOVEL), + new ItemStack(Items.WOODEN_SWORD), + new ItemStack(Items.WOODEN_HOE))); recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.stonePaxel), - new ItemStack(Items.stone_axe), - new ItemStack(Items.stone_pickaxe), - new ItemStack(Items.stone_shovel), - new ItemStack(Items.stone_sword), - new ItemStack(Items.stone_hoe))); + new ItemStack(Items.STONE_AXE), + new ItemStack(Items.STONE_PICKAXE), + new ItemStack(Items.STONE_SHOVEL), + new ItemStack(Items.STONE_SWORD), + new ItemStack(Items.STONE_HOE))); recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.ironPaxel), - new ItemStack(Items.iron_axe), - new ItemStack(Items.iron_pickaxe), - new ItemStack(Items.iron_shovel), - new ItemStack(Items.iron_sword), - new ItemStack(Items.iron_hoe))); + new ItemStack(Items.IRON_AXE), + new ItemStack(Items.IRON_PICKAXE), + new ItemStack(Items.IRON_SHOVEL), + new ItemStack(Items.IRON_SWORD), + new ItemStack(Items.IRON_HOE))); recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.goldPaxel), - new ItemStack(Items.golden_axe), - new ItemStack(Items.golden_pickaxe), - new ItemStack(Items.golden_shovel), - new ItemStack(Items.golden_sword), - new ItemStack(Items.golden_hoe))); + new ItemStack(Items.GOLDEN_AXE), + new ItemStack(Items.GOLDEN_PICKAXE), + new ItemStack(Items.GOLDEN_SHOVEL), + new ItemStack(Items.GOLDEN_SWORD), + new ItemStack(Items.GOLDEN_HOE))); recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.diamondPaxel), - new ItemStack(Items.diamond_axe), - new ItemStack(Items.diamond_pickaxe), - new ItemStack(Items.diamond_shovel), - new ItemStack(Items.diamond_sword), - new ItemStack(Items.diamond_hoe))); + new ItemStack(Items.DIAMOND_AXE), + new ItemStack(Items.DIAMOND_PICKAXE), + new ItemStack(Items.DIAMOND_SHOVEL), + new ItemStack(Items.DIAMOND_SWORD), + new ItemStack(Items.DIAMOND_HOE))); recipesPaxels.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.emeraldPaxel), new ItemStack(InitItems.itemAxeEmerald), @@ -162,31 +162,31 @@ public class ToolCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(pickaxe), "EEE", " S ", " S ", 'E', base, - 'S', new ItemStack(Items.stick))); + 'S', new ItemStack(Items.STICK))); //Sword GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(sword), "E", "E", "S", 'E', base, - 'S', new ItemStack(Items.stick))); + 'S', new ItemStack(Items.STICK))); //Axe GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(axe), "EE", "ES", " S", 'E', base, - 'S', new ItemStack(Items.stick))); + 'S', new ItemStack(Items.STICK))); //Shovel GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(shovel), "E", "S", "S", 'E', base, - 'S', new ItemStack(Items.stick))); + 'S', new ItemStack(Items.STICK))); //Hoe GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(hoe), "EE", " S", " S", 'E', base, - 'S', new ItemStack(Items.stick))); + 'S', new ItemStack(Items.STICK))); //Helm GameRegistry.addRecipe(new ItemStack(helm), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 30fe6f917..18dd9a0a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -29,7 +29,7 @@ public class CreativeTab extends CreativeTabs{ private List list; public CreativeTab(){ - super(ModUtil.MOD_ID_LOWER); + super(ModUtil.MOD_ID); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java index 263ae1bb5..cb2a57119 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java @@ -28,12 +28,12 @@ public class EntityLivingEvent{ @SubscribeEvent public void livingUpdateEvent(LivingUpdateEvent event){ //Ocelots dropping Hair Balls - if(event.entityLiving != null && event.entityLiving.worldObj != null && !event.entityLiving.worldObj.isRemote){ - if((event.entityLiving instanceof EntityOcelot && ((EntityOcelot)event.entityLiving).isTamed()) || (event.entityLiving instanceof EntityPlayer && event.entityLiving.getUniqueID().equals(/*KittyVanCat*/ UUID.fromString("681d4e20-10ef-40c9-a0a5-ba2f1995ef44")))){ + if(event.getEntityLiving() != null && event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote){ + if((event.getEntityLiving() instanceof EntityOcelot && ((EntityOcelot)event.getEntityLiving()).isTamed()) || (event.getEntityLiving() instanceof EntityPlayer && event.getEntityLiving().getUniqueID().equals(/*KittyVanCat*/ UUID.fromString("681d4e20-10ef-40c9-a0a5-ba2f1995ef44")))){ if(ConfigBoolValues.DO_CAT_DROPS.isEnabled()){ if(Util.RANDOM.nextInt(5000)+1 == 1){ - EntityItem item = new EntityItem(event.entityLiving.worldObj, event.entityLiving.posX+0.5, event.entityLiving.posY+0.5, event.entityLiving.posZ+0.5, new ItemStack(InitItems.itemHairyBall)); - event.entityLiving.worldObj.spawnEntityInWorld(item); + EntityItem item = new EntityItem(event.getEntityLiving().worldObj, event.getEntityLiving().posX+0.5, event.getEntityLiving().posY+0.5, event.getEntityLiving().posZ+0.5, new ItemStack(InitItems.itemHairyBall)); + event.getEntityLiving().worldObj.spawnEntityInWorld(item); } } } @@ -48,8 +48,8 @@ public class EntityLivingEvent{ * (Partially excerpted from Botania's Wing System by Vazkii (as I had fiddled around with the system and couldn't make it work) with permission, thanks!) */ private void doWingStuff(LivingUpdateEvent event){ - if(event.entityLiving instanceof EntityPlayer){ - EntityPlayer player = (EntityPlayer)event.entityLiving; + if(event.getEntityLiving() instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)event.getEntityLiving(); boolean wingsEquipped = ItemWingsOfTheBats.getWingItem(player) != null; //If Player isn't (really) winged diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index d8ebcd2e0..508a709f1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -33,7 +33,7 @@ public class HudEvent{ @SubscribeEvent public void onGameOverlay(RenderGameOverlayEvent.Post event){ - if(event.type == RenderGameOverlayEvent.ElementType.ALL && Minecraft.getMinecraft().currentScreen == null){ + if(event.getType() == RenderGameOverlayEvent.ElementType.ALL && Minecraft.getMinecraft().currentScreen == null){ Minecraft minecraft = Minecraft.getMinecraft(); Profiler profiler = minecraft.mcProfiler; EntityPlayer player = minecraft.thePlayer; @@ -46,7 +46,7 @@ public class HudEvent{ if(stack != null){ if(stack.getItem() instanceof IHudDisplay){ profiler.startSection("ItemHudDisplay"); - ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.resolution); + ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); profiler.endSection(); } } @@ -57,7 +57,7 @@ public class HudEvent{ if(blockHit instanceof IHudDisplay){ profiler.startSection("BlockHudDisplay"); - ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.resolution); + ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); profiler.endSection(); } @@ -65,11 +65,11 @@ public class HudEvent{ profiler.startSection("RedstoneToggleHudDisplay"); String strg = "Redstone Mode: "+TextFormatting.DARK_RED+(((IRedstoneToggle)tileHit).isPulseMode() ? "Pulse" : "Deactivation")+TextFormatting.RESET; - font.drawStringWithShadow(strg, event.resolution.getScaledWidth()/2+5, event.resolution.getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); + font.drawStringWithShadow(strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ String expl = TextFormatting.GREEN+"Right-Click to toggle!"; - font.drawStringWithShadow(expl, event.resolution.getScaledWidth()/2+5, event.resolution.getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); + font.drawStringWithShadow(expl, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); } profiler.endSection(); @@ -78,7 +78,7 @@ public class HudEvent{ if(tileHit instanceof IEnergyDisplay){ profiler.startSection("EnergyDisplay"); String strg = ((IEnergyDisplay)tileHit).getEnergy()+"/"+((IEnergyDisplay)tileHit).getMaxEnergy()+" RF"; - font.drawStringWithShadow(TextFormatting.GOLD+strg, event.resolution.getScaledWidth()/2+5, event.resolution.getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); + font.drawStringWithShadow(TextFormatting.GOLD+strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); profiler.endSection(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java index c84cf1df8..092caf2c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java @@ -27,25 +27,25 @@ public class LivingDropEvent{ @SubscribeEvent public void onEntityDropEvent(LivingDropsEvent event){ - if(event.source.getEntity() instanceof EntityPlayer){ + if(event.getSource().getEntity() instanceof EntityPlayer){ //Drop Solidified XP - if(event.entityLiving instanceof EntityCreature){ + if(event.getEntityLiving() instanceof EntityCreature){ if(Util.RANDOM.nextInt(15) <= 0){ - event.entityLiving.entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2)+1), 0); + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2)+1), 0); } } //Drop Cobwebs from Spiders - if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.entityLiving instanceof EntitySpider){ + if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.getEntityLiving() instanceof EntitySpider){ if(Util.RANDOM.nextInt(80) <= 0){ - event.entityLiving.entityDropItem(new ItemStack(Blocks.web, Util.RANDOM.nextInt(2)+1), 0); + event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2)+1), 0); } } //Drop Wings from Bats - if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.entityLiving instanceof EntityBat){ + if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat){ if(Util.RANDOM.nextInt(30) <= 0){ - event.entityLiving.entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2)+1, TheMiscItems.BAT_WING.ordinal()), 0); + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2)+1, TheMiscItems.BAT_WING.ordinal()), 0); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index d8f009d22..1ce77e9aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -48,8 +48,8 @@ public class PlayerObtainEvents{ if(ConfigBoolValues.GIVE_BOOKLET_ON_FIRST_CRAFT.isEnabled()){ if(!event.player.worldObj.isRemote && event.crafting != null && event.crafting.getItem() != null && event.crafting.getItem() != InitItems.itemBooklet){ - String name = event.crafting.getItem().getRegistryName(); - if(name != null && name.toLowerCase(Locale.ROOT).contains(ModUtil.MOD_ID_LOWER)){ + String name = event.crafting.getItem().getRegistryName().toString(); + if(name != null && name.toLowerCase(Locale.ROOT).contains(ModUtil.MOD_ID)){ NBTTagCompound compound = PersistentServerData.getDataFromPlayer(event.player); if(compound != null && !compound.getBoolean("BookGottenAlready")){ compound.setBoolean("BookGottenAlready", true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index fdb41da12..63309d36c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -33,68 +33,68 @@ public class TooltipEvent{ @SubscribeEvent public void onTooltipEvent(ItemTooltipEvent event){ //Advanced Item Info - if(event.itemStack.getItem() != null){ + if(event.getItemStack().getItem() != null){ if(ConfigBoolValues.CTRL_EXTRA_INFO.isEnabled()){ if(GuiScreen.isCtrlKeyDown()){ - event.toolTip.add(TextFormatting.DARK_GRAY+""+TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".extraInfo.desc")+":"); + event.getToolTip().add(TextFormatting.DARK_GRAY+""+TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".extraInfo.desc")+":"); //OreDict Names - int[] oreIDs = OreDictionary.getOreIDs(event.itemStack); - event.toolTip.add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".oredictName.desc")+":"); + int[] oreIDs = OreDictionary.getOreIDs(event.getItemStack()); + event.getToolTip().add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".oredictName.desc")+":"); if(oreIDs.length > 0){ for(int oreID : oreIDs){ - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+OreDictionary.getOreName(oreID)); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+OreDictionary.getOreName(oreID)); } } else{ - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".noOredictNameAvail.desc")); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".noOredictNameAvail.desc")); } //Code Name - event.toolTip.add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".codeName.desc")+":"); - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+Item.itemRegistry.getNameForObject(event.itemStack.getItem())); + event.getToolTip().add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".codeName.desc")+":"); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+Item.REGISTRY.getNameForObject(event.getItemStack().getItem())); //Base Item's Unlocalized Name - String baseName = event.itemStack.getItem().getUnlocalizedName(); + String baseName = event.getItemStack().getItem().getUnlocalizedName(); if(baseName != null){ - event.toolTip.add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".baseUnlocName.desc")+":"); - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+baseName); + event.getToolTip().add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".baseUnlocName.desc")+":"); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+baseName); } //Metadata - int meta = event.itemStack.getItemDamage(); - event.toolTip.add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".meta.desc")+":"); - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+meta); + int meta = event.getItemStack().getItemDamage(); + event.getToolTip().add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".meta.desc")+":"); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+meta); //Unlocalized Name - String metaName = event.itemStack.getItem().getUnlocalizedName(event.itemStack); + String metaName = event.getItemStack().getItem().getUnlocalizedName(event.getItemStack()); if(metaName != null && baseName != null && !metaName.equals(baseName)){ - event.toolTip.add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".unlocName.desc")+":"); - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+metaName); + event.getToolTip().add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".unlocName.desc")+":"); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+metaName); } //NBT - NBTTagCompound compound = event.itemStack.getTagCompound(); + NBTTagCompound compound = event.getItemStack().getTagCompound(); if(compound != null && !compound.hasNoTags()){ - event.toolTip.add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".nbt.desc")+":"); + event.getToolTip().add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".nbt.desc")+":"); if(GuiScreen.isShiftKeyDown()){ List strgList = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(compound.toString(), 200); for(String strg : strgList){ - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+strg); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+strg); } } else{ - event.toolTip.add(ADVANCED_INFO_TEXT_PRE+TextFormatting.ITALIC+"["+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".pressShift.desc")+"]"); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+TextFormatting.ITALIC+"["+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".pressShift.desc")+"]"); } } //Disabling Info - event.toolTip.addAll(Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".disablingInfo.desc"), 200)); + event.getToolTip().addAll(Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".disablingInfo.desc"), 200)); } else{ if(ConfigBoolValues.CTRL_INFO_FOR_EXTRA_INFO.isEnabled()){ - event.toolTip.add(TextFormatting.DARK_GRAY+""+TextFormatting .ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".ctrlForMoreInfo.desc")); + event.getToolTip().add(TextFormatting.DARK_GRAY+""+TextFormatting .ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".ctrlForMoreInfo.desc")); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index cb93092f6..74b1bc10a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -34,25 +34,25 @@ public class WorldDecorationEvent{ @SubscribeEvent public void onWorldDecoration(DecorateBiomeEvent.Decorate event){ if((event.getResult() == Event.Result.ALLOW || event.getResult() == Event.Result.DEFAULT)){ - if(Util.arrayContains(ConfigValues.plantDimensionBlacklist, event.world.provider.getDimension()) < 0){ + if(Util.arrayContains(ConfigValues.plantDimensionBlacklist, event.getWorld().provider.getDimension()) < 0){ this.generateRice(event); - this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.grass, event); - this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.grass, event); - this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.COFFEE.ordinal(), ConfigIntValues.COFFEE_AMOUNT.getValue(), ConfigBoolValues.DO_COFFEE_GEN.isEnabled(), Material.grass, event); - this.genPlantNormally(InitBlocks.blockBlackLotus, 0, ConfigIntValues.BLACK_LOTUS_AMOUNT.getValue(), ConfigBoolValues.DO_LOTUS_GEN.isEnabled(), Material.grass, event); + this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.GRASS, event); + this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.GRASS, event); + this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.COFFEE.ordinal(), ConfigIntValues.COFFEE_AMOUNT.getValue(), ConfigBoolValues.DO_COFFEE_GEN.isEnabled(), Material.GRASS, event); + this.genPlantNormally(InitBlocks.blockBlackLotus, 0, ConfigIntValues.BLACK_LOTUS_AMOUNT.getValue(), ConfigBoolValues.DO_LOTUS_GEN.isEnabled(), Material.GRASS, event); } //Generate Treasure Chests if(ConfigBoolValues.DO_TREASURE_CHEST_GEN.isEnabled()){ - if(event.rand.nextInt(300) == 0){ - BlockPos randomPos = new BlockPos(event.pos.getX()+event.rand.nextInt(16)+8, 0, event.pos.getZ()+event.rand.nextInt(16)+8); - randomPos = event.world.getTopSolidOrLiquidBlock(randomPos); + if(event.getRand().nextInt(300) == 0){ + BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); + randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - if(event.world.getBiomeGenForCoords(randomPos) instanceof BiomeGenOcean){ + if(event.getWorld().getBiomeGenForCoords(randomPos) instanceof BiomeGenOcean){ if(randomPos.getY() >= 25 && randomPos.getY() <= 45){ - if(PosUtil.getBlock(randomPos, event.world).getMaterial(event.world.getBlockState(randomPos)) == Material.water){ - if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.world).isSolid()){ - PosUtil.setBlock(randomPos, event.world, InitBlocks.blockTreasureChest, event.rand.nextInt(4), 2); + if(PosUtil.getBlock(randomPos, event.getWorld()).getMaterial(event.getWorld().getBlockState(randomPos)) == Material.WATER){ + if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()).isSolid()){ + PosUtil.setBlock(randomPos, event.getWorld(), InitBlocks.blockTreasureChest, event.getRand().nextInt(4), 2); } } } @@ -65,16 +65,16 @@ public class WorldDecorationEvent{ private void generateRice(DecorateBiomeEvent event){ if(ConfigBoolValues.DO_RICE_GEN.isEnabled()){ for(int i = 0; i < ConfigIntValues.RICE_AMOUNT.getValue(); i++){ - if(event.rand.nextInt(50) == 0){ - BlockPos randomPos = new BlockPos(event.pos.getX()+event.rand.nextInt(16)+8, 0, event.pos.getZ()+event.rand.nextInt(16)+8); - randomPos = event.world.getTopSolidOrLiquidBlock(randomPos); - if(PosUtil.getMaterial(randomPos, event.world) == Material.water){ - ArrayList blocksAroundBottom = WorldUtil.getMaterialsAround(event.world, randomPos); + if(event.getRand().nextInt(50) == 0){ + BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); + randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); + if(PosUtil.getMaterial(randomPos, event.getWorld()) == Material.WATER){ + ArrayList blocksAroundBottom = WorldUtil.getMaterialsAround(event.getWorld(), randomPos); BlockPos posToGenAt = PosUtil.offset(randomPos, 0, 1, 0); - ArrayList blocksAroundTop = WorldUtil.getMaterialsAround(event.world, posToGenAt); - if(blocksAroundBottom.contains(Material.grass) || blocksAroundBottom.contains(Material.ground) || blocksAroundBottom.contains(Material.rock) || blocksAroundBottom.contains(Material.sand)){ - if(!blocksAroundTop.contains(Material.water) && PosUtil.getMaterial(posToGenAt, event.world) == Material.air){ - PosUtil.setBlock(posToGenAt, event.world, InitBlocks.blockWildPlant, TheWildPlants.RICE.ordinal(), 2); + ArrayList blocksAroundTop = WorldUtil.getMaterialsAround(event.getWorld(), posToGenAt); + if(blocksAroundBottom.contains(Material.GRASS) || blocksAroundBottom.contains(Material.GROUND) || blocksAroundBottom.contains(Material.ROCK) || blocksAroundBottom.contains(Material.SAND)){ + if(!blocksAroundTop.contains(Material.WATER) && PosUtil.getMaterial(posToGenAt, event.getWorld()) == Material.AIR){ + PosUtil.setBlock(posToGenAt, event.getWorld(), InitBlocks.blockWildPlant, TheWildPlants.RICE.ordinal(), 2); } } } @@ -86,13 +86,13 @@ public class WorldDecorationEvent{ private void genPlantNormally(Block plant, int meta, int amount, boolean doIt, Material blockBelow, DecorateBiomeEvent event){ if(doIt){ for(int i = 0; i < amount; i++){ - if(event.rand.nextInt(400) == 0){ - BlockPos randomPos = new BlockPos(event.pos.getX()+event.rand.nextInt(16)+8, 0, event.pos.getZ()+event.rand.nextInt(16)+8); - randomPos = event.world.getTopSolidOrLiquidBlock(randomPos); + if(event.getRand().nextInt(400) == 0){ + BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); + randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.world) == blockBelow){ - if(plant.canPlaceBlockAt(event.world, randomPos) && event.world.isAirBlock(randomPos)){ - PosUtil.setBlock(randomPos, event.world, plant, meta, 2); + if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()) == blockBelow){ + if(plant.canPlaceBlockAt(event.getWorld(), randomPos) && event.getWorld().isAirBlock(randomPos)){ + PosUtil.setBlock(randomPos, event.getWorld(), plant, meta, 2); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java index c71e0a1a6..8c5608b18 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java @@ -17,11 +17,11 @@ import net.minecraftforge.fluids.Fluid; public class FluidAA extends Fluid{ public FluidAA(String fluidName, String textureName){ - super(fluidName, new ResourceLocation(ModUtil.MOD_ID_LOWER, "blocks/"+textureName+"Still"), new ResourceLocation(ModUtil.MOD_ID_LOWER, "blocks/"+textureName+"Flowing")); + super(fluidName, new ResourceLocation(ModUtil.MOD_ID, "blocks/"+textureName+"Still"), new ResourceLocation(ModUtil.MOD_ID, "blocks/"+textureName+"Flowing")); } @Override public String getUnlocalizedName(){ - return "fluid."+ModUtil.MOD_ID_LOWER+"."+this.unlocalizedName; + return "fluid."+ModUtil.MOD_ID+"."+this.unlocalizedName; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java index 0bab1171f..69c39bbdf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java @@ -41,7 +41,7 @@ public class InitFluids{ //Canola Block if(fluidCanolaOil.getBlock() == null || ConfigBoolValues.PREVENT_CANOLA_BLOCK_OVERRIDE.isEnabled()){ - blockCanolaOil = new BlockFluidFlowing(fluidCanolaOil, Material.water, "blockCanolaOil"); + blockCanolaOil = new BlockFluidFlowing(fluidCanolaOil, Material.WATER, "blockCanolaOil"); } else{ errorAlreadyRegistered("Canola Oil Block"); @@ -61,7 +61,7 @@ public class InitFluids{ //Oil Block if(fluidOil.getBlock() == null || ConfigBoolValues.PREVENT_OIL_BLOCK_OVERRIDE.isEnabled()){ - blockOil = new BlockFluidFlowing(fluidOil, Material.water, "blockOil"); + blockOil = new BlockFluidFlowing(fluidOil, Material.WATER, "blockOil"); } else{ errorAlreadyRegistered("Oil Block"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java index f46d3b9a2..fdb8f3731 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java @@ -16,7 +16,7 @@ import net.minecraft.world.gen.structure.MapGenStructureIO; public class InitVillager{ - public static final String JAM_HOUSE_CHEST_NAME = ModUtil.MOD_ID_LOWER+".jamHouseChest"; + public static final String JAM_HOUSE_CHEST_NAME = ModUtil.MOD_ID+".jamHouseChest"; public static void init(){ ModUtil.LOGGER.info("Initializing Village Addons..."); @@ -45,13 +45,13 @@ public class InitVillager{ ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(Items.potionitem), 1, 1, 20)); VillagerRegistry.instance().registerVillageCreationHandler(new VillageJamHouseHandler()); - MapGenStructureIO.func_143031_a(VillageComponentJamHouse.class, ModUtil.MOD_ID_LOWER+":jamHouseStructure");*/ + MapGenStructureIO.func_143031_a(VillageComponentJamHouse.class, ModUtil.MOD_ID+":jamHouseStructure");*/ } private static void initCustomCropFieldPart(){ //TODO Fix village //VillagerRegistry.instance().registerVillageCreationHandler(new VillageCustomCropFieldHandler()); - MapGenStructureIO.registerStructureComponent(VillageComponentCustomCropField.class, ModUtil.MOD_ID_LOWER+":customCropFieldStructure"); + MapGenStructureIO.registerStructureComponent(VillageComponentCustomCropField.class, ModUtil.MOD_ID+":customCropFieldStructure"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index 7228c4f7d..057f060f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -32,9 +32,9 @@ public class JamVillagerTradeHandler{ this.addWants("ingotGold", 5, 7); this.addWants("cropWheat", 15, 25); this.addWants("dustRedstone", 25, 40); - this.addWants(new ItemStack(Items.bucket), 5, 9); - this.addWants(new ItemStack(Items.glass_bottle), 12, 17); - this.addWants(new ItemStack(Items.potionitem), 1, 1); + this.addWants(new ItemStack(Items.BUCKET), 5, 9); + this.addWants(new ItemStack(Items.GLASS_BOTTLE), 12, 17); + this.addWants(new ItemStack(Items.POTIONITEM), 1, 1); this.addWants("ingotIron", 10, 15); this.addWants("gemDiamond", 1, 2); this.addWants("dustGlowstone", 12, 22); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index fe7821a2b..31a350778 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -69,7 +69,7 @@ public class OreGen implements IWorldGenerator{ private void generateSurface(World world, Random random, int x, int z){ if(ConfigBoolValues.GENERATE_QUARTZ.isEnabled()){ - this.addOreSpawn(InitBlocks.blockMisc, TheMiscBlocks.ORE_QUARTZ.ordinal(), Blocks.stone, world, random, x, z, MathHelper.getRandomIntegerInRange(random, 5, 8), 10, QUARTZ_MIN, QUARTZ_MAX); + this.addOreSpawn(InitBlocks.blockMisc, TheMiscBlocks.ORE_QUARTZ.ordinal(), Blocks.STONE, world, random, x, z, MathHelper.getRandomIntegerInRange(random, 5, 8), 10, QUARTZ_MIN, QUARTZ_MAX); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index 25c9dc220..b4f0c706d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -104,7 +104,7 @@ public class ContainerCrafter extends Container{ for(int i = 0; i < 9; ++i){ ItemStack stack = this.craftMatrix.removeStackFromSlot(i); if(stack != null){ - player.dropPlayerItemWithRandomChoice(stack, false); + player.dropItem(stack, false); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 9991570ec..09e29f373 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -56,7 +56,7 @@ public class GuiCoffeeMachine extends GuiContainer{ public void initGui(){ super.initGui(); - GuiButton buttonOkay = new GuiButton(0, guiLeft+60, guiTop+11, 58, 20, StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.ok")); + GuiButton buttonOkay = new GuiButton(0, guiLeft+60, guiTop+11, 58, 20, StringUtil.localize("info."+ModUtil.MOD_ID+".gui.ok")); this.buttonList.add(buttonOkay); } @@ -73,7 +73,7 @@ public class GuiCoffeeMachine extends GuiContainer{ this.drawHoveringText(Collections.singletonList(text3), x, y); } - String text2 = this.machine.coffeeCacheAmount+"/"+TileEntityCoffeeMachine.COFFEE_CACHE_MAX_AMOUNT+" "+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.coffee"); + String text2 = this.machine.coffeeCacheAmount+"/"+TileEntityCoffeeMachine.COFFEE_CACHE_MAX_AMOUNT+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.coffee"); if(x >= guiLeft+40 && y >= guiTop+25 && x <= guiLeft+49 && y <= guiTop+56){ this.drawHoveringText(Collections.singletonList(text2), x, y); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java index e66956e1b..4d7032ffb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java @@ -34,7 +34,7 @@ public class GuiCrafter extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, "container."+ModUtil.MOD_ID_LOWER+".crafting"); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, "container."+ModUtil.MOD_ID+".crafting"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java index fce51af26..9b30d6d8a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java @@ -33,7 +33,7 @@ public class GuiDrill extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, "container."+ModUtil.MOD_ID_LOWER+".drill"); + AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, "container."+ModUtil.MOD_ID+".drill"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java index 7e60a3795..549f7bd9d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java @@ -42,7 +42,7 @@ public class GuiFeeder extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); if(x >= guiLeft+69 && y >= guiTop+30 && x <= guiLeft+69+10 && y <= guiTop+30+10){ - String[] array = new String[]{(this.tileFeeder.currentAnimalAmount+" "+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.animals")), ((this.tileFeeder.currentAnimalAmount >= 2 && this.tileFeeder.currentAnimalAmount < TileEntityFeeder.THRESHOLD) ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.enoughToBreed") : (this.tileFeeder.currentAnimalAmount >= TileEntityFeeder.THRESHOLD ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.tooMany") : StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.notEnough")))}; + String[] array = new String[]{(this.tileFeeder.currentAnimalAmount+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.animals")), ((this.tileFeeder.currentAnimalAmount >= 2 && this.tileFeeder.currentAnimalAmount < TileEntityFeeder.THRESHOLD) ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.enoughToBreed") : (this.tileFeeder.currentAnimalAmount >= TileEntityFeeder.THRESHOLD ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.tooMany") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.notEnough")))}; this.drawHoveringText(Arrays.asList(array), x, y); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 46a5154d5..2608f88b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -41,13 +41,13 @@ public class GuiInputter extends GuiContainer{ public static final int OFFSET_ADVANCED = 12+36; public static final String[] sideString = new String[]{ - StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.disabled"), - StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.up"), - StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.down"), - StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.north"), - StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.east"), - StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.south"), - StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.west")}; + StringUtil.localize("info."+ModUtil.MOD_ID+".gui.disabled"), + StringUtil.localize("info."+ModUtil.MOD_ID+".gui.up"), + StringUtil.localize("info."+ModUtil.MOD_ID+".gui.down"), + StringUtil.localize("info."+ModUtil.MOD_ID+".gui.north"), + StringUtil.localize("info."+ModUtil.MOD_ID+".gui.east"), + StringUtil.localize("info."+ModUtil.MOD_ID+".gui.south"), + StringUtil.localize("info."+ModUtil.MOD_ID+".gui.west")}; private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiInputter"); private static final ResourceLocation resLocAdvanced = AssetUtil.getGuiLocation("guiInputterAdvanced"); public TileEntityInputter tileInputter; @@ -124,15 +124,15 @@ public class GuiInputter extends GuiContainer{ this.whitelistPut.displayString = this.tileInputter.isPutWhitelist ? "O" : "X"; if(this.isAdvanced){ - List infoList = this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".inputter.whitelistInfo"), 200); - String text1 = this.tileInputter.isPullWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.blacklist"); + List infoList = this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.whitelistInfo"), 200); + String text1 = this.tileInputter.isPullWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); if(x >= guiLeft+3 && y >= guiTop+16 && x <= guiLeft+18 && y <= guiTop+31){ ArrayList list = new ArrayList(); list.add(TextFormatting.BOLD+text1); list.addAll(infoList); this.drawHoveringText(list, x, y); } - String text2 = this.tileInputter.isPutWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.blacklist"); + String text2 = this.tileInputter.isPutWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); if(x >= guiLeft+157 && y >= guiTop+16 && x <= guiLeft+172 && y <= guiTop+31){ ArrayList list = new ArrayList(); list.add(TextFormatting.BOLD+text2); @@ -144,16 +144,16 @@ public class GuiInputter extends GuiContainer{ int newTopOffset = this.guiTop+(this.isAdvanced ? OFFSET_ADVANCED : 0); //Info Mode on! if(x >= guiLeft+11 && y >= newTopOffset+65 && x <= guiLeft+11+31 && y <= newTopOffset+65+12){ - this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.pull")), 200), x, y); + this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull")), 200), x, y); } if(x >= guiLeft+96 && y >= newTopOffset+65 && x <= guiLeft+96+31 && y <= newTopOffset+65+12){ - this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.put")), 200), x, y); + this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put")), 200), x, y); } if(x >= guiLeft+48 && y >= newTopOffset+65 && x <= guiLeft+48+31 && y <= newTopOffset+65+12){ - this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.pull")), 200), x, y); + this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull")), 200), x, y); } if(x >= guiLeft+133 && y >= newTopOffset+65 && x <= guiLeft+133+31 && y <= newTopOffset+65+12){ - this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.put")), 200), x, y); + this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put")), 200), x, y); } } @@ -172,8 +172,8 @@ public class GuiInputter extends GuiContainer{ this.mc.getTextureManager().bindTexture(this.isAdvanced ? resLocAdvanced : resLoc); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93+(isAdvanced ? OFFSET_ADVANCED : 0)); - this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.pull"), guiLeft+22+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.put"), guiLeft+107+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull"), guiLeft+22+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put"), guiLeft+107+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); this.fontRendererObj.drawString(sideString[tileInputter.sideToPull+1], guiLeft+24+1, guiTop+45+3+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); this.fontRendererObj.drawString(sideString[tileInputter.sideToPut+1], guiLeft+109+1, guiTop+45+3+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index feb847d8a..08ac4a7c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -70,7 +70,7 @@ public class GuiRangedCollector extends GuiContainer{ this.whitelistButton.displayString = this.collector.isWhitelist ? "O" : "X"; - String text1 = this.collector.isWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.blacklist"); + String text1 = this.collector.isWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); if(x >= guiLeft+3 && y >= guiTop+16 && x <= guiLeft+18 && y <= guiTop+31){ this.drawHoveringText(Collections.singletonList(text1), x, y); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index b25c7454d..cd809636d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -75,8 +75,8 @@ public class GuiSmileyCloud extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - String name = cloud.name == null || cloud.name.isEmpty() ? "" : TextFormatting.GOLD+cloud.name+TextFormatting.RESET+" "+StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".gui.the")+" "; - String localizedName = name+StringUtil.localize("container."+ModUtil.MOD_ID_LOWER+".cloud.name"); + String name = cloud.name == null || cloud.name.isEmpty() ? "" : TextFormatting.GOLD+cloud.name+TextFormatting.RESET+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.the")+" "; + String localizedName = name+StringUtil.localize("container."+ModUtil.MOD_ID+".cloud.name"); this.fontRendererObj.drawString(localizedName, xSize/2-this.fontRendererObj.getStringWidth(localizedName)/2, -10, StringUtil.DECIMAL_COLOR_WHITE); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index c2226fcfe..6cc7e7b82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -220,14 +220,14 @@ public class InitItems{ itemGrowthRing = new ItemGrowthRing("itemGrowthRing"); itemMagnetRing = new ItemMagnetRing("itemSuctionRing"); itemWaterRemovalRing = new ItemWaterRemovalRing("itemWaterRemovalRing"); - itemHelmEmerald = new ItemArmorAA("itemHelmEmerald", InitArmorMaterials.armorMaterialEmerald, 0, new ItemStack(Items.emerald)); - itemChestEmerald = new ItemArmorAA("itemChestEmerald", InitArmorMaterials.armorMaterialEmerald, 1, new ItemStack(Items.emerald)); - itemPantsEmerald = new ItemArmorAA("itemPantsEmerald", InitArmorMaterials.armorMaterialEmerald, 2, new ItemStack(Items.emerald)); - itemBootsEmerald = new ItemArmorAA("itemBootsEmerald", InitArmorMaterials.armorMaterialEmerald, 3, new ItemStack(Items.emerald)); - itemHelmObsidian = new ItemArmorAA("itemHelmObsidian", InitArmorMaterials.armorMaterialObsidian, 0, new ItemStack(Blocks.obsidian)); - itemChestObsidian = new ItemArmorAA("itemChestObsidian", InitArmorMaterials.armorMaterialObsidian, 1, new ItemStack(Blocks.obsidian)); - itemPantsObsidian = new ItemArmorAA("itemPantsObsidian", InitArmorMaterials.armorMaterialObsidian, 2, new ItemStack(Blocks.obsidian)); - itemBootsObsidian = new ItemArmorAA("itemBootsObsidian", InitArmorMaterials.armorMaterialObsidian, 3, new ItemStack(Blocks.obsidian)); + itemHelmEmerald = new ItemArmorAA("itemHelmEmerald", InitArmorMaterials.armorMaterialEmerald, 0, new ItemStack(Items.EMERALD)); + itemChestEmerald = new ItemArmorAA("itemChestEmerald", InitArmorMaterials.armorMaterialEmerald, 1, new ItemStack(Items.EMERALD)); + itemPantsEmerald = new ItemArmorAA("itemPantsEmerald", InitArmorMaterials.armorMaterialEmerald, 2, new ItemStack(Items.EMERALD)); + itemBootsEmerald = new ItemArmorAA("itemBootsEmerald", InitArmorMaterials.armorMaterialEmerald, 3, new ItemStack(Items.EMERALD)); + itemHelmObsidian = new ItemArmorAA("itemHelmObsidian", InitArmorMaterials.armorMaterialObsidian, 0, new ItemStack(Blocks.OBSIDIAN)); + itemChestObsidian = new ItemArmorAA("itemChestObsidian", InitArmorMaterials.armorMaterialObsidian, 1, new ItemStack(Blocks.OBSIDIAN)); + itemPantsObsidian = new ItemArmorAA("itemPantsObsidian", InitArmorMaterials.armorMaterialObsidian, 2, new ItemStack(Blocks.OBSIDIAN)); + itemBootsObsidian = new ItemArmorAA("itemBootsObsidian", InitArmorMaterials.armorMaterialObsidian, 3, new ItemStack(Blocks.OBSIDIAN)); itemHelmQuartz = new ItemArmorAA("itemHelmQuartz", InitArmorMaterials.armorMaterialQuartz, 0, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())); itemChestQuartz = new ItemArmorAA("itemChestQuartz", InitArmorMaterials.armorMaterialQuartz, 1, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())); itemPantsQuartz = new ItemArmorAA("itemPantsQuartz", InitArmorMaterials.armorMaterialQuartz, 2, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())); @@ -273,32 +273,32 @@ public class InitItems{ CompatUtil.registerMFRSeed(itemRiceSeed); itemCanolaSeed = new ItemSeed("itemCanolaSeed", "seedCanola", InitBlocks.blockCanola, itemMisc, TheMiscItems.CANOLA.ordinal()); CompatUtil.registerMFRSeed(itemCanolaSeed); - itemFlaxSeed = new ItemSeed("itemFlaxSeed", "seedFlax", InitBlocks.blockFlax, Items.string, 0); + itemFlaxSeed = new ItemSeed("itemFlaxSeed", "seedFlax", InitBlocks.blockFlax, Items.STRING, 0); CompatUtil.registerMFRSeed(itemFlaxSeed); itemCoffeeSeed = new ItemSeed("itemCoffeeSeed", "seedCoffeeBeans", InitBlocks.blockCoffee, itemCoffeeBean, 0); CompatUtil.registerMFRSeed(itemCoffeeSeed); - itemPickaxeEmerald = new ItemPickaxeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemPickaxeEmerald", EnumRarity.EPIC); - itemAxeEmerald = new ItemAxeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemAxeEmerald", EnumRarity.EPIC); - itemShovelEmerald = new ItemShovelAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemShovelEmerald", EnumRarity.EPIC); - itemSwordEmerald = new ItemSwordAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemSwordEmerald", EnumRarity.EPIC); - itemHoeEmerald = new ItemHoeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemHoeEmerald", EnumRarity.EPIC); - itemPickaxeObsidian = new ItemPickaxeAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.obsidian), "itemPickaxeObsidian", EnumRarity.UNCOMMON); - itemAxeObsidian = new ItemAxeAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.obsidian), "itemAxeObsidian", EnumRarity.UNCOMMON); - itemShovelObsidian = new ItemShovelAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.obsidian), "itemShovelObsidian", EnumRarity.UNCOMMON); - itemSwordObsidian = new ItemSwordAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.obsidian), "itemSwordObsidian", EnumRarity.UNCOMMON); - itemHoeObsidian = new ItemHoeAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.obsidian), "itemHoeObsidian", EnumRarity.UNCOMMON); + itemPickaxeEmerald = new ItemPickaxeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemPickaxeEmerald", EnumRarity.EPIC); + itemAxeEmerald = new ItemAxeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemAxeEmerald", EnumRarity.EPIC); + itemShovelEmerald = new ItemShovelAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemShovelEmerald", EnumRarity.EPIC); + itemSwordEmerald = new ItemSwordAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemSwordEmerald", EnumRarity.EPIC); + itemHoeEmerald = new ItemHoeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemHoeEmerald", EnumRarity.EPIC); + itemPickaxeObsidian = new ItemPickaxeAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.OBSIDIAN), "itemPickaxeObsidian", EnumRarity.UNCOMMON); + itemAxeObsidian = new ItemAxeAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.OBSIDIAN), "itemAxeObsidian", EnumRarity.UNCOMMON); + itemShovelObsidian = new ItemShovelAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.OBSIDIAN), "itemShovelObsidian", EnumRarity.UNCOMMON); + itemSwordObsidian = new ItemSwordAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.OBSIDIAN), "itemSwordObsidian", EnumRarity.UNCOMMON); + itemHoeObsidian = new ItemHoeAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.OBSIDIAN), "itemHoeObsidian", EnumRarity.UNCOMMON); itemPickaxeQuartz = new ItemPickaxeAA(InitToolMaterials.toolMaterialQuartz, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "itemPickaxeQuartz", EnumRarity.RARE); itemAxeQuartz = new ItemAxeAA(InitToolMaterials.toolMaterialQuartz, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "itemAxeQuartz", EnumRarity.RARE); itemShovelQuartz = new ItemShovelAA(InitToolMaterials.toolMaterialQuartz, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "itemShovelQuartz", EnumRarity.RARE); itemSwordQuartz = new ItemSwordAA(InitToolMaterials.toolMaterialQuartz, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "itemSwordQuartz", EnumRarity.RARE); itemHoeQuartz = new ItemHoeAA(InitToolMaterials.toolMaterialQuartz, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "itemHoeQuartz", EnumRarity.RARE); woodenPaxel = new ItemAllToolAA(Item.ToolMaterial.WOOD, "plankWood", "woodenPaxel", EnumRarity.UNCOMMON, 5192733); - stonePaxel = new ItemAllToolAA(Item.ToolMaterial.STONE, new ItemStack(Blocks.cobblestone), "stonePaxel", EnumRarity.UNCOMMON, 7040621); - ironPaxel = new ItemAllToolAA(Item.ToolMaterial.IRON, new ItemStack(Items.iron_ingot), "ironPaxel", EnumRarity.RARE, 10920613); - goldPaxel = new ItemAllToolAA(Item.ToolMaterial.GOLD, new ItemStack(Items.gold_ingot), "goldPaxel", EnumRarity.RARE, 16770048); - diamondPaxel = new ItemAllToolAA(Item.ToolMaterial.DIAMOND, new ItemStack(Items.diamond), "diamondPaxel", EnumRarity.EPIC, 3250376); - emeraldPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "emeraldPaxel", EnumRarity.EPIC, 7723338); - obsidianPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.obsidian), "obsidianPaxel", EnumRarity.EPIC, 4166); + stonePaxel = new ItemAllToolAA(Item.ToolMaterial.STONE, new ItemStack(Blocks.COBBLESTONE), "stonePaxel", EnumRarity.UNCOMMON, 7040621); + ironPaxel = new ItemAllToolAA(Item.ToolMaterial.IRON, new ItemStack(Items.IRON_INGOT), "ironPaxel", EnumRarity.RARE, 10920613); + goldPaxel = new ItemAllToolAA(Item.ToolMaterial.GOLD, new ItemStack(Items.GOLD_INGOT), "goldPaxel", EnumRarity.RARE, 16770048); + diamondPaxel = new ItemAllToolAA(Item.ToolMaterial.DIAMOND, new ItemStack(Items.DIAMOND), "diamondPaxel", EnumRarity.EPIC, 3250376); + emeraldPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "emeraldPaxel", EnumRarity.EPIC, 7723338); + obsidianPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialObsidian, new ItemStack(Blocks.OBSIDIAN), "obsidianPaxel", EnumRarity.EPIC, 4166); quartzPaxel = new ItemAllToolAA(InitToolMaterials.toolMaterialQuartz, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), "quartzPaxel", EnumRarity.RARE, 1710103); itemPickaxeCrystalRed = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalRed, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), "itemPickaxeCrystalRed", Util.CRYSTAL_RED_RARITY); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index b96369af3..918e6f7c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -52,25 +52,25 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); - ActuallyAdditions.proxy.addRenderVariant(this, new ResourceLocation(ModUtil.MOD_ID_LOWER, "itemPaxel")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, "itemPaxel")); + ActuallyAdditions.proxy.addRenderVariant(this, new ResourceLocation(ModUtil.MOD_ID, "itemPaxel")); } @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ - return Items.iron_hoe.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); + return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); } @Override public boolean canHarvestBlock(IBlockState state, ItemStack stack){ - return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getMaterial(state).isToolNotRequired() || (state.getBlock() == Blocks.snow_layer || state.getBlock()== Blocks.snow || (state.getBlock()== Blocks.obsidian ? this.toolMaterial.getHarvestLevel() >= 3 : (state.getBlock()!= Blocks.diamond_block && state.getBlock()!= Blocks.diamond_ore ? (state.getBlock()!= Blocks.emerald_ore && state.getBlock()!= Blocks.emerald_block? (state.getBlock()!= Blocks.gold_block&& state.getBlock()!= Blocks.gold_ore ? (state.getBlock()!= Blocks.iron_block&& state.getBlock()!= Blocks.iron_ore ? (state.getBlock()!= Blocks.lapis_block&& state.getBlock()!= Blocks.lapis_ore ? (state.getBlock()!= Blocks.redstone_ore && state.getBlock()!= Blocks.lit_redstone_ore ? (state.getBlock().getMaterial(state) == Material.rock || (state.getBlock().getMaterial(state) == Material.iron || state.getBlock().getMaterial(state) == Material.anvil)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); + return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getMaterial(state).isToolNotRequired() || (state.getBlock() == Blocks.SNOW_LAYER || state.getBlock()== Blocks.SNOW || (state.getBlock()== Blocks.OBSIDIAN ? this.toolMaterial.getHarvestLevel() >= 3 : (state.getBlock()!= Blocks.DIAMOND_BLOCK && state.getBlock()!= Blocks.DIAMOND_ORE ? (state.getBlock()!= Blocks.EMERALD_ORE && state.getBlock()!= Blocks.EMERALD_BLOCK? (state.getBlock()!= Blocks.GOLD_BLOCK&& state.getBlock()!= Blocks.GOLD_ORE ? (state.getBlock()!= Blocks.IRON_BLOCK&& state.getBlock()!= Blocks.IRON_ORE ? (state.getBlock()!= Blocks.LAPIS_BLOCK&& state.getBlock()!= Blocks.LAPIS_ORE ? (state.getBlock()!= Blocks.REDSTONE_ORE && state.getBlock()!= Blocks.LIT_REDSTONE_ORE ? (state.getBlock().getMaterial(state) == Material.ROCK || (state.getBlock().getMaterial(state) == Material.IRON || state.getBlock().getMaterial(state) == Material.ANVIL)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); } private boolean hasExtraWhitelist(Block block){ - String name = block.getRegistryName(); + String name = block.getRegistryName().toString(); if(name != null){ for(String list : ConfigValues.paxelExtraMiningWhitelist){ if(list.equals(name)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index 1b879a5d6..79f6b6d2d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -24,7 +24,7 @@ import java.util.Set; public class ItemAxeAA extends ItemToolAA{ - private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.planks, Blocks.bookshelf, Blocks.log, Blocks.log2, Blocks.chest, Blocks.pumpkin, Blocks.lit_pumpkin, Blocks.melon_block, Blocks.ladder, Blocks.wooden_button, Blocks.wooden_pressure_plate); + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER, Blocks.WOODEN_BUTTON, Blocks.WOODEN_PRESSURE_PLATE); public ItemAxeAA(Item.ToolMaterial material, String repairItem, String unlocalizedName, EnumRarity rarity){ super(6.0F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); @@ -36,6 +36,6 @@ public class ItemAxeAA extends ItemToolAA{ public float getStrVsBlock(ItemStack stack, IBlockState state){ Material material = state.getMaterial(); - return material != Material.wood && material != Material.plants && material != Material.vine ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; + return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 7683888dc..5ec32cac2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -87,7 +87,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ @SuppressWarnings("unchecked") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ - list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+"."+this.getBaseName()+".desc")); + list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+"."+this.getBaseName()+".desc")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index 5c33595cd..a4593dbb0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -27,7 +27,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.StringUtils; import net.minecraft.world.World; @@ -47,7 +46,7 @@ public class ItemCoffee extends ItemFoodBase{ } public static void initIngredients(){ - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new MilkIngredient(new ItemStack(Items.milk_bucket))); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new MilkIngredient(new ItemStack(Items.MILK_BUCKET))); //Pam's Soy Milk (For Jemx because he's lactose intolerant. YER HAPPY NAO!?) if(Loader.isModLoaded("harvestcraft")){ Item item = ItemUtil.getItemFromName("harvestcraft:soymilkItem"); @@ -56,13 +55,13 @@ public class ItemCoffee extends ItemFoodBase{ } } - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.sugar), new PotionEffect[]{new PotionEffect(MobEffects.moveSpeed, 30, 0)}, 4)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.magma_cream), new PotionEffect[]{new PotionEffect(MobEffects.fireResistance, 20, 0)}, 2)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.fish, 1, 3), new PotionEffect[]{new PotionEffect(MobEffects.waterBreathing, 10, 0)}, 2)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.golden_carrot), new PotionEffect[]{new PotionEffect(MobEffects.nightVision, 30, 0)}, 2)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.ghast_tear), new PotionEffect[]{new PotionEffect(MobEffects.regeneration, 5, 0)}, 3)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.blaze_powder), new PotionEffect[]{new PotionEffect(MobEffects.damageBoost, 15, 0)}, 4)); - ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.fermented_spider_eye), new PotionEffect[]{new PotionEffect(MobEffects.invisibility, 25, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.SUGAR), new PotionEffect[]{new PotionEffect(MobEffects.SPEED, 30, 0)}, 4)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.MAGMA_CREAM), new PotionEffect[]{new PotionEffect(MobEffects.FIRE_RESISTANCE, 20, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.FISH, 1, 3), new PotionEffect[]{new PotionEffect(MobEffects.WATER_BREATHING, 10, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.GOLDEN_CARROT), new PotionEffect[]{new PotionEffect(MobEffects.NIGHT_VISION, 30, 0)}, 2)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.GHAST_TEAR), new PotionEffect[]{new PotionEffect(MobEffects.REGENERATION, 5, 0)}, 3)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.BLAZE_POWDER), new PotionEffect[]{new PotionEffect(MobEffects.STRENGTH, 15, 0)}, 4)); + ActuallyAdditionsAPI.addCoffeeMachineIngredient(new CoffeeIngredient(new ItemStack(Items.FERMENTED_SPIDER_EYE), new PotionEffect[]{new PotionEffect(MobEffects.INVISIBILITY, 25, 0)}, 2)); } public static CoffeeIngredient getIngredientFromStack(ItemStack stack){ @@ -159,7 +158,7 @@ public class ItemCoffee extends ItemFoodBase{ @Override public String getExtraText(){ - return StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".coffee.extra.milk"); + return StringUtil.localize("container.nei."+ModUtil.MOD_ID+".coffee.extra.milk"); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 3640fd7e9..04874bd94 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -61,8 +61,8 @@ public class ItemCrystal extends ItemBase{ ResourceLocation[] resLocs = new ResourceLocation[BlockCrystal.allCrystals.length]; for(int i = 0; i < BlockCrystal.allCrystals.length; i++){ String name = this.getBaseName()+BlockCrystal.allCrystals[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 02dbecbc2..535840559 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -237,11 +237,11 @@ public class ItemDrill extends ItemEnergy{ if(this.getEnergyStored(stack) >= use){ //Enchants the Drill depending on the Upgrades it has if(this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.SILK_TOUCH)){ - ItemUtil.addEnchantment(stack, Enchantments.silkTouch, 1); + ItemUtil.addEnchantment(stack, Enchantments.SILK_TOUCH, 1); } else{ if(this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE)){ - ItemUtil.addEnchantment(stack, Enchantments.fortune, this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE_II) ? 3 : 1); + ItemUtil.addEnchantment(stack, Enchantments.FORTUNE, this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE_II) ? 3 : 1); } } @@ -259,8 +259,8 @@ public class ItemDrill extends ItemEnergy{ } //Removes Enchantments added above - ItemUtil.removeEnchantment(stack, Enchantments.silkTouch); - ItemUtil.removeEnchantment(stack, Enchantments.fortune); + ItemUtil.removeEnchantment(stack, Enchantments.SILK_TOUCH); + ItemUtil.removeEnchantment(stack, Enchantments.FORTUNE); } return toReturn; } @@ -269,7 +269,7 @@ public class ItemDrill extends ItemEnergy{ public boolean canHarvestBlock(IBlockState state, ItemStack stack){ int harvestLevel = this.getHarvestLevel(stack, ""); Block block = state.getBlock(); - return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.snow_layer || block == Blocks.snow || (block == Blocks.obsidian ? harvestLevel >= 3 : (block != Blocks.diamond_block && block != Blocks.diamond_ore ? (block != Blocks.emerald_ore && block != Blocks.emerald_block ? (block != Blocks.gold_block && block != Blocks.gold_ore ? (block != Blocks.iron_block && block != Blocks.iron_ore ? (block != Blocks.lapis_block && block != Blocks.lapis_ore ? (block != Blocks.redstone_ore && block != Blocks.lit_redstone_ore ? (block.getMaterial(state) == Material.rock || (block.getMaterial(state) == Material.iron || block.getMaterial(state) == Material.anvil)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); + return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? harvestLevel >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); } @Override @@ -345,8 +345,8 @@ public class ItemDrill extends ItemEnergy{ ResourceLocation[] resLocs = new ResourceLocation[16]; for(int i = 0; i < 16; i++){ String name = this.getBaseName()+TheColoredLampColors.values()[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } @@ -516,7 +516,7 @@ public class ItemDrill extends ItemEnergy{ } private boolean hasExtraWhitelist(Block block){ - String name = block.getRegistryName(); + String name = block.getRegistryName().toString(); if(name != null){ for(String list : ConfigValues.drillExtraminingWhitelist){ if(list.equals(name)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index f4053b3b0..a32317527 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -62,7 +62,7 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allDusts.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 6429ad523..797f57e27 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -23,7 +23,6 @@ import net.minecraft.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -106,8 +105,8 @@ public class ItemFoods extends ItemFoodBase{ ResourceLocation[] resLocs = new ResourceLocation[allFoods.length]; for(int i = 0; i < allFoods.length; i++){ String name = this.getBaseName()+allFoods[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 03dc159f3..8a23b4cb1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -79,7 +79,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ PotionEffect secondEffectToGet = new PotionEffect(Potion.getPotionById(allJams[stack.getItemDamage()].secondEffectToGet), 600); player.addPotionEffect(secondEffectToGet); - ItemStack returnItem = new ItemStack(Items.glass_bottle); + ItemStack returnItem = new ItemStack(Items.GLASS_BOTTLE); if(!((EntityPlayer)player).inventory.addItemStackToInventory(returnItem.copy())){ EntityItem entityItem = new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, returnItem.copy()); entityItem.setPickupDelay(0); @@ -102,7 +102,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allJams.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index d15bc65b5..743afdce1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -46,7 +46,7 @@ public class ItemLaserWrench extends ItemBase{ if(tile instanceof TileEntityLaserRelay){ if(ItemPhantomConnector.getStoredPosition(stack) == null){ ItemPhantomConnector.storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.stored.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.stored.desc"))); } else{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); @@ -56,10 +56,10 @@ public class ItemLaserWrench extends ItemBase{ ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.connected.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.connected.desc"))); } else{ - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".laser.cantConnect.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.cantConnect.desc"))); ItemPhantomConnector.clearStorage(stack); } } @@ -87,11 +87,11 @@ public class ItemLaserWrench extends ItemBase{ public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ BlockPos coords = ItemPhantomConnector.getStoredPosition(stack); if(coords != null){ - list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".boundTo.desc")+":"); + list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".boundTo.desc")+":"); list.add("X: "+coords.getX()); list.add("Y: "+coords.getY()); list.add("Z: "+coords.getZ()); - list.add(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".clearStorage.desc")); + list.add(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".clearStorage.desc")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 474e97826..61c83adc5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -62,8 +62,8 @@ public class ItemMisc extends ItemBase{ ResourceLocation[] resLocs = new ResourceLocation[allMiscItems.length]; for(int i = 0; i < allMiscItems.length; i++){ String name = this.getBaseName()+allMiscItems[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID_LOWER, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, name)); + resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 02ee90452..4fd624182 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -94,7 +94,7 @@ public class ItemPhantomConnector extends ItemBase{ ((TileEntityBase)tile).sendUpdate(); } clearStorage(stack); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.connected.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.connected.desc"))); return EnumActionResult.SUCCESS; } return EnumActionResult.FAIL; @@ -102,7 +102,7 @@ public class ItemPhantomConnector extends ItemBase{ } //Storing Connections storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.stored.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.stored.desc"))); } return EnumActionResult.SUCCESS; } @@ -115,7 +115,7 @@ public class ItemPhantomConnector extends ItemBase{ if(tile instanceof IPhantomTile){ ((IPhantomTile)tile).setBoundPosition(null); } - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".phantom.unbound.desc"))); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.unbound.desc"))); return false; } } @@ -138,11 +138,11 @@ public class ItemPhantomConnector extends ItemBase{ public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ BlockPos coords = getStoredPosition(stack); if(coords != null){ - list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".boundTo.desc")+":"); + list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".boundTo.desc")+":"); list.add("X: "+coords.getX()); list.add("Y: "+coords.getY()); list.add("Z: "+coords.getZ()); - list.add(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID_LOWER+".clearStorage.desc")); + list.add(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".clearStorage.desc")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index 404db70ca..c706f7bfc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -24,7 +24,7 @@ import java.util.Set; public class ItemPickaxeAA extends ItemToolAA{ - private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.activator_rail, Blocks.coal_ore, Blocks.cobblestone, Blocks.detector_rail, Blocks.diamond_block, Blocks.diamond_ore, Blocks.double_stone_slab, Blocks.golden_rail, Blocks.gold_block, Blocks.gold_ore, Blocks.ice, Blocks.iron_block, Blocks.iron_ore, Blocks.lapis_block, Blocks.lapis_ore, Blocks.lit_redstone_ore, Blocks.mossy_cobblestone, Blocks.netherrack, Blocks.packed_ice, Blocks.rail, Blocks.redstone_ore, Blocks.sandstone, Blocks.red_sandstone, Blocks.stone, Blocks.stone_slab, Blocks.stone_button, Blocks.stone_pressure_plate); + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.ACTIVATOR_RAIL, Blocks.COAL_ORE, Blocks.COBBLESTONE, Blocks.DETECTOR_RAIL, Blocks.DIAMOND_BLOCK, Blocks.DIAMOND_ORE, Blocks.DOUBLE_STONE_SLAB, Blocks.GOLDEN_RAIL, Blocks.GOLD_BLOCK, Blocks.GOLD_ORE, Blocks.ICE, Blocks.IRON_BLOCK, Blocks.IRON_ORE, Blocks.LAPIS_BLOCK, Blocks.LAPIS_ORE, Blocks.LIT_REDSTONE_ORE, Blocks.MOSSY_COBBLESTONE, Blocks.NETHERRACK, Blocks.PACKED_ICE, Blocks.RAIL, Blocks.REDSTONE_ORE, Blocks.SANDSTONE, Blocks.RED_SANDSTONE, Blocks.STONE, Blocks.STONE_SLAB, Blocks.STONE_BUTTON, Blocks.STONE_PRESSURE_PLATE); public ItemPickaxeAA(Item.ToolMaterial material, String repairItem, String unlocalizedName, EnumRarity rarity){ super(1.0F, -2.8F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); @@ -34,14 +34,48 @@ public class ItemPickaxeAA extends ItemToolAA{ super(1.0F, -2.8F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); } - @Override - public boolean canHarvestBlock(IBlockState state) { - Block blockIn = state.getBlock(); - return blockIn == Blocks.obsidian ? toolMaterial.getHarvestLevel() == 3 : blockIn != Blocks.diamond_block && blockIn != Blocks.diamond_ore ? blockIn != Blocks.emerald_ore && blockIn != Blocks.emerald_block ? blockIn != Blocks.gold_block && blockIn != Blocks.gold_ore ? blockIn != Blocks.iron_block && blockIn != Blocks.iron_ore ? blockIn != Blocks.lapis_block && blockIn != Blocks.lapis_ore ? blockIn != Blocks.redstone_ore && blockIn != Blocks.lit_redstone_ore ? state.getMaterial() == Material.rock || (state.getMaterial() == Material.iron || state.getMaterial() == Material.anvil) : toolMaterial.getHarvestLevel() >= 2 : toolMaterial.getHarvestLevel() >= 1 : toolMaterial.getHarvestLevel() >= 1 : toolMaterial.getHarvestLevel() >= 2 : toolMaterial.getHarvestLevel() >= 2 : toolMaterial.getHarvestLevel() >= 2; + public boolean canHarvestBlock(IBlockState blockIn){ + Block block = blockIn.getBlock(); + + if(block == Blocks.OBSIDIAN){ + return this.toolMaterial.getHarvestLevel() == 3; + } + else if(block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE){ + if(block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK){ + if(block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE){ + if(block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE){ + if(block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE){ + if(block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE){ + Material material = blockIn.getMaterial(); + return material == Material.ROCK || (material == Material.IRON || material == Material.ANVIL); + } + else{ + return this.toolMaterial.getHarvestLevel() >= 2; + } + } + else{ + return this.toolMaterial.getHarvestLevel() >= 1; + } + } + else{ + return this.toolMaterial.getHarvestLevel() >= 1; + } + } + else{ + return this.toolMaterial.getHarvestLevel() >= 2; + } + } + else{ + return this.toolMaterial.getHarvestLevel() >= 2; + } + } + else{ + return this.toolMaterial.getHarvestLevel() >= 2; + } } public float getStrVsBlock(ItemStack stack, IBlockState state){ Material material = state.getMaterial(); - return material != Material.iron && material != Material.anvil && material != Material.rock ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; + return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 5de85c0c3..0e377c54c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -107,7 +107,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allRings.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index b22a29ad6..aa8328703 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -17,6 +17,7 @@ import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -32,7 +33,7 @@ import java.util.Set; public class ItemShovelAA extends ItemToolAA{ - private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.clay, Blocks.dirt, Blocks.farmland, Blocks.grass, Blocks.gravel, Blocks.mycelium, Blocks.sand, Blocks.snow, Blocks.snow_layer, Blocks.soul_sand, Blocks.grass_path); + private static final Set EFFECTIVE_ON = Sets.newHashSet(Blocks.CLAY, Blocks.DIRT, Blocks.FARMLAND, Blocks.GRASS, Blocks.GRAVEL, Blocks.MYCELIUM, Blocks.SAND, Blocks.SNOW, Blocks.SNOW_LAYER, Blocks.SOUL_SAND, Blocks.GRASS_PATH); public ItemShovelAA(Item.ToolMaterial material, String repairItem, String unlocalizedName, EnumRarity rarity){ super(1.5F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); @@ -42,38 +43,12 @@ public class ItemShovelAA extends ItemToolAA{ super(1.5F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); } - public float getStrVsBlock(ItemStack stack, IBlockState state){ - Material material = state.getMaterial(); - return material != Material.wood && material != Material.plants && material != Material.vine ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; - } - public boolean canHarvestBlock(IBlockState blockIn){ Block block = blockIn.getBlock(); - return block == Blocks.snow_layer || block == Blocks.snow; + return block == Blocks.SNOW_LAYER || block == Blocks.SNOW; } public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ - if(!playerIn.canPlayerEdit(pos.offset(facing), facing, stack)){ - return EnumActionResult.FAIL; - } - else{ - IBlockState iblockstate = worldIn.getBlockState(pos); - Block block = iblockstate.getBlock(); - - if(facing != EnumFacing.DOWN && worldIn.getBlockState(pos.up()).getMaterial() == Material.air && block == Blocks.grass){ - IBlockState iblockstate1 = Blocks.grass_path.getDefaultState(); - worldIn.playSound(playerIn, pos, SoundEvents.item_shovel_flatten, SoundCategory.BLOCKS, 1.0F, 1.0F); - - if(!worldIn.isRemote){ - worldIn.setBlockState(pos, iblockstate1, 11); - stack.damageItem(1, playerIn); - } - - return EnumActionResult.SUCCESS; - } - else{ - return EnumActionResult.PASS; - } - } + return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index a2bc98d16..b9e2a57cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -53,7 +53,7 @@ public class ItemWaterRemovalRing extends ItemEnergy{ //Remove Water BlockPos pos = new BlockPos(theX, theY, theZ); Block block = PosUtil.getBlock(pos, world); - if((block == Blocks.water || block == Blocks.flowing_water) && this.getEnergyStored(stack) >= energyUse){ + if((block == Blocks.WATER || block == Blocks.FLOWING_WATER) && this.getEnergyStored(stack) >= energyUse){ world.setBlockToAir(pos); if(!player.capabilities.isCreativeMode){ @@ -61,7 +61,7 @@ public class ItemWaterRemovalRing extends ItemEnergy{ } } //Remove Lava - else if((block == Blocks.lava || block == Blocks.flowing_lava) && this.getEnergyStored(stack) >= energyUse*2){ + else if((block == Blocks.LAVA || block == Blocks.FLOWING_LAVA) && this.getEnergyStored(stack) >= energyUse*2){ world.setBlockToAir(pos); if(!player.capabilities.isCreativeMode){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index abeda73f7..41e9e8727 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnervator; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -54,7 +53,7 @@ public class ItemArmorAA extends ItemArmor{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index 381fd1762..528e4cacf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -43,6 +43,6 @@ public class ItemBase extends Item{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java index 547fd7561..547a7a409 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java @@ -27,7 +27,7 @@ public class ItemBucketAA extends ItemBucket{ public ItemBucketAA(Block block, String unlocName){ super(block); this.name = unlocName; - this.setContainerItem(Items.bucket); + this.setContainerItem(Items.BUCKET); this.register(); } @@ -47,7 +47,7 @@ public class ItemBucketAA extends ItemBucket{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 2b14397b3..84c8a7c85 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -54,7 +54,7 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index d29942265..4b67029a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -44,6 +44,6 @@ public class ItemFoodBase extends ItemFood{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index accc69946..0f0f2f584 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -50,7 +50,7 @@ public class ItemHoeAA extends ItemHoe{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 5c663ecc5..8c152bbc8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -32,7 +32,7 @@ public class ItemSeed extends ItemSeeds{ public String oredictName; public ItemSeed(String name, String oredictName, Block plant, Item returnItem, int returnMeta){ - super(plant, Blocks.farmland); + super(plant, Blocks.FARMLAND); this.name = name; this.oredictName = oredictName; this.plant = plant; @@ -61,7 +61,7 @@ public class ItemSeed extends ItemSeeds{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index 01e549793..962f164e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -50,7 +50,7 @@ public class ItemSwordAA extends ItemSword{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } protected Class getItemBlock(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index 7c619a9ac..06cf84444 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -49,7 +49,7 @@ public class ItemToolAA extends ItemTool{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID_LOWER, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index df637be67..8e81d4ed2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -31,12 +31,12 @@ public class LensColor extends Lens{ public static final int ENERGY_USE = 200; public static final Object[] CONVERTABLE_BLOCKS = new Object[]{ - Items.dye, - Blocks.wool, - Blocks.stained_glass, - Blocks.stained_glass_pane, - Blocks.stained_hardened_clay, - Blocks.carpet, + Items.DYE, + Blocks.WOOL, + Blocks.STAINED_GLASS, + Blocks.STAINED_GLASS_PANE, + Blocks.STAINED_HARDENED_CLAY, + Blocks.CARPET, InitBlocks.blockColoredLamp, InitBlocks.blockColoredLampOn }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java index 2a2c97b33..848dad922 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java @@ -39,31 +39,31 @@ public class LensNoneRecipeHandler{ public static void init(){ //Crystal Blocks - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.redstone_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.REDSTONE_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.lapis_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.LAPIS.ordinal()), 400); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.LAPIS_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.LAPIS.ordinal()), 400); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.diamond_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 600); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.DIAMOND_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 600); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.emerald_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.EMERALD.ordinal()), 1000); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.EMERALD_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.EMERALD.ordinal()), 1000); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.coal_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), 600); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.COAL_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), 600); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.iron_block), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), 800); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.IRON_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), 800); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); //Crystal Items - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.redstone), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 40); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.REDSTONE), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 40); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.dye, 1, 4), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 40); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.DYE, 1, 4), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 40); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.diamond), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 60); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.DIAMOND), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 60); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.emerald), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), 100); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.EMERALD), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), 100); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.coal), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), 60); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.COAL), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), 60); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.iron_ingot), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 80); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.IRON_INGOT), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 80); //Lenses ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new ItemStack(InitItems.itemColorLens), 5000); @@ -83,18 +83,18 @@ public class LensNoneRecipeHandler{ //Misc if(ConfigCrafting.RECONSTRUCTOR_MISC.isEnabled()){ - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.sand), new ItemStack(Blocks.soul_sand), 20000); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.SAND), new ItemStack(Blocks.SOUL_SAND), 20000); recipeSoulSand = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.rotten_flesh), new ItemStack(Items.leather), 8000); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.LEATHER), 8000); recipeLeather = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.red_mushroom), new ItemStack(Items.nether_wart), 150000); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.RED_MUSHROOM), new ItemStack(Items.NETHER_WART), 150000); recipeNetherWart = RecipeUtil.lastReconstructorRecipe(); } - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.quartz_block), new ItemStack(InitBlocks.blockTestifiBucksWhiteWall), 10); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.QUARTZ_BLOCK), new ItemStack(InitBlocks.blockTestifiBucksWhiteWall), 10); recipeWhiteWall = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.quartz_block, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); + ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.QUARTZ_BLOCK, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); recipeGreenWall = RecipeUtil.lastReconstructorRecipe(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java index 89fc96e3a..7d40f48ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java @@ -57,9 +57,9 @@ public enum TheFoods{ } public static void setReturnItems(){ - SPAGHETTI.returnItem = new ItemStack(Items.bowl); - PUMPKIN_STEW.returnItem = new ItemStack(Items.bowl); - CARROT_JUICE.returnItem = new ItemStack(Items.glass_bottle); + SPAGHETTI.returnItem = new ItemStack(Items.BOWL); + PUMPKIN_STEW.returnItem = new ItemStack(Items.BOWL); + CARROT_JUICE.returnItem = new ItemStack(Items.GLASS_BOTTLE); FRENCH_FRIES.returnItem = new ItemStack(InitItems.itemMisc, 1, TheMiscItems.PAPER_CONE.ordinal()); FISH_N_CHIPS.returnItem = new ItemStack(InitItems.itemMisc, 1, TheMiscItems.PAPER_CONE.ordinal()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java index e1998c342..4e1ade2f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java @@ -19,22 +19,22 @@ import net.minecraft.potion.Potion; public enum ThePotionRings{ - SPEED(MobEffects.moveSpeed.getName(), 8171462, MobEffects.moveSpeed, 0, 1, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.sugar)), + SPEED(MobEffects.SPEED.getName(), 8171462, MobEffects.SPEED, 0, 1, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.SUGAR)), //Slowness - HASTE(MobEffects.digSpeed.getName(), 14270531, MobEffects.digSpeed, 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.repeater)), + HASTE(MobEffects.HASTE.getName(), 14270531, MobEffects.HASTE, 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.REPEATER)), //Mining Fatigue - STRENGTH(MobEffects.damageBoost.getName(), 9643043, MobEffects.damageBoost, 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Items.blaze_powder)), + STRENGTH(MobEffects.STRENGTH.getName(), 9643043, MobEffects.STRENGTH, 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Items.BLAZE_POWDER)), //Health (Not Happening) //Damage - JUMP_BOOST(MobEffects.jump.getName(), 7889559, MobEffects.jump, 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Blocks.piston)), + JUMP_BOOST(MobEffects.JUMP_BOOST.getName(), 7889559, MobEffects.JUMP_BOOST, 0, 1, 10, false, EnumRarity.RARE, new ItemStack(Blocks.PISTON)), //Nausea - REGEN(MobEffects.regeneration.getName(), 13458603, MobEffects.regeneration, 0, 1, 50, true, EnumRarity.RARE, new ItemStack(Items.ghast_tear)), - RESISTANCE(MobEffects.resistance.getName(), 10044730, MobEffects.resistance, 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.slime_ball)), - FIRE_RESISTANCE(MobEffects.fireResistance.getName(), 14981690, MobEffects.fireResistance, 0, 0, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.magma_cream)), - WATER_BREATHING(MobEffects.waterBreathing.getName(), 3035801, MobEffects.waterBreathing, 0, 0, 10, false, EnumRarity.RARE, new ItemStack(Items.fish, 1, 3)), - INVISIBILITY(MobEffects.invisibility.getName(), 8356754, MobEffects.invisibility, 0, 0, 10, false, EnumRarity.EPIC, new ItemStack(Items.fermented_spider_eye)), + REGEN(MobEffects.REGENERATION.getName(), 13458603, MobEffects.REGENERATION, 0, 1, 50, true, EnumRarity.RARE, new ItemStack(Items.GHAST_TEAR)), + RESISTANCE(MobEffects.RESISTANCE.getName(), 10044730, MobEffects.RESISTANCE, 0, 1, 10, false, EnumRarity.EPIC, new ItemStack(Items.SLIME_BALL)), + FIRE_RESISTANCE(MobEffects.FIRE_RESISTANCE.getName(), 14981690, MobEffects.FIRE_RESISTANCE, 0, 0, 10, false, EnumRarity.UNCOMMON, new ItemStack(Items.MAGMA_CREAM)), + WATER_BREATHING(MobEffects.WATER_BREATHING.getName(), 3035801, MobEffects.WATER_BREATHING, 0, 0, 10, false, EnumRarity.RARE, new ItemStack(Items.FISH, 1, 3)), + INVISIBILITY(MobEffects.INVISIBILITY.getName(), 8356754, MobEffects.INVISIBILITY, 0, 0, 10, false, EnumRarity.EPIC, new ItemStack(Items.FERMENTED_SPIDER_EYE)), //Blindness - NIGHT_VISION(MobEffects.nightVision.getName(), 2039713, MobEffects.nightVision, 0, 0, 300, false, EnumRarity.RARE, new ItemStack(Items.golden_carrot)); + NIGHT_VISION(MobEffects.NIGHT_VISION.getName(), 2039713, MobEffects.NIGHT_VISION, 0, 0, 300, false, EnumRarity.RARE, new ItemStack(Items.GOLDEN_CARROT)); //Hunger //Weakness //Poison diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index 695977f42..8c2ef3b91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -33,25 +33,13 @@ import net.minecraft.item.ItemStack; @JEIPlugin public class JEIActuallyAdditionsPlugin implements IModPlugin{ - private IJeiHelpers helpers; - - @Override - public void onJeiHelpersAvailable(IJeiHelpers jeiHelpers){ - this.helpers = jeiHelpers; - } - - @Override - public void onItemRegistryAvailable(IItemRegistry itemRegistry){ - - } - @Override public void register(IModRegistry registry){ registry.addRecipeCategories( - new BookletRecipeCategory(this.helpers.getGuiHelper()), - new CoffeeMachineRecipeCategory(this.helpers.getGuiHelper()), - new CrusherRecipeCategory(this.helpers.getGuiHelper()), - new ReconstructorRecipeCategory(this.helpers.getGuiHelper()) + new BookletRecipeCategory(registry.getJeiHelpers().getGuiHelper()), + new CoffeeMachineRecipeCategory(registry.getJeiHelpers().getGuiHelper()), + new CrusherRecipeCategory(registry.getJeiHelpers().getGuiHelper()), + new ReconstructorRecipeCategory(registry.getJeiHelpers().getGuiHelper()) ); registry.addRecipeHandlers( @@ -71,7 +59,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.addRecipeClickArea(GuiGrinder.GuiGrinderDouble.class, 51, 40, 74, 22, CrusherRecipeCategory.NAME); registry.addRecipeClickArea(GuiFurnaceDouble.class, 51, 40, 74, 22, VanillaRecipeCategoryUid.SMELTING); - INbtIgnoreList ignoreList = this.helpers.getNbtIgnoreList(); + INbtIgnoreList ignoreList = registry.getJeiHelpers().getNbtIgnoreList(); ignoreList.ignoreNbtTagNames(InitItems.itemDrill, "Energy"); ignoreList.ignoreNbtTagNames(InitItems.itemTeleStaff, "Energy"); ignoreList.ignoreNbtTagNames(InitItems.itemGrowthRing, "Energy"); @@ -83,7 +71,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ ignoreList.ignoreNbtTagNames(InitItems.itemBatteryQuadruple, "Energy"); ignoreList.ignoreNbtTagNames(InitItems.itemBatteryQuintuple, "Energy"); - IItemBlacklist blacklist = this.helpers.getItemBlacklist(); + IItemBlacklist blacklist = registry.getJeiHelpers().getItemBlacklist(); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockRice)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockCanola)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockFlax)); @@ -92,11 +80,6 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockColoredLampOn, 1, Util.WILDCARD)); } - @Override - public void onRecipeRegistryAvailable(IRecipeRegistry recipeRegistry){ - - } - @Override public void onRuntimeAvailable(IJeiRuntime jeiRuntime){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java index d55566354..8c7507482 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java @@ -29,7 +29,7 @@ public abstract class RecipeWrapperWithButton{ public void drawButton(Minecraft minecraft, int x, int y){ super.drawButton(minecraft, x, y); if(this.visible && this.hovered){ - String text = StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".clickToSeeRecipe"); + String text = StringUtil.localize("booklet."+ModUtil.MOD_ID+".clickToSeeRecipe"); Minecraft.getMinecraft().fontRendererObj.drawString(text, this.xPosition-Minecraft.getMinecraft().fontRendererObj.getStringWidth(text)-1, this.yPosition+this.height/2-Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT/2, StringUtil.DECIMAL_COLOR_WHITE, true); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index bdba5998f..00596b513 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -55,14 +55,9 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe return new ArrayList(); } - @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ - - } - @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ - List header = minecraft.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.header").replaceAll("", TextFormatting.BLUE+"").replaceAll("", TextFormatting.BLACK+""), 150); + List header = minecraft.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".booklet.header").replaceAll("", TextFormatting.BLUE+"").replaceAll("", TextFormatting.BLACK+""), 150); for(int i = 0; i < header.size(); i++){ minecraft.fontRendererObj.drawString((String)header.get(i), 0, 17+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); } @@ -70,7 +65,7 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe int maxLines = 4; IBookletChapter chapter = this.thePage.getChapter(); String aText = (chapter.getPages()[0] instanceof PagePicture && chapter.getPages().length > 1 ? chapter.getPages()[1] : chapter.getPages()[0]).getText(); - List text = minecraft.fontRendererObj.listFormattedStringToWidth(aText != null ? aText : TextFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.noText"), 150); + List text = minecraft.fontRendererObj.listFormattedStringToWidth(aText != null ? aText : TextFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID+".booklet.noText"), 150); for(int i = 0; i < Math.min(maxLines, text.size()); i++){ minecraft.fontRendererObj.drawString(text.get(i)+(i == maxLines-1 && text.size() > maxLines ? TextFormatting.RESET+""+TextFormatting.BLACK+"..." : ""), 0, 16+25+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index 11086038f..5ac65b318 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -69,22 +69,17 @@ public class CoffeeMachineRecipeWrapper extends RecipeWrapperWithButton implemen return new ArrayList(); } - @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ - - } - @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ this.updateButton(minecraft, mouseX, mouseY); if(this.theIngredient.getExtraText() != null){ - minecraft.fontRendererObj.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".coffee.special")+":", 2, 4, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); + minecraft.fontRendererObj.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".coffee.special")+":", 2, 4, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); minecraft.fontRendererObj.drawString(this.theIngredient.getExtraText(), 2, 16, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); } if(this.theIngredient.maxAmplifier > 0){ - minecraft.fontRendererObj.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".coffee.maxAmount")+": "+this.theIngredient.maxAmplifier, 2, 28, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); + minecraft.fontRendererObj.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".coffee.maxAmount")+": "+this.theIngredient.maxAmplifier, 2, 28, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java index 7191d2ffe..6326b1c93 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java @@ -62,11 +62,6 @@ public class CrusherRecipeWrapper extends RecipeWrapperWithButton implements IRe return new ArrayList(); } - @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ - - } - @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ this.updateButton(minecraft, mouseX, mouseY); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java index 8813147f6..271c5a055 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java @@ -53,11 +53,6 @@ public class ReconstructorRecipeWrapper extends RecipeWrapperWithButton implemen return new ArrayList(); } - @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ - - } - @Override public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ this.updateButton(minecraft, mouseX, mouseY); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index eedb4beb6..90866e5c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemArmor.ArmorMaterial; -import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; public class InitArmorMaterials{ @@ -32,15 +31,15 @@ public class InitArmorMaterials{ public static void init(){ ModUtil.LOGGER.info("Initializing Armor Materials..."); - armorMaterialEmerald = EnumHelper.addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID_LOWER+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.item_armor_equip_generic); - armorMaterialObsidian = EnumHelper.addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID_LOWER+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.item_armor_equip_generic); - armorMaterialQuartz = EnumHelper.addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID_LOWER+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.item_armor_equip_generic); + armorMaterialEmerald = EnumHelper.addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialObsidian = EnumHelper.addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialQuartz = EnumHelper.addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalRed = EnumHelper.addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID_LOWER+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.item_armor_equip_generic); - armorMaterialCrystalBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID_LOWER+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.item_armor_equip_generic); - armorMaterialCrystalLightBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID_LOWER+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.item_armor_equip_generic); - armorMaterialCrystalBlack = EnumHelper.addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID_LOWER+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.item_armor_equip_generic); - armorMaterialCrystalGreen = EnumHelper.addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID_LOWER+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.item_armor_equip_generic); - armorMaterialCrystalWhite = EnumHelper.addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID_LOWER+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.item_armor_equip_generic); + armorMaterialCrystalRed = EnumHelper.addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalLightBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlack = EnumHelper.addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalGreen = EnumHelper.addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalWhite = EnumHelper.addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 01158553b..3f0d7d5cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -31,7 +31,7 @@ public class DamageSources extends DamageSource{ @Override public ITextComponent getDeathMessage(EntityLivingBase entity){ - String locTag = "death."+ModUtil.MOD_ID_LOWER+"."+this.damageType+"."+(Util.RANDOM.nextInt(this.messageCount)+1); + String locTag = "death."+ModUtil.MOD_ID+"."+this.damageType+"."+(Util.RANDOM.nextInt(this.messageCount)+1); return new TextComponentString(StringUtil.localizeFormatted(locTag, entity.getName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java index 68d948301..2fe187db9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java @@ -33,7 +33,7 @@ public class DispenserHandlerEmptyBucket extends BehaviorDefaultDispenseItem{ BlockPos pos = new BlockPos(x, y, z); if(source.getWorld().isAirBlock(pos) && !PosUtil.getMaterial(pos, source.getWorld()).isSolid() && ((ItemBucket)bucket.getItem()).tryPlaceContainedLiquid(FakePlayerUtil.getFakePlayer(source.getWorld()), source.getWorld(), pos)){ - return new ItemStack(Items.bucket); + return new ItemStack(Items.BUCKET); } return new BehaviorDefaultDispenseItem().dispense(source, bucket); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java index b13040b75..726dc44d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java @@ -58,16 +58,16 @@ public class DispenserHandlerFillBucket extends BehaviorDefaultDispenseItem{ BlockPos pos = new BlockPos(x, y, z); Block block = PosUtil.getBlock(pos, source.getWorld()); - if(block == Blocks.water || block == Blocks.flowing_water){ + if(block == Blocks.WATER || block == Blocks.FLOWING_WATER){ if(PosUtil.getMetadata(pos, source.getWorld()) == 0){ source.getWorld().setBlockToAir(pos); - return new ItemStack(Items.water_bucket); + return new ItemStack(Items.WATER_BUCKET); } } - else if(block == Blocks.lava || block == Blocks.flowing_lava){ + else if(block == Blocks.LAVA || block == Blocks.FLOWING_LAVA){ if(PosUtil.getMetadata(pos, source.getWorld()) == 0){ source.getWorld().setBlockToAir(pos); - return new ItemStack(Items.lava_bucket); + return new ItemStack(Items.LAVA_BUCKET); } } else if(block instanceof IFluidBlock && ((IFluidBlock)block).canDrain(source.getWorld(), pos)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 8578607c9..977152179 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -38,7 +38,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(true, new ItemStack(Items.dye, 1, 2)); + renderHoldingItem(true, new ItemStack(Items.DYE, 1, 2)); renderHeadBlock(InitBlocks.blockHeatCollector, 0, 5F); } }); @@ -64,8 +64,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.fishing_rod)); - renderHoldingItem(true, new ItemStack(Items.fish)); + renderHoldingItem(false, new ItemStack(Items.FISHING_ROD)); + renderHoldingItem(true, new ItemStack(Items.FISH)); } }); //Hose @@ -77,8 +77,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.reeds)); - renderHeadBlock(Blocks.torch, 0, 15F); + renderHoldingItem(false, new ItemStack(Items.REEDS)); + renderHeadBlock(Blocks.TORCH, 0, 15F); } }); //Tobi @@ -90,8 +90,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(true, new ItemStack(Items.milk_bucket)); - renderHeadBlock(Blocks.lit_redstone_lamp, 0, 35F); + renderHoldingItem(true, new ItemStack(Items.MILK_BUCKET)); + renderHeadBlock(Blocks.LIT_REDSTONE_LAMP, 0, 35F); } }); //Vazkii @@ -103,8 +103,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(true, new ItemStack(Items.dye, 1, 15)); - renderHeadBlock(Blocks.red_flower, 5, 20F); + renderHoldingItem(true, new ItemStack(Items.DYE, 1, 15)); + renderHeadBlock(Blocks.RED_FLOWER, 5, 20F); } }); //Kitty @@ -116,9 +116,9 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(true, new ItemStack(Items.fish)); - renderHoldingItem(false, new ItemStack(Items.milk_bucket)); - renderHeadBlock(Blocks.wool, 10, 15F); + renderHoldingItem(true, new ItemStack(Items.FISH)); + renderHoldingItem(false, new ItemStack(Items.MILK_BUCKET)); + renderHeadBlock(Blocks.WOOL, 10, 15F); } }); //Canitzp @@ -130,8 +130,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.wooden_sword)); - renderHeadBlock(Blocks.chest, 0, 70F); + renderHoldingItem(false, new ItemStack(Items.WOODEN_SWORD)); + renderHeadBlock(Blocks.CHEST, 0, 70F); } }); //Lari @@ -143,7 +143,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.iron_helmet)); + renderHoldingItem(false, new ItemStack(Items.IRON_HELMET)); renderHeadBlock(InitBlocks.blockBlackLotus, 0, 28F); } }); @@ -156,9 +156,9 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.milk_bucket)); - renderHoldingItem(true, new ItemStack(Items.dye, 1, 1)); - renderHeadBlock(Blocks.wool, 14, 18F); + renderHoldingItem(false, new ItemStack(Items.MILK_BUCKET)); + renderHoldingItem(true, new ItemStack(Items.DYE, 1, 1)); + renderHeadBlock(Blocks.WOOL, 14, 18F); } }); //Bande @@ -170,8 +170,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.diamond_pickaxe)); - renderHeadBlock(Blocks.wool, 4, 18F); + renderHoldingItem(false, new ItemStack(Items.DIAMOND_PICKAXE)); + renderHeadBlock(Blocks.WOOL, 4, 18F); } }); //Wolle @@ -183,8 +183,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.string)); - renderHeadBlock(Blocks.wool, 0, 18F); + renderHoldingItem(false, new ItemStack(Items.STRING)); + renderHeadBlock(Blocks.WOOL, 0, 18F); } }); //Pakto @@ -196,7 +196,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.dye, 1, 9)); + renderHoldingItem(false, new ItemStack(Items.DYE, 1, 9)); renderHeadBlock(InitBlocks.blockColoredLampOn, 6, 18F); } }); @@ -210,7 +210,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ renderHoldingItem(false, new ItemStack(InitItems.itemLeafBlowerAdvanced, 1, 9)); - renderHeadBlock(Blocks.hay_block, 0, 74F); + renderHeadBlock(Blocks.HAY_BLOCK, 0, 74F); } }); //Acid @@ -223,7 +223,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ renderHoldingItem(false, new ItemStack(InitItems.itemFoods, 1, TheFoods.PIZZA.ordinal())); - renderHeadBlock(Blocks.bookshelf, 0, 27F); + renderHeadBlock(Blocks.BOOKSHELF, 0, 27F); } }); //Jasin @@ -235,8 +235,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.written_book)); - renderHeadBlock(Blocks.web, 0, 56F); + renderHoldingItem(false, new ItemStack(Items.WRITTEN_BOOK)); + renderHeadBlock(Blocks.WEB, 0, 56F); } }); //ShadowNinjaCat @@ -248,8 +248,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.diamond_sword)); - renderHeadBlock(Blocks.diamond_block, 0, 26F); + renderHoldingItem(false, new ItemStack(Items.DIAMOND_SWORD)); + renderHeadBlock(Blocks.DIAMOND_BLOCK, 0, 26F); } }); //NihonTiger @@ -261,9 +261,9 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.stone_pickaxe)); - renderHoldingItem(true, new ItemStack(Items.poisonous_potato)); - renderHeadBlock(Blocks.gravel, 0, 47F); + renderHoldingItem(false, new ItemStack(Items.STONE_PICKAXE)); + renderHoldingItem(true, new ItemStack(Items.POISONOUS_POTATO)); + renderHeadBlock(Blocks.GRAVEL, 0, 47F); } }); //FrauBaerchen @@ -275,9 +275,9 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.cookie)); - renderHoldingItem(true, new ItemStack(Items.paper)); - renderHeadBlock(Blocks.coal_block, 0, 60F); + renderHoldingItem(false, new ItemStack(Items.COOKIE)); + renderHoldingItem(true, new ItemStack(Items.PAPER)); + renderHeadBlock(Blocks.COAL_BLOCK, 0, 60F); } }); //Diddi @@ -290,7 +290,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ renderHoldingItem(true, new ItemStack(InitItems.itemDrill)); - renderHeadBlock(Blocks.redstone_block, 0, 30F); + renderHeadBlock(Blocks.REDSTONE_BLOCK, 0, 30F); } }); //MineLoad @@ -303,7 +303,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ renderHoldingItem(false, new ItemStack(InitItems.itemMagnetRing)); - renderHeadBlock(Blocks.crafting_table, 0, 35F); + renderHeadBlock(Blocks.CRAFTING_TABLE, 0, 35F); } }); //Kilobyte (When I asked him if he liked the mod, he just looked at the code. Maybe he'll find this eventually.) @@ -316,7 +316,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ renderHoldingItem(false, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.DRILL_CORE.ordinal())); - renderHeadBlock(Blocks.redstone_ore, 0, 80F); + renderHeadBlock(Blocks.REDSTONE_ORE, 0, 80F); } }); //XDjackieXD @@ -328,7 +328,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.enchanted_book)); + renderHoldingItem(false, new ItemStack(Items.ENCHANTED_BOOK)); renderHeadBlock(InitBlocks.blockDirectionalBreaker, 0, 40F); } }); @@ -341,7 +341,7 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.glowstone_dust)); + renderHoldingItem(false, new ItemStack(Items.GLOWSTONE_DUST)); renderHeadBlock(InitBlocks.blockColoredLampOn, 4, 40F); } }); @@ -354,8 +354,8 @@ public class SmileyCloudEasterEggs{ @Override public void renderExtra(float f){ - renderHoldingItem(false, new ItemStack(Items.gunpowder)); - renderHeadBlock(Blocks.sponge, 0, 20F); + renderHoldingItem(false, new ItemStack(Items.GUNPOWDER)); + renderHeadBlock(Blocks.SPONGE, 0, 20F); } }); //Mattzimann diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java index 01c2d75f9..41bbca263 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java @@ -38,7 +38,7 @@ public class RenderSpecial{ } if(ClientProxy.pumpkinBlurPumpkinBlur){ - this.theThingToRender = new ItemStack(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)%2 == 0 ? Blocks.lit_pumpkin : Blocks.pumpkin); + this.theThingToRender = new ItemStack(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)%2 == 0 ? Blocks.LIT_PUMPKIN : Blocks.PUMPKIN); } boolean isBlock = this.theThingToRender.getItem() instanceof ItemBlock; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index 3bf0f506e..61c5c63ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -50,12 +50,12 @@ public class SpecialRenderInit{ ItemStack stack = null; //Get the Item from the String ResourceLocation resLoc = new ResourceLocation(itemName); - if(Item.itemRegistry.containsKey(resLoc)){ - stack = new ItemStack(Item.itemRegistry.getObject(resLoc), 1, meta); + if(Item.REGISTRY.containsKey(resLoc)){ + stack = new ItemStack(Item.REGISTRY.getObject(resLoc), 1, meta); } else{ - if(Block.blockRegistry.containsKey(resLoc)){ - stack = new ItemStack(Block.blockRegistry.getObject(resLoc), 1, meta); + if(Block.REGISTRY.containsKey(resLoc)){ + stack = new ItemStack(Block.REGISTRY.getObject(resLoc), 1, meta); } } @@ -72,9 +72,9 @@ public class SpecialRenderInit{ if(!specialList.isEmpty()){ for(Map.Entry entry : specialList.entrySet()){ //Does the player have one of the names from the list? - if(StringUtil.equalsToLowerCase(entry.getKey(), event.entityPlayer.getName())){ + if(StringUtil.equalsToLowerCase(entry.getKey(), event.getEntityPlayer().getName())){ //Render the special Item/Block - entry.getValue().render(event.entityPlayer, event.partialRenderTick); + entry.getValue().render(event.getEntityPlayer(), event.getPartialRenderTick()); break; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java index 839347ae2..5aa9843ce 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java @@ -72,7 +72,7 @@ public class NEIBookletRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiFurnaceDouble.png"; + return ModUtil.MOD_ID+":textures/gui/guiFurnaceDouble.png"; } @Override @@ -84,7 +84,7 @@ public class NEIBookletRecipe/* extends TemplateRecipeHandler implements INEIRec public void drawExtras(int recipe){ CachedInfoStack stack = (CachedInfoStack)this.arecipes.get(recipe); if(stack.theStack != null){ - List header = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.header").replaceAll("", EnumChatFormatting.BLUE+"").replaceAll("", EnumChatFormatting.BLACK+""), 165); + List header = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".booklet.header").replaceAll("", EnumChatFormatting.BLUE+"").replaceAll("", EnumChatFormatting.BLACK+""), 165); for(int i = 0; i < header.size(); i++){ GuiDraw.drawString((String)header.get(i), 0, 18+i*(Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT+1), 0, false); } @@ -92,7 +92,7 @@ public class NEIBookletRecipe/* extends TemplateRecipeHandler implements INEIRec int maxLines = 5; IBookletChapter chapter = stack.thePage.getChapter(); String aText = (chapter.getPages()[0] instanceof PagePicture && chapter.getPages().length > 1 ? chapter.getPages()[1] : chapter.getPages()[0]).getText(); - List text = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(aText != null ? aText : EnumChatFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.noText"), 165); + List text = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(aText != null ? aText : EnumChatFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID+".booklet.noText"), 165); for(int i = 0; i < Math.min(maxLines, text.size()); i++){ GuiDraw.drawString(text.get(i)+(i == maxLines-1 && text.size() > maxLines ? EnumChatFormatting.RESET+""+EnumChatFormatting.BLACK+"..." : ""), 0, 18+25+i*(Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT+1), 0, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java index cd92dceee..aec86f53e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java @@ -68,7 +68,7 @@ public class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements I @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiNEICoffeeMachine.png"; + return ModUtil.MOD_ID+":textures/gui/guiNEICoffeeMachine.png"; } @Override @@ -83,12 +83,12 @@ public class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements I CachedCoffee cache = (CachedCoffee)this.arecipes.get(recipe); if(cache.extraText != null){ - GuiDraw.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".coffee.special")+":", 2, 4, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); + GuiDraw.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".coffee.special")+":", 2, 4, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); GuiDraw.drawString(cache.extraText, 2, 16, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); } if(cache.maxAmp > 0){ - GuiDraw.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".coffee.maxAmount")+": "+cache.maxAmp, 2, 28, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); + GuiDraw.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".coffee.maxAmount")+": "+cache.maxAmp, 2, 28, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java index 4dff5ca4e..9c4bbed13 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java @@ -62,7 +62,7 @@ public class NEICompostRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiNEISimple.png"; + return ModUtil.MOD_ID+":textures/gui/guiNEISimple.png"; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java index 6b4569946..86feeffe4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java @@ -60,7 +60,7 @@ public class NEICrusherRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiGrinder.png"; + return ModUtil.MOD_ID+":textures/gui/guiGrinder.png"; } @Override @@ -124,7 +124,7 @@ public class NEICrusherRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiGrinderDouble.png"; + return ModUtil.MOD_ID+":textures/gui/guiGrinderDouble.png"; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java index df2d1e05a..40a3ff087 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java @@ -69,7 +69,7 @@ public class NEIFurnaceDoubleRecipe /*extends TemplateRecipeHandler implements I @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiFurnaceDouble.png"; + return ModUtil.MOD_ID+":textures/gui/guiFurnaceDouble.png"; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java index 5091b2962..a7b1c3ad9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java @@ -72,7 +72,7 @@ public class NEIHairyBallRecipe/* extends TemplateRecipeHandler implements INEIR @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiNEISimple.png"; + return ModUtil.MOD_ID+":textures/gui/guiNEISimple.png"; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java index 5618b8e40..d56590414 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java @@ -104,7 +104,7 @@ public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements I @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiNEIAtomicReconstructor.png"; + return ModUtil.MOD_ID+":textures/gui/guiNEIAtomicReconstructor.png"; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java index e18599c9f..86f29539d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java @@ -31,7 +31,7 @@ public class NEIScreenEvents{ public void drawButton(Minecraft minecraft, int x, int y){ super.drawButton(minecraft, x, y); if(this.visible && this.hovered){ - String text = StringUtil.localize("booklet."+ModUtil.MOD_ID_LOWER+".clickToSeeRecipe"); + String text = StringUtil.localize("booklet."+ModUtil.MOD_ID+".clickToSeeRecipe"); Minecraft.getMinecraft().fontRendererObj.drawString(text, this.xPosition-Minecraft.getMinecraft().fontRendererObj.getStringWidth(text)-1, this.yPosition+this.height/2-Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT/2, StringUtil.DECIMAL_COLOR_WHITE, true); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java index 4c21fddd2..0c0ec8e33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java @@ -72,7 +72,7 @@ public class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements I @Override public String getGuiTexture(){ - return ModUtil.MOD_ID_LOWER+":textures/gui/guiNEISimple.png"; + return ModUtil.MOD_ID+":textures/gui/guiNEISimple.png"; } @Override @@ -84,7 +84,7 @@ public class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements I public void drawExtras(int rec){ CachedTreasure recipe = (CachedTreasure)this.arecipes.get(rec); if(recipe.result != null){ - GuiDraw.drawString(recipe.minAmount+"-"+recipe.maxAmount+" "+StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".treasureChest.info")+" "+recipe.chance+"%", 55, 45, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); + GuiDraw.drawString(recipe.minAmount+"-"+recipe.maxAmount+" "+StringUtil.localize("container.nei."+ModUtil.MOD_ID+".treasureChest.info")+" "+recipe.chance+"%", 55, 45, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 143233276..0f8e48585 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -23,7 +23,7 @@ public class PacketHandler{ public static SimpleNetworkWrapper theNetwork; public static void init(){ - theNetwork = NetworkRegistry.INSTANCE.newSimpleChannel(ModUtil.MOD_ID_LOWER); + theNetwork = NetworkRegistry.INSTANCE.newSimpleChannel(ModUtil.MOD_ID); theNetwork.registerMessage(PacketGuiButton.Handler.class, PacketGuiButton.class, 0, Side.SERVER); theNetwork.registerMessage(PacketGuiNumber.Handler.class, PacketGuiNumber.class, 1, Side.SERVER); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java index 6d66e3be0..dcf06e9ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java @@ -30,7 +30,7 @@ public class InitOreDict{ ModUtil.LOGGER.info("Initializing OreDictionary Entries..."); //Vanilla Ores - addOre(Items.coal, "coal"); + addOre(Items.COAL, "coal"); //Ores for Pulverizers etc. addOre(InitItems.itemDust, TheDusts.IRON.ordinal(), "dustIron"); @@ -50,7 +50,7 @@ public class InitOreDict{ addOre(InitItems.itemRiceSeed, "seedRice"); addOre(InitItems.itemFoods, TheFoods.RICE.ordinal(), "cropRice"); addOre(InitItems.itemFlaxSeed, "seedFlax"); - addOre(Items.string, "cropFlax"); + addOre(Items.STRING, "cropFlax"); addOre(InitItems.itemCoffeeSeed, "seedCoffee"); addOre(InitItems.itemCoffeeBean, "cropCoffee"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index c6f2c39a6..a026d55ce 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -143,7 +143,7 @@ public class ClientProxy implements IProxy{ ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud()); //TODO Fix villager, doesn't work in this Version of Forge - //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/entity/villager/jamVillager.png")); + //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png")); for(Item item : colorProdividingItemsForRegistering){ if(item instanceof IColorProvidingItem){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java index 3f43cfaa0..0adf325fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java @@ -19,29 +19,29 @@ import net.minecraft.item.ItemStack; public class HairyBallHandler{ public static void init(){ - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.string), 100); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.diamond), 2); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.name_tag), 1); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.fish), 80); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.fish, 1, 1), 60); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.fish, 1, 2), 10); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.fish, 1, 3), 40); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.feather), 60); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.leather), 30); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.dye), 70); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.clay_ball), 40); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.stick), 40); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.iron_ingot), 10); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.gold_ingot), 6); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.beef), 30); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.ender_pearl), 2); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.planks), 20); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.waterlily), 10); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.experience_bottle), 3); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.gravel), 40); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.sand), 50); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.vine), 30); - ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.web), 4); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.STRING), 100); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.DIAMOND), 2); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.NAME_TAG), 1); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.FISH), 80); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.FISH, 1, 1), 60); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.FISH, 1, 2), 10); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.FISH, 1, 3), 40); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.FEATHER), 60); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.LEATHER), 30); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.DYE), 70); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.CLAY_BALL), 40); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.STICK), 40); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.IRON_INGOT), 10); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.GOLD_INGOT), 6); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.BEEF), 30); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.ENDER_PEARL), 2); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.PLANKS), 20); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.WATERLILY), 10); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.EXPERIENCE_BOTTLE), 3); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.GRAVEL), 40); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.SAND), 50); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.VINE), 30); + ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Blocks.WEB), 4); ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(InitItems.itemSolidifiedExperience), 20); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java index aa365c338..76b96dc15 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java @@ -19,38 +19,38 @@ import net.minecraft.item.ItemStack; public class TreasureChestHandler{ public static void init(){ - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.diamond), 5, 1, 2); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.iron_ingot), 30, 1, 5); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.gold_nugget), 60, 1, 8); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.gold_ingot), 35, 1, 3); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.ender_pearl), 10, 1, 2); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.emerald), 3, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.experience_bottle), 5, 3, 6); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.DIAMOND), 5, 1, 2); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.IRON_INGOT), 30, 1, 5); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.GOLD_NUGGET), 60, 1, 8); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.GOLD_INGOT), 35, 1, 3); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.ENDER_PEARL), 10, 1, 2); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.EMERALD), 3, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.EXPERIENCE_BOTTLE), 5, 3, 6); ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(InitItems.itemSolidifiedExperience), 15, 3, 6); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_11), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_13), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_blocks), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_cat), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_chirp), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_far), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_mall), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_mellohi), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_stal), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_strad), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_ward), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.record_wait), 1, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.saddle), 5, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.name_tag), 20, 1, 2); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_11), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_13), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_BLOCKS), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_CAT), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_CHIRP), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_FAR), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_MALL), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_MELLOHI), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_STAL), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_STRAD), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_WARD), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.RECORD_WAIT), 1, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.SADDLE), 5, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.NAME_TAG), 20, 1, 2); ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(InitItems.itemJams, 1, TheJams.CU_BA_RA.ordinal()), 10, 1, 2); ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(InitItems.itemJams, 1, TheJams.GRA_KI_BA.ordinal()), 10, 1, 2); ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(InitItems.itemJams, 1, TheJams.PL_AP_LE.ordinal()), 10, 1, 2); ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(InitItems.itemJams, 1, TheJams.CH_AP_CI.ordinal()), 10, 1, 2); ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(InitItems.itemJams, 1, TheJams.HO_ME_KI.ordinal()), 10, 1, 2); ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(InitItems.itemJams, 1, TheJams.PI_CO.ordinal()), 10, 1, 2); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.fish), 80, 1, 3); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.fish, 1, 1), 60, 1, 3); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.fish, 1, 2), 10, 1, 1); - ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.fish, 1, 3), 40, 1, 2); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.FISH), 80, 1, 3); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.FISH, 1, 1), 60, 1, 3); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.FISH, 1, 2), 10, 1, 1); + ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.FISH, 1, 3), 40, 1, 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 9eb93775d..c278fa0b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -121,7 +121,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ if(!ConfigValues.lessSound){ //TODO Fix sound - //this.worldObj.playSoundEffect(this.getX(), this.getY(), this.getZ(), ModUtil.MOD_ID_LOWER+":reconstructor", 0.35F, 1.0F); + //this.worldObj.playSoundEffect(this.getX(), this.getY(), this.getZ(), ModUtil.MOD_ID+":reconstructor", 0.35F, 1.0F); } PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 90f22ba4a..33c10e249 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -34,47 +34,47 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public static void init(){ ModUtil.LOGGER.info("Registering TileEntities..."); - GameRegistry.registerTileEntity(TileEntityCompost.class, ModUtil.MOD_ID_LOWER+":tileEntityCompost"); - GameRegistry.registerTileEntity(TileEntityFeeder.class, ModUtil.MOD_ID_LOWER+":tileEntityFeeder"); - GameRegistry.registerTileEntity(TileEntityGiantChest.class, ModUtil.MOD_ID_LOWER+":tileEntityGiantChest"); - GameRegistry.registerTileEntity(TileEntityGrinder.class, ModUtil.MOD_ID_LOWER+":tileEntityGrinder"); - GameRegistry.registerTileEntity(TileEntityFurnaceDouble.class, ModUtil.MOD_ID_LOWER+":tileEntityFurnaceDouble"); - GameRegistry.registerTileEntity(TileEntityInputter.class, ModUtil.MOD_ID_LOWER+":tileEntityInputter"); - GameRegistry.registerTileEntity(TileEntityFishingNet.class, ModUtil.MOD_ID_LOWER+":tileEntityFishingNet"); - GameRegistry.registerTileEntity(TileEntityFurnaceSolar.class, ModUtil.MOD_ID_LOWER+":tileEntityFurnaceSolar"); - GameRegistry.registerTileEntity(TileEntityHeatCollector.class, ModUtil.MOD_ID_LOWER+":tileEntityHeatCollector"); - GameRegistry.registerTileEntity(TileEntityItemRepairer.class, ModUtil.MOD_ID_LOWER+":tileEntityRepairer"); - GameRegistry.registerTileEntity(TileEntityGreenhouseGlass.class, ModUtil.MOD_ID_LOWER+":tileEntityGreenhouseGlass"); - GameRegistry.registerTileEntity(TileEntityBreaker.class, ModUtil.MOD_ID_LOWER+":tileEntityBreaker"); - GameRegistry.registerTileEntity(TileEntityDropper.class, ModUtil.MOD_ID_LOWER+":tileEntityDropper"); - GameRegistry.registerTileEntity(TileEntityInputter.TileEntityInputterAdvanced.class, ModUtil.MOD_ID_LOWER+":tileEntityInputterAdvanced"); - GameRegistry.registerTileEntity(TileEntityBreaker.TileEntityPlacer.class, ModUtil.MOD_ID_LOWER+":tileEntityPlacer"); - GameRegistry.registerTileEntity(TileEntityGrinder.TileEntityGrinderDouble.class, ModUtil.MOD_ID_LOWER+":tileEntityGrinderDouble"); - GameRegistry.registerTileEntity(TileEntityCanolaPress.class, ModUtil.MOD_ID_LOWER+":tileEntityCanolaPress"); - GameRegistry.registerTileEntity(TileEntityFermentingBarrel.class, ModUtil.MOD_ID_LOWER+":tileEntityFermentingBarrel"); - GameRegistry.registerTileEntity(TileEntityOilGenerator.class, ModUtil.MOD_ID_LOWER+":tileEntityOilGenerator"); - GameRegistry.registerTileEntity(TileEntityCoalGenerator.class, ModUtil.MOD_ID_LOWER+":tileEntityCoalGenerator"); - GameRegistry.registerTileEntity(TileEntityPhantomItemface.class, ModUtil.MOD_ID_LOWER+":tileEntityPhantomItemface"); - GameRegistry.registerTileEntity(TileEntityPhantomLiquiface.class, ModUtil.MOD_ID_LOWER+":tileEntityPhantomLiquiface"); - GameRegistry.registerTileEntity(TileEntityPhantomEnergyface.class, ModUtil.MOD_ID_LOWER+":tileEntityPhantomEnergyface"); - GameRegistry.registerTileEntity(TileEntityPhantomPlacer.class, ModUtil.MOD_ID_LOWER+":tileEntityPhantomPlacer"); - GameRegistry.registerTileEntity(TileEntityPhantomPlacer.TileEntityPhantomBreaker.class, ModUtil.MOD_ID_LOWER+":tileEntityPhantomBreaker"); - GameRegistry.registerTileEntity(TileEntityFluidCollector.class, ModUtil.MOD_ID_LOWER+":tileEntityFluidCollector"); - GameRegistry.registerTileEntity(TileEntityFluidCollector.TileEntityFluidPlacer.class, ModUtil.MOD_ID_LOWER+":tileEntityFluidPlacer"); - GameRegistry.registerTileEntity(TileEntityLavaFactoryController.class, ModUtil.MOD_ID_LOWER+":tileEntityLavaFactoryController"); - GameRegistry.registerTileEntity(TileEntityCoffeeMachine.class, ModUtil.MOD_ID_LOWER+":tileEntityCoffeeMachine"); - GameRegistry.registerTileEntity(TileEntityPhantomBooster.class, ModUtil.MOD_ID_LOWER+":tileEntityPhantomBooster"); - GameRegistry.registerTileEntity(TileEntityEnergizer.class, ModUtil.MOD_ID_LOWER+":tileEntityEnergizer"); - GameRegistry.registerTileEntity(TileEntityEnervator.class, ModUtil.MOD_ID_LOWER+":tileEntityEnervator"); - GameRegistry.registerTileEntity(TileEntityXPSolidifier.class, ModUtil.MOD_ID_LOWER+":tileEntityXPSolidifier"); - GameRegistry.registerTileEntity(TileEntitySmileyCloud.class, ModUtil.MOD_ID_LOWER+":tileEntityCloud"); - GameRegistry.registerTileEntity(TileEntityLeafGenerator.class, ModUtil.MOD_ID_LOWER+":tileEntityLeafGenerator"); - GameRegistry.registerTileEntity(TileEntityDirectionalBreaker.class, ModUtil.MOD_ID_LOWER+":tileEntityDirectionalBreaker"); - GameRegistry.registerTileEntity(TileEntityRangedCollector.class, ModUtil.MOD_ID_LOWER+":tileEntityRangedCollector"); - GameRegistry.registerTileEntity(TileEntityLaserRelay.class, ModUtil.MOD_ID_LOWER+":tileEntityLaserRelay"); - GameRegistry.registerTileEntity(TileEntityAtomicReconstructor.class, ModUtil.MOD_ID_LOWER+":tileEntityAtomicReconstructor"); - GameRegistry.registerTileEntity(TileEntityMiner.class, ModUtil.MOD_ID_LOWER+":tileEntityMiner"); - GameRegistry.registerTileEntity(TileEntityFireworkBox.class, ModUtil.MOD_ID_LOWER+":tileEntityFireworkBox"); + GameRegistry.registerTileEntity(TileEntityCompost.class, ModUtil.MOD_ID+":tileEntityCompost"); + GameRegistry.registerTileEntity(TileEntityFeeder.class, ModUtil.MOD_ID+":tileEntityFeeder"); + GameRegistry.registerTileEntity(TileEntityGiantChest.class, ModUtil.MOD_ID+":tileEntityGiantChest"); + GameRegistry.registerTileEntity(TileEntityGrinder.class, ModUtil.MOD_ID+":tileEntityGrinder"); + GameRegistry.registerTileEntity(TileEntityFurnaceDouble.class, ModUtil.MOD_ID+":tileEntityFurnaceDouble"); + GameRegistry.registerTileEntity(TileEntityInputter.class, ModUtil.MOD_ID+":tileEntityInputter"); + GameRegistry.registerTileEntity(TileEntityFishingNet.class, ModUtil.MOD_ID+":tileEntityFishingNet"); + GameRegistry.registerTileEntity(TileEntityFurnaceSolar.class, ModUtil.MOD_ID+":tileEntityFurnaceSolar"); + GameRegistry.registerTileEntity(TileEntityHeatCollector.class, ModUtil.MOD_ID+":tileEntityHeatCollector"); + GameRegistry.registerTileEntity(TileEntityItemRepairer.class, ModUtil.MOD_ID+":tileEntityRepairer"); + GameRegistry.registerTileEntity(TileEntityGreenhouseGlass.class, ModUtil.MOD_ID+":tileEntityGreenhouseGlass"); + GameRegistry.registerTileEntity(TileEntityBreaker.class, ModUtil.MOD_ID+":tileEntityBreaker"); + GameRegistry.registerTileEntity(TileEntityDropper.class, ModUtil.MOD_ID+":tileEntityDropper"); + GameRegistry.registerTileEntity(TileEntityInputter.TileEntityInputterAdvanced.class, ModUtil.MOD_ID+":tileEntityInputterAdvanced"); + GameRegistry.registerTileEntity(TileEntityBreaker.TileEntityPlacer.class, ModUtil.MOD_ID+":tileEntityPlacer"); + GameRegistry.registerTileEntity(TileEntityGrinder.TileEntityGrinderDouble.class, ModUtil.MOD_ID+":tileEntityGrinderDouble"); + GameRegistry.registerTileEntity(TileEntityCanolaPress.class, ModUtil.MOD_ID+":tileEntityCanolaPress"); + GameRegistry.registerTileEntity(TileEntityFermentingBarrel.class, ModUtil.MOD_ID+":tileEntityFermentingBarrel"); + GameRegistry.registerTileEntity(TileEntityOilGenerator.class, ModUtil.MOD_ID+":tileEntityOilGenerator"); + GameRegistry.registerTileEntity(TileEntityCoalGenerator.class, ModUtil.MOD_ID+":tileEntityCoalGenerator"); + GameRegistry.registerTileEntity(TileEntityPhantomItemface.class, ModUtil.MOD_ID+":tileEntityPhantomItemface"); + GameRegistry.registerTileEntity(TileEntityPhantomLiquiface.class, ModUtil.MOD_ID+":tileEntityPhantomLiquiface"); + GameRegistry.registerTileEntity(TileEntityPhantomEnergyface.class, ModUtil.MOD_ID+":tileEntityPhantomEnergyface"); + GameRegistry.registerTileEntity(TileEntityPhantomPlacer.class, ModUtil.MOD_ID+":tileEntityPhantomPlacer"); + GameRegistry.registerTileEntity(TileEntityPhantomPlacer.TileEntityPhantomBreaker.class, ModUtil.MOD_ID+":tileEntityPhantomBreaker"); + GameRegistry.registerTileEntity(TileEntityFluidCollector.class, ModUtil.MOD_ID+":tileEntityFluidCollector"); + GameRegistry.registerTileEntity(TileEntityFluidCollector.TileEntityFluidPlacer.class, ModUtil.MOD_ID+":tileEntityFluidPlacer"); + GameRegistry.registerTileEntity(TileEntityLavaFactoryController.class, ModUtil.MOD_ID+":tileEntityLavaFactoryController"); + GameRegistry.registerTileEntity(TileEntityCoffeeMachine.class, ModUtil.MOD_ID+":tileEntityCoffeeMachine"); + GameRegistry.registerTileEntity(TileEntityPhantomBooster.class, ModUtil.MOD_ID+":tileEntityPhantomBooster"); + GameRegistry.registerTileEntity(TileEntityEnergizer.class, ModUtil.MOD_ID+":tileEntityEnergizer"); + GameRegistry.registerTileEntity(TileEntityEnervator.class, ModUtil.MOD_ID+":tileEntityEnervator"); + GameRegistry.registerTileEntity(TileEntityXPSolidifier.class, ModUtil.MOD_ID+":tileEntityXPSolidifier"); + GameRegistry.registerTileEntity(TileEntitySmileyCloud.class, ModUtil.MOD_ID+":tileEntityCloud"); + GameRegistry.registerTileEntity(TileEntityLeafGenerator.class, ModUtil.MOD_ID+":tileEntityLeafGenerator"); + GameRegistry.registerTileEntity(TileEntityDirectionalBreaker.class, ModUtil.MOD_ID+":tileEntityDirectionalBreaker"); + GameRegistry.registerTileEntity(TileEntityRangedCollector.class, ModUtil.MOD_ID+":tileEntityRangedCollector"); + GameRegistry.registerTileEntity(TileEntityLaserRelay.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); + GameRegistry.registerTileEntity(TileEntityAtomicReconstructor.class, ModUtil.MOD_ID+":tileEntityAtomicReconstructor"); + GameRegistry.registerTileEntity(TileEntityMiner.class, ModUtil.MOD_ID+":tileEntityMiner"); + GameRegistry.registerTileEntity(TileEntityFireworkBox.class, ModUtil.MOD_ID+":tileEntityFireworkBox"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index f56e4361e..03ead9842 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -119,7 +119,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()) || (i == 1 && stack.getItem() == Items.bucket); + return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()) || (i == 1 && stack.getItem() == Items.BUCKET); } public boolean isCanola(int slot){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index a751666b0..90549b524 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -136,7 +136,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements if(this.storage.getEnergyStored() >= ENERGY_USED){ if(this.brewTime%30 == 0 && !ConfigValues.lessSound){ //TODO Fix sound - //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID_LOWER+":coffeeMachine", 0.35F, 1.0F); + //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID+":coffeeMachine", 0.35F, 1.0F); } this.brewTime++; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index 4bfb1694f..e538bd60e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -95,7 +95,7 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i == 0 && FluidContainerRegistry.containsFluid(stack, new FluidStack(InitFluids.fluidCanolaOil, FluidContainerRegistry.BUCKET_VOLUME))) || (i == 2 && stack.getItem() == Items.bucket); + return (i == 0 && FluidContainerRegistry.containsFluid(stack, new FluidStack(InitFluids.fluidCanolaOil, FluidContainerRegistry.BUCKET_VOLUME))) || (i == 2 && stack.getItem() == Items.BUCKET); } @SideOnly(Side.CLIENT) @@ -120,7 +120,7 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen @Override public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ - return (slot == 1 && stack.getItem() == Items.bucket) || (slot == 3 && FluidContainerRegistry.containsFluid(stack, new FluidStack(InitFluids.fluidOil, FluidContainerRegistry.BUCKET_VOLUME))); + return (slot == 1 && stack.getItem() == Items.BUCKET) || (slot == 3 && FluidContainerRegistry.containsFluid(stack, new FluidStack(InitFluids.fluidOil, FluidContainerRegistry.BUCKET_VOLUME))); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index ad28167ae..b25f87e19 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -96,7 +96,7 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece NBTTagCompound compound = new NBTTagCompound(); compound.setTag("Fireworks", compound1); - ItemStack firework = new ItemStack(Items.fireworks); + ItemStack firework = new ItemStack(Items.FIREWORKS); firework.setTagCompound(compound); return firework; @@ -116,7 +116,7 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece int[] colors = new int[MathHelper.getRandomIntegerInRange(Util.RANDOM, 1, 6)]; for(int i = 0; i < colors.length; i++){ - colors[i] = ItemDye.dyeColors[Util.RANDOM.nextInt(ItemDye.dyeColors.length)]; + colors[i] = ItemDye.DYE_COLORS[Util.RANDOM.nextInt(ItemDye.DYE_COLORS.length)]; } compound.setIntArray("Colors", colors); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index 96880d93d..a3d2d1c42 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -50,7 +50,7 @@ public class TileEntityFishingNet extends TileEntityBase{ super.updateEntity(); if(!worldObj.isRemote){ if(!this.isRedstonePowered){ - if(PosUtil.getMaterial(PosUtil.offset(this.pos, 0, -1, 0), this.worldObj) == Material.water){ + if(PosUtil.getMaterial(PosUtil.offset(this.pos, 0, -1, 0), this.worldObj) == Material.WATER){ if(this.timeUntilNextDrop > 0){ this.timeUntilNextDrop--; if(timeUntilNextDrop <= 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index f43a1fff0..4bda628ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -68,13 +68,13 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); } } - else if(blockToBreak == Blocks.lava || blockToBreak == Blocks.flowing_lava){ + else if(blockToBreak == Blocks.LAVA || blockToBreak == Blocks.FLOWING_LAVA){ if(this.tank.fill(new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ this.tank.fill(new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), true); WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); } } - else if(blockToBreak == Blocks.water || blockToBreak == Blocks.flowing_water){ + else if(blockToBreak == Blocks.WATER || blockToBreak == Blocks.FLOWING_WATER){ if(this.tank.fill(new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ this.tank.fill(new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), true); WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 1ed649db8..dad289c87 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -165,7 +165,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg if(shouldPlaySound && !ConfigValues.lessSound){ //TODO Fix sound - //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID_LOWER+":crusher", 0.25F, 1.0F); + //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID+":crusher", 0.25F, 1.0F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 892bad291..c6820ece9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -52,11 +52,9 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr if(ENERGY_PRODUCE <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored()){ for(int i = 1; i <= 5; i++){ BlockPos coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionBySidesInOrder(i), this.pos, 0); - if(coords != null){ - Block block = PosUtil.getBlock(coords, worldObj); - if(block != null && block.getMaterial(worldObj.getBlockState(coords)) == Material.lava && PosUtil.getMetadata(coords, worldObj) == 0){ - blocksAround.add(i); - } + Block block = PosUtil.getBlock(coords, worldObj); + if(block != null && block.getMaterial(worldObj.getBlockState(coords)) == Material.LAVA && PosUtil.getMetadata(coords, worldObj) == 0){ + blocksAround.add(i); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index eaeb8c2b4..a82c10c0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -28,7 +28,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements public TileEntityInventoryBase(int slots, String name){ this.initializeSlots(slots); - this.name = "container."+ModUtil.MOD_ID_LOWER+"."+name; + this.name = "container."+ModUtil.MOD_ID+"."+name; } public void initializeSlots(int itemAmount){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index f86e972ba..0c2c733c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -56,7 +56,7 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I this.currentWorkTime++; if(this.currentWorkTime >= 200){ this.currentWorkTime = 0; - PosUtil.setBlock(PosUtil.offset(this.pos, 0, 1, 0), worldObj, Blocks.lava, 0, 2); + PosUtil.setBlock(PosUtil.offset(this.pos, 0, 1, 0), worldObj, Blocks.LAVA, 0, 2); this.storage.extractEnergy(ENERGY_USE, false); } } @@ -81,7 +81,7 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I if(WorldUtil.hasBlocksInPlacesGiven(positions, InitBlocks.blockMisc, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal(), worldObj)){ BlockPos pos = PosUtil.offset(thisPos, 0, 1, 0); - if(PosUtil.getBlock(pos, worldObj) == Blocks.lava || PosUtil.getBlock(pos, worldObj) == Blocks.flowing_lava){ + if(PosUtil.getBlock(pos, worldObj) == Blocks.LAVA || PosUtil.getBlock(pos, worldObj) == Blocks.FLOWING_LAVA){ return HAS_LAVA; } if(PosUtil.getBlock(pos, worldObj) == null || worldObj.isAirBlock(pos)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 8e6d93d7b..f5e230494 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -140,7 +140,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } } - String reg = block.getRegistryName(); + String reg = block.getRegistryName().toString(); if(reg != null && !reg.isEmpty()){ for(String string : ConfigValues.minerExtraWhitelist){ if(reg.equals(string)){ @@ -162,7 +162,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } private boolean isBlacklisted(Block block){ - String reg = block.getRegistryName(); + String reg = block.getRegistryName().toString(); if(reg != null && !reg.isEmpty()){ for(String string : ConfigValues.minerBlacklist){ if(reg.equals(string)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java index f55689435..a7b7c691e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java @@ -31,13 +31,13 @@ public class UpdateCheckerClientNotificationEvent{ if(ticksElapsedBeforeInfo >= 800){ EntityPlayer player = Minecraft.getMinecraft().thePlayer; if(UpdateChecker.checkFailed){ - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.failed"))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.failed"))); notified = true; } else if(UpdateChecker.needsUpdateNotify){ - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID_LOWER+".update.generic"))); - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString))); - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID_LOWER+".update.buttons", UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.generic"))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.buttons", UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK))); notified = true; } ticksElapsedBeforeInfo = 0; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index a9633bb38..5bdc149d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -31,11 +31,11 @@ public class AssetUtil{ public static final ResourceLocation GUI_INVENTORY_LOCATION = getGuiLocation("guiInventory"); public static ResourceLocation getGuiLocation(String file){ - return new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/gui/"+file+".png"); + return new ResourceLocation(ModUtil.MOD_ID, "textures/gui/"+file+".png"); } public static ResourceLocation getBookletGuiLocation(String file){ - return new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/gui/booklet/"+file+".png"); + return new ResourceLocation(ModUtil.MOD_ID, "textures/gui/booklet/"+file+".png"); } public static void displayNameString(FontRenderer font, int xSize, int yPositionOfMachineText, String machineName){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java index 6a3a9e63e..f07454a4a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java @@ -23,14 +23,14 @@ public class CompatUtil{ FMLInterModComms.sendMessage("MineFactoryReloaded", "registerHarvestable_Crop", new ItemStack(block, 1, 7)); NBTTagCompound compound = new NBTTagCompound(); - compound.setString("plant", block.getRegistryName()); + compound.setString("plant", block.getRegistryName().toString()); FMLInterModComms.sendMessage("MineFactoryReloaded", "registerFertilizable_Crop", compound); } public static void registerMFRSeed(Item item){ NBTTagCompound compound = new NBTTagCompound(); - compound.setString("seed", item.getRegistryName()); - compound.setString("crop", ((ItemSeed)item).plant.getRegistryName()); + compound.setString("seed", item.getRegistryName().toString()); + compound.setString("crop", ((ItemSeed)item).plant.getRegistryName().toString()); FMLInterModComms.sendMessage("MineFactoryReloaded", "registerPlantable_Crop", compound); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index 8c1d9e551..43e17e607 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -32,7 +32,7 @@ public class FluidStateMapper extends StateMapperBase implements ItemMeshDefinit public FluidStateMapper(Fluid fluid){ this.fluid = fluid; - this.location = new ModelResourceLocation(new ResourceLocation(ModUtil.MOD_ID_LOWER, "fluids"), fluid.getName()); + this.location = new ModelResourceLocation(new ResourceLocation(ModUtil.MOD_ID, "fluids"), fluid.getName()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index c59e174af..bbee0a09a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -28,26 +28,29 @@ public class ItemUtil{ public static Item getItemFromName(String name){ ResourceLocation resLoc = new ResourceLocation(name); - if(Item.itemRegistry.containsKey(resLoc)){ - return Item.itemRegistry.getObject(resLoc); + if(Item.REGISTRY.containsKey(resLoc)){ + return Item.REGISTRY.getObject(resLoc); } return null; } - public static void registerBlock(Block block, Class itemBlock, String name, boolean addTab){ - block.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+name); + public static void registerBlock(Block block, ItemBlockBase itemBlock, String name, boolean addTab){ + block.setUnlocalizedName(ModUtil.MOD_ID+"."+name); block.setRegistryName(ModUtil.MOD_ID, name); - GameRegistry.registerBlock(block, itemBlock); + GameRegistry.register(block); + + itemBlock.setRegistryName(block.getRegistryName()); + GameRegistry.register(itemBlock); block.setCreativeTab(addTab ? CreativeTab.instance : null); } public static void registerItem(Item item, String name, boolean addTab){ - item.setUnlocalizedName(ModUtil.MOD_ID_LOWER+"."+name); + item.setUnlocalizedName(ModUtil.MOD_ID+"."+name); item.setRegistryName(ModUtil.MOD_ID, name); - GameRegistry.registerItem(item); + GameRegistry.register(item); item.setCreativeTab(addTab ? CreativeTab.instance : null); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java index 0f052f5e3..05960ae61 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java @@ -14,15 +14,12 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.Locale; - public class ModUtil{ public static final String VERSION = "@VERSION@"; //build.gradle public static final String MOD_ID = ActuallyAdditionsAPI.MOD_ID; public static final String NAME = "Actually Additions"; - public static final String MOD_ID_LOWER = MOD_ID.toLowerCase(Locale.ROOT); public static final Logger LOGGER = LogManager.getLogger(MOD_ID); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index fd6196f4d..3594e4b48 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -23,7 +23,7 @@ public class StringUtil{ public static final int DECIMAL_COLOR_WHITE = 16777215; public static final int DECIMAL_COLOR_GRAY_TEXT = 4210752; - public static final String BUGGED_ITEM_NAME = ModUtil.MOD_ID_LOWER+".lolWutHowUDoDis"; + public static final String BUGGED_ITEM_NAME = ModUtil.MOD_ID+".lolWutHowUDoDis"; /** * Localizes a given String via StatCollector diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index c38866eaf..3c99a2d16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -27,14 +27,14 @@ public class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; - public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); - public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); - public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); - public static final EnumRarity CRYSTAL_BLACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); - public static final EnumRarity CRYSTAL_GREEN_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); - public static final EnumRarity CRYSTAL_WHITE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); + public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); + public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); + public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); + public static final EnumRarity CRYSTAL_BLACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); + public static final EnumRarity CRYSTAL_GREEN_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); + public static final EnumRarity CRYSTAL_WHITE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); - public static final EnumRarity FALLBACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID_LOWER+".fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); + public static final EnumRarity FALLBACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+".fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); public static void registerEvent(Object o){ MinecraftForge.EVENT_BUS.register(o); @@ -45,7 +45,7 @@ public class Util{ } public static void registerDispenserHandler(Item item, BehaviorDefaultDispenseItem handler){ - BlockDispenser.dispenseBehaviorRegistry.putObject(item, handler); + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(item, handler); } public static int arrayContains(Object[] array, Object obj){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index aaeee1086..09b835258 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -50,10 +50,7 @@ public class WorldUtil{ } public static void breakBlockAtSide(EnumFacing side, World world, BlockPos pos, int offset){ - BlockPos c = getCoordsFromSide(side, pos, offset); - if(c != null){ - world.setBlockToAir(c); - } + world.setBlockToAir(getCoordsFromSide(side, pos, offset)); } public static BlockPos getCoordsFromSide(EnumFacing side, BlockPos pos, int offset){ @@ -132,8 +129,8 @@ public class WorldUtil{ } //Redstone - else if(replaceable && stack.getItem() == Items.redstone){ - PosUtil.setBlock(offsetPos, world, Blocks.redstone_wire, 0, 2); + else if(replaceable && stack.getItem() == Items.REDSTONE){ + PosUtil.setBlock(offsetPos, world, Blocks.REDSTONE_WIRE, 0, 2); stack.stackSize--; } @@ -391,9 +388,9 @@ public class WorldUtil{ block.harvestBlock(world, player, pos, state, tile, stack); } //Only drop XP when no Silk Touch is applied - if(EnchantmentHelper.getEnchantmentLevel(Enchantments.silkTouch, stack) <= 0){ + if(EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) <= 0){ //Drop XP depending on Fortune Level - block.dropXpOnBlockBreak(world, pos, block.getExpDrop(state, world, pos, EnchantmentHelper.getEnchantmentLevel(Enchantments.fortune, stack))); + block.dropXpOnBlockBreak(world, pos, block.getExpDrop(state, world, pos, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack))); } } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index d999bd5b1..d8eb4d172 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -565,7 +565,7 @@ booklet.actuallyadditions.indexEntry.itemsRF.name=Items that use RF #Booklet Info booklet.actuallyadditions.recipeDisabled=The crafting recipe for this item is disabled in the Config File! If you're on a server, ask the server author to enable it in the config. If you're on a client, press the 'Open Config'-Button on the top right and enable the recipe! -booklet.actuallyadditions.unavailable=Parts of this feature are currently disabled or incomplete due to the not fully complete 1.8.9 Port. You may experience something that's missing or doesn't fully work. Please use this item with caution! +booklet.actuallyadditions.unavailable=Parts of this feature are currently disabled or incomplete due to the not fully complete 1.8.9 and 1.9 Port. You may experience something that's missing or doesn't fully work. Please use this item with caution! booklet.actuallyadditions.clickToSeeRecipe=Click to see more Information booklet.actuallyadditions.amountOfWords=%s words in total booklet.actuallyadditions.amountOfChars=%s characters in total From 3cd7512ed6df4391e13a5521602fe9b28d8a2020 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 20 Apr 2016 21:54:59 +0200 Subject: [PATCH 042/322] r27! --- build.gradle | 4 ++-- .../de/ellpeck/actuallyadditions/mod/event/HudEvent.java | 1 + update/changelog.md | 7 +++++++ update/updateVersions.properties | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 57680b5c2..882e7317c 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.8.9-r26" +version = "1.9-r27" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" @@ -42,7 +42,7 @@ dependencies { //compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" - //deobfCompile "mezz.jei:jei_1.8.9:2.28.6.173" + deobfCompile "mezz.jei:jei_1.9:3.2.11.186" } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index 508a709f1..4173ddbb8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -43,6 +43,7 @@ public class HudEvent{ profiler.startSection(ModUtil.MOD_ID+"Hud"); + //TODO Fix this not working because stack is always null for some reason if(stack != null){ if(stack.getItem() instanceof IHudDisplay){ profiler.startSection("ItemHudDisplay"); diff --git a/update/changelog.md b/update/changelog.md index 0d20ad61b..57cec9ea0 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,10 @@ +# 1.9-r27 +### Yes, really. This update pushes the mod's version to 1.9, however it probably is very unstable. There is a few notable bugs and things missing, but I wanted to push this version because a lot of people wanted it. +## If you encounter any bugs, please post them on the Issue Tracker here: https://github.com/Ellpeck/ActuallyAdditions/issues +* Updated the Mod to 1.9 +* Did some other stuff +* All of the items, when holding them in your hands, also look like shields right now. I couldn't be bothered to change the JSONs yet, so you'll have to live with it. + # 1.8.9-r26 ### This update was done by canitzp. As I started to work on another mod and I'm not really interested in Actually Additions anymore, this will now be a common feature. If something breaks with an update, call him. Not me. Thanks. * Made the knife not repairable diff --git a/update/updateVersions.properties b/update/updateVersions.properties index aa1671fde..c67d1bf1e 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,2 +1,3 @@ 1.7.10=21 1.8.9=26 +1.9=27 \ No newline at end of file From e267d0110d53aa538b1012bb2ddd1cf7aec24429 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 29 Apr 2016 19:31:33 +0200 Subject: [PATCH 043/322] Fixed a bug causing the player to be unable to fill buckets --- .../actuallyadditions/mod/event/BucketFillEvent.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java index 1aa29f8a1..d3bd5b97a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java @@ -30,11 +30,13 @@ public class BucketFillEvent{ } private void fillBucket(FillBucketEvent event, Item item, Block fluid){ - Block block = PosUtil.getBlock(event.getTarget().getBlockPos(), event.getWorld()); - if(block == fluid){ - event.getWorld().setBlockToAir(event.getTarget().getBlockPos()); - event.setFilledBucket(new ItemStack(item)); - event.setResult(Event.Result.ALLOW); + if(event.getTarget() != null && event.getTarget().getBlockPos() != null){ + Block block = PosUtil.getBlock(event.getTarget().getBlockPos(), event.getWorld()); + if(block == fluid){ + event.getWorld().setBlockToAir(event.getTarget().getBlockPos()); + event.setFilledBucket(new ItemStack(item)); + event.setResult(Event.Result.ALLOW); + } } } } From 9696897c7b2b5e717ec56c9e97677edbef8f60be Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 29 Apr 2016 19:35:15 +0200 Subject: [PATCH 044/322] r28! --- build.gradle | 2 +- update/changelog.md | 4 ++++ update/updateVersions.properties | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 882e7317c..99b55689a 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.9-r27" +version = "1.9-r28" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 57cec9ea0..46bb3d443 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,7 @@ +# 1.9-r28 +* Fixed a crash when trying to fill a bucket +##### Because it was pretty much gamebreaking. + # 1.9-r27 ### Yes, really. This update pushes the mod's version to 1.9, however it probably is very unstable. There is a few notable bugs and things missing, but I wanted to push this version because a lot of people wanted it. ## If you encounter any bugs, please post them on the Issue Tracker here: https://github.com/Ellpeck/ActuallyAdditions/issues diff --git a/update/updateVersions.properties b/update/updateVersions.properties index c67d1bf1e..f1e5ce5bd 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,3 +1,3 @@ 1.7.10=21 1.8.9=26 -1.9=27 \ No newline at end of file +1.9=28 \ No newline at end of file From 5faa77972507c6c89ef96e5e52d0b34560c08f50 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 30 Apr 2016 20:14:01 +0200 Subject: [PATCH 045/322] fixed blocks dropping twice when broken with the drill Closes #88 --- .../actuallyadditions/mod/blocks/base/BlockContainerBase.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index f7deb7a32..eddb0f905 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -213,6 +213,8 @@ public abstract class BlockContainerBase extends BlockContainer{ public void onBlockHarvested(World world, BlockPos pos, IBlockState state, EntityPlayer player){ if(!player.capabilities.isCreativeMode){ this.dropBlockAsItem(world, pos, state, 0); + //dirty workaround because of Forge calling Item.onBlockStartBreak() twice + world.setBlockToAir(pos); } } From d2a5f3bb17124d7420d3a0150f6285fcf75cd4f3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 1 May 2016 10:29:34 +0200 Subject: [PATCH 046/322] Made drill be openable again. Closes #89 --- .../java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 535840559..a873c5533 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -167,7 +167,7 @@ public class ItemDrill extends ItemEnergy{ @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ - if(!world.isRemote && player.isSneaking() && stack == player.getActiveItemStack()){ + if(!world.isRemote && player.isSneaking()){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.DRILL.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } return new ActionResult(EnumActionResult.PASS, stack); From 61d7b783b30c559982e8701fb5c9fb8553a11801 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 1 May 2016 10:33:40 +0200 Subject: [PATCH 047/322] Made XP drops from drill dependent on the forge event --- .../ellpeck/actuallyadditions/mod/util/WorldUtil.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 09b835258..08abd037f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -30,7 +30,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.play.client.CPacketPlayerDigging; import net.minecraft.network.play.server.SPacketBlockChange; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; @@ -360,8 +360,10 @@ public class WorldUtil{ boolean canHarvest = block.canHarvestBlock(world, pos, player); //Send Block Breaking Event + int xp = -1; if(player instanceof EntityPlayerMP){ - if(ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP)player).interactionManager.getGameType(), (EntityPlayerMP)player, pos) == -1){ + xp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP)player).interactionManager.getGameType(), (EntityPlayerMP)player, pos); + if(xp == -1){ return false; } } @@ -389,8 +391,9 @@ public class WorldUtil{ } //Only drop XP when no Silk Touch is applied if(EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) <= 0){ - //Drop XP depending on Fortune Level - block.dropXpOnBlockBreak(world, pos, block.getExpDrop(state, world, pos, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack))); + if(xp >= 0){ + block.dropXpOnBlockBreak(world, pos, xp); + } } } } From a545eaa0083685c8a0fabebe170fa0923ea487fd Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 1 May 2016 22:26:26 +0200 Subject: [PATCH 048/322] Fixed sounds --- .../mod/blocks/BlockSlabs.java | 11 +++--- .../mod/blocks/BlockTreasureChest.java | 6 ++-- .../mod/booklet/GuiBooklet.java | 10 +++--- .../actuallyadditions/mod/event/HudEvent.java | 3 +- .../mod/inventory/ContainerDrill.java | 14 ++++---- .../mod/inventory/ContainerInputter.java | 16 ++++----- .../inventory/ContainerRangedCollector.java | 16 ++++----- .../mod/items/ItemHairyBall.java | 9 ++--- .../mod/items/ItemLeafBlower.java | 5 +-- .../mod/items/ItemTeleStaff.java | 6 ++-- .../mod/misc/SoundHandler.java | 34 +++++++++++++++++++ .../mod/proxy/ClientProxy.java | 3 ++ .../tile/TileEntityAtomicReconstructor.java | 6 ++-- .../mod/tile/TileEntityCoffeeMachine.java | 5 +-- .../mod/tile/TileEntityGrinder.java | 5 +-- .../assets/actuallyadditions/sounds.json | 8 ++--- 16 files changed, 97 insertions(+), 60 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index a12121528..bd2910dcc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -14,9 +14,9 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -24,13 +24,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import java.util.List; - public class BlockSlabs extends BlockBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 1); @@ -111,8 +108,8 @@ public class BlockSlabs extends BlockBase{ public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ if(PosUtil.getBlock(pos, world) == this.block && ((side.ordinal() == 1 && PosUtil.getMetadata(pos, world) == 0) || (side.ordinal() == 0 && PosUtil.getMetadata(pos, world) == 1))){ if(PosUtil.setBlock(pos, world, ((BlockSlabs)this.block).fullBlock, ((BlockSlabs)this.block).meta, 3)){ - //TODO Fix sounds - //world.playSoundEffect(pos.getX()+0.5F, pos.getY()+0.5F, pos.getZ()+0.5F, this.block.stepSound.getBreakSound(), (this.block.stepSound.getVolume()+1.0F)/2.0F, this.block.stepSound.frequency*0.8F); + SoundType type = this.block.getSoundType(); + world.playSound(player, pos, type.getPlaceSound(), SoundCategory.BLOCKS, (type.getVolume()+1.0F)/2.0F, type.getPitch()*0.8F); stack.stackSize--; return EnumActionResult.SUCCESS; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 229d1b40f..00ae0bf22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -23,6 +23,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -69,12 +70,11 @@ public class BlockTreasureChest extends BlockBase{ @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ - //TODO Fix sounds - //world.playSoundAtEntity(player, "random.chestopen", 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); + world.playSound(player, pos, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); this.dropItems(world, pos); world.setBlockToAir(pos); - //player.triggerAchievement(TheAchievements.OPEN_TREASURE_CHEST.ach); + player.addStat(TheAchievements.OPEN_TREASURE_CHEST.ach); } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 03edd3adf..405587c5a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -20,17 +20,21 @@ import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch; import de.ellpeck.actuallyadditions.mod.config.GuiConfiguration; import de.ellpeck.actuallyadditions.mod.items.ItemBooklet; +import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; @@ -162,8 +166,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public void keyTyped(char theChar, int key){ if(AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){ if(this.hisNameIsAt+1 >= AND_HIS_NAME_IS.length){ - //TODO Fix sound - //Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation(ModUtil.MOD_ID, "duhDuhDuhDuuuh"))); + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundHandler.duhDuhDuhDuuuh, 0.5F)); ModUtil.LOGGER.info("AND HIS NAME IS JOHN CENA DUH DUH DUH DUUUH"); this.hisNameIsAt = 0; } @@ -427,8 +430,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ if(mousePressed){ BookletUtils.openIndexEntry(this, page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); BookletUtils.openChapter(this, page.getChapter(), page); - //TODO Fix sound - //Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F)); + Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index 4173ddbb8..9d5dbd8dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -39,11 +39,10 @@ public class HudEvent{ EntityPlayer player = minecraft.thePlayer; RayTraceResult posHit = minecraft.objectMouseOver; FontRenderer font = minecraft.fontRendererObj; - ItemStack stack = player.getActiveItemStack(); + ItemStack stack = player.getHeldItemMainhand(); profiler.startSection(ModUtil.MOD_ID+"Hud"); - //TODO Fix this not working because stack is always null for some reason if(stack != null){ if(stack.getItem() instanceof IHudDisplay){ profiler.startSection("ItemHudDisplay"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index f2b8a0d83..a7ee9fb02 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.items.ItemDrillUpgrade; import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; @@ -119,18 +120,15 @@ public class ContainerDrill extends Container{ return null; } - //TODO Fix slotClick() - /*@Override - public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player){ - //par3 appears to be the type of clicking - //par3 == 2 appears to be one of the number keys being hit - if(par3 == 2 && par2 == inventory.currentItem){ + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ + if(clickTypeIn == ClickType.SWAP && dragType == inventory.currentItem){ return null; } else{ - return super.slotClick(par1, par2, par3, player); + return super.slotClick(slotId, dragType, clickTypeIn, player); } - }*/ + } @Override public void onContainerClosed(EntityPlayer player){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 0567c9b1e..a0d3a606e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityInputter; import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -61,7 +62,7 @@ public class ContainerInputter extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); @@ -103,17 +104,16 @@ public class ContainerInputter extends Container{ return null; } - //TODO slotClick() - /*@Override - public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player){ - if(par1 >= 0 && par1 < this.inventorySlots.size() && this.getSlot(par1) instanceof SlotFilter){ + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ + if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ //Calls the Filter's SlotClick function - return ((SlotFilter)getSlot(par1)).slotClick(player); + return ((SlotFilter)getSlot(slotId)).slotClick(player); } else{ - return super.slotClick(par1, par2, par3, player); + return super.slotClick(slotId, dragType, clickTypeIn, player); } - }*/ + } @Override public boolean canInteractWith(EntityPlayer player){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index dd2273110..5ff272472 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityRangedCollector; import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -56,7 +57,7 @@ public class ContainerRangedCollector extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); @@ -98,17 +99,16 @@ public class ContainerRangedCollector extends Container{ return null; } - //TODO Find a replacement for slotClick() - /*@Override - public ItemStack slotClick(int par1, int par2, int par3, EntityPlayer player){ - if(par1 >= 0 && par1 < this.inventorySlots.size() && this.getSlot(par1) instanceof SlotFilter){ + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ + if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ //Calls the Filter's SlotClick function - return ((SlotFilter)getSlot(par1)).slotClick(player); + return ((SlotFilter)getSlot(slotId)).slotClick(player); } else{ - return super.slotClick(par1, par2, par3, player); + return super.slotClick(slotId, dragType, clickTypeIn, player); } - }*/ + } @Override public boolean canInteractWith(EntityPlayer player){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index 3c1669825..c8cbcc13f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -15,12 +15,10 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.WeightedRandom; +import net.minecraft.util.*; import net.minecraft.world.World; public class ItemHairyBall extends ItemBase{ @@ -40,8 +38,7 @@ public class ItemHairyBall extends ItemBase{ } stack.stackSize--; - //TODO Sound - //world.playSoundAtEntity(player, "random.pop", 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); } return new ActionResult(EnumActionResult.SUCCESS, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 32f9a300a..276a38760 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -18,12 +18,14 @@ import net.minecraft.block.BlockBush; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; @@ -71,8 +73,7 @@ public class ItemLeafBlower extends ItemBase{ this.breakStuff(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)); //Plays a Minecart sounds (It really sounds like a Leaf Blower!) if(!ConfigValues.lessSound){ - //TODO Fix sound - //player.worldObj.playSoundAtEntity(player, "minecart.base", 0.3F, 0.001F); + player.worldObj.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_MINECART_RIDING, SoundCategory.PLAYERS, 0.3F, 0.001F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index 043d24e97..dc73bf59c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -12,15 +12,18 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.block.SoundType; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -47,8 +50,7 @@ public class ItemTeleStaff extends ItemEnergy{ if(this.getEnergyStored(stack) >= use){ ((EntityPlayerMP)player).playerNetServerHandler.setPlayerLocation(x, y, z, player.rotationYaw, player.rotationPitch); player.dismountRidingEntity(); - //TODO Fix sound - //world.playSound(player, "mob.endermen.portal", 1.0F, 1.0F); + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F); if(!player.capabilities.isCreativeMode){ this.extractEnergy(stack, use, false); this.setWaitTime(stack, 50); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java new file mode 100644 index 000000000..3c188adcd --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java @@ -0,0 +1,34 @@ +package de.ellpeck.actuallyadditions.mod.misc; + +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; + +public class SoundHandler{ + + public static SoundEvent duhDuhDuhDuuuh; + public static SoundEvent coffeeMachine; + public static SoundEvent reconstructor; + public static SoundEvent crusher; + + private static int size = 0; + + public static void init(){ + size = SoundEvent.REGISTRY.getKeys().size(); + + duhDuhDuhDuuuh = registerSound("duhDuhDuhDuuuh"); + coffeeMachine = registerSound("coffeeMachine"); + reconstructor = registerSound("reconstructor"); + crusher = registerSound("crusher"); + } + + private static SoundEvent registerSound(String name){ + ResourceLocation resLoc = new ResourceLocation(ModUtil.MOD_ID, name); + + SoundEvent event = new SoundEvent(resLoc); + SoundEvent.REGISTRY.register(size, resLoc, event); + + size++; + return event; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index a026d55ce..cb1715f75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -21,6 +21,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; +import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; @@ -108,6 +109,8 @@ public class ClientProxy implements IProxy{ this.registerCustomFluidBlockRenderer(InitFluids.fluidCanolaOil); this.registerCustomFluidBlockRenderer(InitFluids.fluidOil); + SoundHandler.init(); + IResourceManager manager = Minecraft.getMinecraft().getResourceManager(); if(manager instanceof IReloadableResourceManager){ ((IReloadableResourceManager)manager).registerReloadListener(new IResourceManagerReloadListener(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index c278fa0b2..5688d9d96 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; +import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -25,6 +26,7 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.NetworkRegistry; @@ -120,8 +122,8 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ if(!ConfigValues.lessSound){ - //TODO Fix sound - //this.worldObj.playSoundEffect(this.getX(), this.getY(), this.getZ(), ModUtil.MOD_ID+":reconstructor", 0.35F, 1.0F); + System.out.println("SOUND!"); + this.worldObj.playSound(null, this.getX(), this.getY(), this.getZ(), SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 90549b524..704bed081 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -24,6 +25,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundCategory; import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -135,8 +137,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements if(this.slots[SLOT_INPUT] != null && this.slots[SLOT_INPUT].getItem() == InitItems.itemMisc && this.slots[SLOT_INPUT].getItemDamage() == TheMiscItems.CUP.ordinal() && this.slots[SLOT_OUTPUT] == null && this.coffeeCacheAmount >= CACHE_USE && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == FluidRegistry.WATER && this.tank.getFluidAmount() >= WATER_USE){ if(this.storage.getEnergyStored() >= ENERGY_USED){ if(this.brewTime%30 == 0 && !ConfigValues.lessSound){ - //TODO Fix sound - //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID+":coffeeMachine", 0.35F, 1.0F); + this.worldObj.playSound(null, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), SoundHandler.coffeeMachine, SoundCategory.BLOCKS, 0.35F, 1.0F); } this.brewTime++; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index dad289c87..8815a3bc4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -14,6 +14,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -21,6 +22,7 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import net.minecraft.util.SoundCategory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -164,8 +166,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } if(shouldPlaySound && !ConfigValues.lessSound){ - //TODO Fix sound - //this.worldObj.playSoundEffect(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), ModUtil.MOD_ID+":crusher", 0.25F, 1.0F); + this.worldObj.playSound(null, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), SoundHandler.crusher, SoundCategory.BLOCKS, 0.25F, 1.0F); } } } diff --git a/src/main/resources/assets/actuallyadditions/sounds.json b/src/main/resources/assets/actuallyadditions/sounds.json index 3fbd30a78..aedb30d28 100644 --- a/src/main/resources/assets/actuallyadditions/sounds.json +++ b/src/main/resources/assets/actuallyadditions/sounds.json @@ -1,6 +1,6 @@ { - "duhDuhDuhDuuuh": { "category": "record", "sounds":["duhDuhDuhDuuuh"] }, - "coffeeMachine": { "category": "block", "sounds":["coffeeMachine"] }, - "reconstructor": { "category": "block", "sounds":["reconstructor"] }, - "crusher": { "category": "block", "sounds":["crusher"] } + "duhDuhDuhDuuuh": { "category": "record", "sounds":["actuallyadditions:duhDuhDuhDuuuh"] }, + "coffeeMachine": { "category": "block", "sounds":["actuallyadditions:coffeeMachine"] }, + "reconstructor": { "category": "block", "sounds":["actuallyadditions:reconstructor"] }, + "crusher": { "category": "block", "sounds":["actuallyadditions:crusher"] } } \ No newline at end of file From cb9db8b4f2231206bbc94f88a5187da04bc7809e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 1 May 2016 22:30:54 +0200 Subject: [PATCH 049/322] Raised the amount of particles from the laser relay as the total amount of allowed particles has been raised by a lot --- .../actuallyadditions/mod/tile/TileEntityLaserRelay.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index aea665406..5468216d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -76,13 +76,13 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei @SideOnly(Side.CLIENT) public void renderParticles(){ - if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 15 : 8) == 0){ + if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 8 : 3) == 0){ BlockPos thisPos = this.pos; LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(thisPos); if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ - PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, COLOR, 1F); + PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 1 : Util.RANDOM.nextInt(6)+1, 0.6F, COLOR, 1F); } } } From 98299708d5984eb28beebbb456c61b9f95985a6e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 1 May 2016 22:34:40 +0200 Subject: [PATCH 050/322] I checked that --- .../de/ellpeck/actuallyadditions/mod/util/AssetUtil.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 5bdc149d6..23e317e3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.util; -import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -79,11 +78,7 @@ public class AssetUtil{ Minecraft.getMinecraft().getRenderItem().renderItemOverlayIntoGUI(mc.fontRendererObj, stack, 0, 0, null); mc.fontRendererObj.setUnicodeFlag(flagBefore); - //TODO I don't think this is needed anymore, but I need to check that - //GL+MC+NEI suck - if(mc.currentScreen instanceof GuiBooklet || mc.currentScreen == null){ - RenderHelper.disableStandardItemLighting(); - } + RenderHelper.disableStandardItemLighting(); GlStateManager.popMatrix(); } From eed5cbdc92590c34d4cf8ea687a979511831c157 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 1 May 2016 22:37:27 +0200 Subject: [PATCH 051/322] 4 ATTACK DAMAGE WHEN ON FEET --- .../de/ellpeck/actuallyadditions/mod/items/ItemKnife.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index a7660d160..8b6b1e676 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -42,7 +42,9 @@ public class ItemKnife extends ItemBase{ @Override public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); - map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Knife Modifier", 3, 0)); + if(slot == EntityEquipmentSlot.MAINHAND){ + map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Knife Modifier", 3, 0)); + } return map; } From bfc68919f3ad044dad8445d30f49674b0ed8465d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 2 May 2016 07:50:13 +0200 Subject: [PATCH 052/322] Fixed a couple of bugs with items that need to be held not working --- .../de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java | 2 +- .../actuallyadditions/mod/blocks/base/BlockContainerBase.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java | 2 +- .../actuallyadditions/mod/items/ItemWaterRemovalRing.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 0d1b3fc03..822f9e848 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -104,7 +104,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ player.inventory.setInventorySlotContents(player.inventory.currentItem, tile.slots[0].copy()); } else{ - player.getActiveItemStack().stackSize += tile.slots[0].stackSize; + stackPlayer.stackSize += tile.slots[0].stackSize; } tile.slots[0] = null; tile.markDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index eddb0f905..d08afdb18 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -111,7 +111,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } public boolean tryToggleRedstone(World world, BlockPos pos, EntityPlayer player){ - ItemStack stack = player.getActiveItemStack(); + ItemStack stack = player.getHeldItemMainhand(); if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof IRedstoneToggle){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index d80ced6df..cc732218e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -42,7 +42,7 @@ public class ItemGrowthRing extends ItemEnergy{ } EntityPlayer player = (EntityPlayer)entity; - ItemStack equipped = player.getActiveItemStack(); + ItemStack equipped = player.getHeldItemMainhand(); int energyUse = 300; if(equipped != null && equipped == stack && this.getEnergyStored(stack) >= energyUse){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 0e377c54c..843e4d49e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -63,7 +63,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ if(!world.isRemote && stack.getItemDamage() < allRings.length){ if(player instanceof EntityPlayer){ EntityPlayer thePlayer = (EntityPlayer)player; - ItemStack equippedStack = ((EntityPlayer)player).getActiveItemStack(); + ItemStack equippedStack = ((EntityPlayer)player).getHeldItemMainhand(); ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()]; Potion potion = Potion.getPotionById(effect.effectID); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index b9e2a57cf..b4852521b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -36,7 +36,7 @@ public class ItemWaterRemovalRing extends ItemEnergy{ } EntityPlayer player = (EntityPlayer)entity; - ItemStack equipped = player.getActiveItemStack(); + ItemStack equipped = player.getHeldItemMainhand(); int energyUse = 350; if(equipped != null && equipped == stack && this.getEnergyStored(stack) >= energyUse){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 08abd037f..906cba5dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -354,7 +354,7 @@ public class WorldUtil{ Block block = PosUtil.getBlock(pos, world); IBlockState state = world.getBlockState(pos); TileEntity tile = world.getTileEntity(pos); - ItemStack stack = player.getActiveItemStack(); + ItemStack stack = player.getHeldItemMainhand(); //If the Block can be harvested or not boolean canHarvest = block.canHarvestBlock(world, pos, player); From 2599715973c03d86e0571f346214a094c6e57929 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 2 May 2016 16:42:03 +0200 Subject: [PATCH 053/322] Items are now held properly! \o/ --- .../actuallyadditions/mod/blocks/BlockSlabs.java | 2 +- .../mod/blocks/BlockTreasureChest.java | 2 +- .../models/item/itemAxeCrystalBlack.json | 14 +------------- .../models/item/itemAxeCrystalBlue.json | 14 +------------- .../models/item/itemAxeCrystalGreen.json | 14 +------------- .../models/item/itemAxeCrystalLightBlue.json | 14 +------------- .../models/item/itemAxeCrystalRed.json | 14 +------------- .../models/item/itemAxeCrystalWhite.json | 14 +------------- .../models/item/itemAxeEmerald.json | 14 +------------- .../models/item/itemAxeObsidian.json | 14 +------------- .../models/item/itemAxeQuartz.json | 14 +------------- .../models/item/itemBattery.json | 14 +------------- .../models/item/itemBatteryDouble.json | 14 +------------- .../models/item/itemBatteryQuadruple.json | 14 +------------- .../models/item/itemBatteryQuintuple.json | 14 +------------- .../models/item/itemBatteryTriple.json | 14 +------------- .../models/item/itemBooklet.json | 14 +------------- .../models/item/itemBootsCrystalBlack.json | 14 +------------- .../models/item/itemBootsCrystalBlue.json | 14 +------------- .../models/item/itemBootsCrystalGreen.json | 14 +------------- .../models/item/itemBootsCrystalLightBlue.json | 14 +------------- .../models/item/itemBootsCrystalRed.json | 14 +------------- .../models/item/itemBootsCrystalWhite.json | 14 +------------- .../models/item/itemBootsEmerald.json | 14 +------------- .../models/item/itemBootsObsidian.json | 14 +------------- .../models/item/itemBootsQuartz.json | 14 +------------- .../models/item/itemBucketCanolaOil.json | 14 +------------- .../models/item/itemBucketOil.json | 14 +------------- .../models/item/itemCanolaSeed.json | 14 +------------- .../models/item/itemChestCrystalBlack.json | 14 +------------- .../models/item/itemChestCrystalBlue.json | 14 +------------- .../models/item/itemChestCrystalGreen.json | 14 +------------- .../models/item/itemChestCrystalLightBlue.json | 14 +------------- .../models/item/itemChestCrystalRed.json | 14 +------------- .../models/item/itemChestCrystalWhite.json | 14 +------------- .../models/item/itemChestEmerald.json | 14 +------------- .../models/item/itemChestObsidian.json | 14 +------------- .../models/item/itemChestQuartz.json | 14 +------------- .../models/item/itemChestToCrateUpgrade.json | 14 +------------- .../models/item/itemCoffee.json | 14 +------------- .../models/item/itemCoffeeBeans.json | 14 +------------- .../models/item/itemCoffeeSeed.json | 14 +------------- .../models/item/itemColorLens.json | 14 +------------- .../models/item/itemCrafterOnAStick.json | 14 +------------- .../models/item/itemCrateKeeper.json | 14 +------------- .../models/item/itemCrystalBlack.json | 14 +------------- .../models/item/itemCrystalBlue.json | 14 +------------- .../models/item/itemCrystalGreen.json | 14 +------------- .../models/item/itemCrystalLightBLue.json | 16 ++-------------- .../models/item/itemCrystalRed.json | 14 +------------- .../models/item/itemCrystalWhite.json | 14 +------------- .../models/item/itemDamageLens.json | 14 +------------- .../models/item/itemDrillBlack.json | 14 +------------- .../models/item/itemDrillBlue.json | 14 +------------- .../models/item/itemDrillBrown.json | 14 +------------- .../models/item/itemDrillCyan.json | 14 +------------- .../models/item/itemDrillGray.json | 14 +------------- .../models/item/itemDrillGreen.json | 14 +------------- .../models/item/itemDrillLightBlue.json | 14 +------------- .../models/item/itemDrillLightGray.json | 14 +------------- .../models/item/itemDrillLime.json | 14 +------------- .../models/item/itemDrillMagenta.json | 14 +------------- .../models/item/itemDrillOrange.json | 14 +------------- .../models/item/itemDrillPink.json | 14 +------------- .../models/item/itemDrillPurple.json | 14 +------------- .../models/item/itemDrillRed.json | 14 +------------- .../item/itemDrillUpgradeBlockPlacing.json | 14 +------------- .../models/item/itemDrillUpgradeFiveByFive.json | 14 +------------- .../models/item/itemDrillUpgradeFortune.json | 14 +------------- .../models/item/itemDrillUpgradeFortuneII.json | 14 +------------- .../models/item/itemDrillUpgradeSilkTouch.json | 14 +------------- .../models/item/itemDrillUpgradeSpeed.json | 14 +------------- .../models/item/itemDrillUpgradeSpeedII.json | 14 +------------- .../models/item/itemDrillUpgradeSpeedIII.json | 14 +------------- .../item/itemDrillUpgradeThreeByThree.json | 14 +------------- .../models/item/itemDrillWhite.json | 14 +------------- .../models/item/itemDrillYellow.json | 14 +------------- .../actuallyadditions/models/item/itemDust.json | 14 +------------- .../models/item/itemExplosionLens.json | 14 +------------- .../models/item/itemFertilizer.json | 14 +------------- .../models/item/itemFlaxSeed.json | 14 +------------- .../models/item/itemFoodBacon.json | 14 +------------- .../models/item/itemFoodBaguette.json | 14 +------------- .../models/item/itemFoodBigCookie.json | 14 +------------- .../models/item/itemFoodCarrotJuice.json | 14 +------------- .../models/item/itemFoodCheese.json | 14 +------------- .../models/item/itemFoodChocolate.json | 14 +------------- .../models/item/itemFoodChocolateCake.json | 14 +------------- .../models/item/itemFoodChocolateToast.json | 14 +------------- .../models/item/itemFoodDoughnut.json | 14 +------------- .../models/item/itemFoodFishNChips.json | 14 +------------- .../models/item/itemFoodFrenchFries.json | 14 +------------- .../models/item/itemFoodFrenchFry.json | 14 +------------- .../models/item/itemFoodHamburger.json | 14 +------------- .../models/item/itemFoodNoodle.json | 14 +------------- .../models/item/itemFoodPizza.json | 14 +------------- .../models/item/itemFoodPumpkinStew.json | 14 +------------- .../models/item/itemFoodRice.json | 14 +------------- .../models/item/itemFoodRiceBread.json | 14 +------------- .../models/item/itemFoodSpaghetti.json | 14 +------------- .../models/item/itemFoodSubmarineSandwich.json | 14 +------------- .../models/item/itemFoodToast.json | 14 +------------- .../models/item/itemGrowthRing.json | 14 +------------- .../models/item/itemHairyBall.json | 14 +------------- .../models/item/itemHelmCrystalBlack.json | 14 +------------- .../models/item/itemHelmCrystalBlue.json | 14 +------------- .../models/item/itemHelmCrystalGreen.json | 14 +------------- .../models/item/itemHelmCrystalLightBlue.json | 14 +------------- .../models/item/itemHelmCrystalRed.json | 14 +------------- .../models/item/itemHelmCrystalWhite.json | 14 +------------- .../models/item/itemHelmEmerald.json | 14 +------------- .../models/item/itemHelmObsidian.json | 14 +------------- .../models/item/itemHelmQuartz.json | 14 +------------- .../models/item/itemHoeCrystalBlack.json | 14 +------------- .../models/item/itemHoeCrystalBlue.json | 14 +------------- .../models/item/itemHoeCrystalGreen.json | 14 +------------- .../models/item/itemHoeCrystalLightBlue.json | 14 +------------- .../models/item/itemHoeCrystalRed.json | 14 +------------- .../models/item/itemHoeCrystalWhite.json | 14 +------------- .../models/item/itemHoeEmerald.json | 14 +------------- .../models/item/itemHoeObsidian.json | 14 +------------- .../models/item/itemHoeQuartz.json | 14 +------------- .../actuallyadditions/models/item/itemJam.json | 14 +------------- .../actuallyadditions/models/item/itemKnife.json | 14 +------------- .../models/item/itemLaserWrench.json | 14 +------------- .../models/item/itemLeafBlower.json | 14 +------------- .../models/item/itemLeafBlowerAdvanced.json | 14 +------------- .../models/item/itemMiscBatWing.json | 14 +------------- .../models/item/itemMiscBlackDye.json | 14 +------------- .../models/item/itemMiscBlackQuartz.json | 14 +------------- .../models/item/itemMiscCanola.json | 14 +------------- .../models/item/itemMiscCoil.json | 14 +------------- .../models/item/itemMiscCoilAdvanced.json | 14 +------------- .../models/item/itemMiscCup.json | 14 +------------- .../models/item/itemMiscDough.json | 14 +------------- .../models/item/itemMiscDrillCore.json | 14 +------------- .../models/item/itemMiscKnifeBlade.json | 14 +------------- .../models/item/itemMiscKnifeHandle.json | 14 +------------- .../models/item/itemMiscLens.json | 14 +------------- .../models/item/itemMiscMashedFood.json | 14 +------------- .../models/item/itemMiscPaperCone.json | 14 +------------- .../models/item/itemMiscRiceDough.json | 14 +------------- .../models/item/itemMiscRiceSlime.json | 14 +------------- .../models/item/itemMiscRing.json | 14 +------------- .../models/item/itemMiscTinyCharcoal.json | 14 +------------- .../models/item/itemMiscTinyCoal.json | 14 +------------- .../models/item/itemPantsCrystalBlack.json | 14 +------------- .../models/item/itemPantsCrystalBlue.json | 14 +------------- .../models/item/itemPantsCrystalGreen.json | 14 +------------- .../models/item/itemPantsCrystalLightBlue.json | 14 +------------- .../models/item/itemPantsCrystalRed.json | 14 +------------- .../models/item/itemPantsCrystalWhite.json | 14 +------------- .../models/item/itemPantsEmerald.json | 14 +------------- .../models/item/itemPantsObsidian.json | 14 +------------- .../models/item/itemPantsQuartz.json | 14 +------------- .../actuallyadditions/models/item/itemPaxel.json | 14 +------------- .../models/item/itemPhantomConnector.json | 14 +------------- .../models/item/itemPickaxeCrystalBlack.json | 14 +------------- .../models/item/itemPickaxeCrystalBlue.json | 14 +------------- .../models/item/itemPickaxeCrystalGreen.json | 14 +------------- .../models/item/itemPickaxeCrystalLightBlue.json | 14 +------------- .../models/item/itemPickaxeCrystalRed.json | 14 +------------- .../models/item/itemPickaxeCrystalWhite.json | 14 +------------- .../models/item/itemPickaxeEmerald.json | 14 +------------- .../models/item/itemPickaxeObsidian.json | 14 +------------- .../models/item/itemPickaxeQuartz.json | 14 +------------- .../models/item/itemPotionRIng.json | 16 ++-------------- .../models/item/itemPotionRingAdvanced.json | 14 +------------- .../models/item/itemResonantRice.json | 14 +------------- .../models/item/itemRiceSeed.json | 14 +------------- .../models/item/itemShovelCrystalBlack.json | 14 +------------- .../models/item/itemShovelCrystalBlue.json | 14 +------------- .../models/item/itemShovelCrystalGreen.json | 14 +------------- .../models/item/itemShovelCrystalLightBlue.json | 14 +------------- .../models/item/itemShovelCrystalRed.json | 14 +------------- .../models/item/itemShovelCrystalWhite.json | 14 +------------- .../models/item/itemShovelEmerald.json | 14 +------------- .../models/item/itemShovelObsidian.json | 14 +------------- .../models/item/itemShovelQuartz.json | 14 +------------- .../models/item/itemSolidifiedExperience.json | 14 +------------- .../models/item/itemSuctionRing.json | 14 +------------- .../models/item/itemSwordCrystalBlack.json | 14 +------------- .../models/item/itemSwordCrystalBlue.json | 14 +------------- .../models/item/itemSwordCrystalGreen.json | 14 +------------- .../models/item/itemSwordCrystalLightBlue.json | 14 +------------- .../models/item/itemSwordCrystalRed.json | 14 +------------- .../models/item/itemSwordCrystalWhite.json | 14 +------------- .../models/item/itemSwordEmerald.json | 14 +------------- .../models/item/itemSwordObsidian.json | 14 +------------- .../models/item/itemSwordQuartz.json | 14 +------------- .../models/item/itemTeleStaff.json | 14 +------------- .../models/item/itemWaterRemovalRing.json | 14 +------------- .../models/item/itemWingsOfTheBats.json | 14 +------------- .../models/item/standardItem.json | 3 +++ 194 files changed, 198 insertions(+), 2487 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/models/item/standardItem.json diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index bd2910dcc..17c21c5a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -109,7 +109,7 @@ public class BlockSlabs extends BlockBase{ if(PosUtil.getBlock(pos, world) == this.block && ((side.ordinal() == 1 && PosUtil.getMetadata(pos, world) == 0) || (side.ordinal() == 0 && PosUtil.getMetadata(pos, world) == 1))){ if(PosUtil.setBlock(pos, world, ((BlockSlabs)this.block).fullBlock, ((BlockSlabs)this.block).meta, 3)){ SoundType type = this.block.getSoundType(); - world.playSound(player, pos, type.getPlaceSound(), SoundCategory.BLOCKS, (type.getVolume()+1.0F)/2.0F, type.getPitch()*0.8F); + world.playSound(null, pos, type.getPlaceSound(), SoundCategory.BLOCKS, (type.getVolume()+1.0F)/2.0F, type.getPitch()*0.8F); stack.stackSize--; return EnumActionResult.SUCCESS; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 00ae0bf22..18872e4d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -70,7 +70,7 @@ public class BlockTreasureChest extends BlockBase{ @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(!world.isRemote){ - world.playSound(player, pos, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); + world.playSound(null, pos, SoundEvents.BLOCK_CHEST_OPEN, SoundCategory.BLOCKS, 0.2F, Util.RANDOM.nextFloat()*0.1F+0.9F); this.dropItems(world, pos); world.setBlockToAir(pos); diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json index 842a36f0d..33f647500 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalBlack" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json index 1161ff3bd..5949f8aca 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json index 5d2172cb9..4e9b841af 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalGreen" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json index 95c464ffa..caeffcae1 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalLightBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json index 8f61de42f..041d3fdfc 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalRed" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json index a78093197..10a640004 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalWhite" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json index 07133a050..975462795 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeEmerald" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json index 36ae965b7..ca7cc9d79 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeObsidian" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json index eb6dc3a3d..d903e2b3f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemAxeQuartz" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemBattery.json b/src/main/resources/assets/actuallyadditions/models/item/itemBattery.json index 5b11ee9ce..c7067c797 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBattery.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBattery.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBattery" - }, - "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/actuallyadditions/models/item/itemBatteryDouble.json b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryDouble.json index 13ed302b6..d13864d1f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBatteryDouble.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryDouble.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBatteryDouble" - }, - "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/actuallyadditions/models/item/itemBatteryQuadruple.json b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryQuadruple.json index 327a98ddb..fd290ee2b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBatteryQuadruple.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryQuadruple.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBatteryQuadruple" - }, - "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/actuallyadditions/models/item/itemBatteryQuintuple.json b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryQuintuple.json index cf16d5de9..3dcd3d1fd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBatteryQuintuple.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryQuintuple.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBatteryQuintuple" - }, - "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/actuallyadditions/models/item/itemBatteryTriple.json b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryTriple.json index eff130296..ecf91b783 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBatteryTriple.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBatteryTriple.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBatteryTriple" - }, - "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/actuallyadditions/models/item/itemBooklet.json b/src/main/resources/assets/actuallyadditions/models/item/itemBooklet.json index fb3016358..2a9d2d30c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBooklet.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBooklet.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBooklet" - }, - "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/actuallyadditions/models/item/itemBootsCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalBlack.json index 4cfd6f455..83258c6ac 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsCrystalBlack" - }, - "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/actuallyadditions/models/item/itemBootsCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalBlue.json index ddfedf1f6..ac8058fc6 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsCrystalBlue" - }, - "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/actuallyadditions/models/item/itemBootsCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalGreen.json index 1f3e64b4f..7d789aec7 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsCrystalGreen" - }, - "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/actuallyadditions/models/item/itemBootsCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalLightBlue.json index 9c6a3a15e..91e26ea84 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsCrystalLightBlue" - }, - "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/actuallyadditions/models/item/itemBootsCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalRed.json index 9c5979db9..68f530b99 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsCrystalRed" - }, - "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/actuallyadditions/models/item/itemBootsCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalWhite.json index 6be621781..c7db5b181 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsCrystalWhite" - }, - "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/actuallyadditions/models/item/itemBootsEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsEmerald.json index d9af82c78..e15326ca2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsEmerald" - }, - "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/actuallyadditions/models/item/itemBootsObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsObsidian.json index 8ec9c0b17..010ca1edd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsObsidian" - }, - "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/actuallyadditions/models/item/itemBootsQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemBootsQuartz.json index a41b54462..4add5bce6 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBootsQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBootsQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBootsQuartz" - }, - "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/actuallyadditions/models/item/itemBucketCanolaOil.json b/src/main/resources/assets/actuallyadditions/models/item/itemBucketCanolaOil.json index 9d4cc28c8..2f21f870d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBucketCanolaOil.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBucketCanolaOil.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBucketCanolaOil" - }, - "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/actuallyadditions/models/item/itemBucketOil.json b/src/main/resources/assets/actuallyadditions/models/item/itemBucketOil.json index 75c941074..77f538821 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemBucketOil.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemBucketOil.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemBucketOil" - }, - "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/actuallyadditions/models/item/itemCanolaSeed.json b/src/main/resources/assets/actuallyadditions/models/item/itemCanolaSeed.json index abdbde44c..91a6ee2f7 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCanolaSeed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCanolaSeed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCanolaSeed" - }, - "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/actuallyadditions/models/item/itemChestCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalBlack.json index 9d2639e78..9e722bef1 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestCrystalBlack" - }, - "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/actuallyadditions/models/item/itemChestCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalBlue.json index 28a716282..682814458 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestCrystalBlue" - }, - "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/actuallyadditions/models/item/itemChestCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalGreen.json index 71934a0ec..41e969945 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestCrystalGreen" - }, - "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/actuallyadditions/models/item/itemChestCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalLightBlue.json index 6df7a6501..34dbd6d89 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestCrystalLightBlue" - }, - "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/actuallyadditions/models/item/itemChestCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalRed.json index 98cf258ba..443b6d2a0 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestCrystalRed" - }, - "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/actuallyadditions/models/item/itemChestCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalWhite.json index d3b38ef5a..75dfc56a4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestCrystalWhite" - }, - "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/actuallyadditions/models/item/itemChestEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestEmerald.json index 37fbe2d88..7a6a30671 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestEmerald" - }, - "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/actuallyadditions/models/item/itemChestObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestObsidian.json index 62d8ab777..7d5879a26 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestObsidian" - }, - "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/actuallyadditions/models/item/itemChestQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestQuartz.json index 79b4a4c5f..fbdf78a10 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestQuartz" - }, - "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/actuallyadditions/models/item/itemChestToCrateUpgrade.json b/src/main/resources/assets/actuallyadditions/models/item/itemChestToCrateUpgrade.json index 995f4ec8b..124dc17ee 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemChestToCrateUpgrade.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemChestToCrateUpgrade.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemChestToCrateUpgrade" - }, - "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/actuallyadditions/models/item/itemCoffee.json b/src/main/resources/assets/actuallyadditions/models/item/itemCoffee.json index 0779c17c6..2cbcda8ca 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCoffee.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCoffee.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCoffee" - }, - "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/actuallyadditions/models/item/itemCoffeeBeans.json b/src/main/resources/assets/actuallyadditions/models/item/itemCoffeeBeans.json index 2677e5f3e..21874940e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCoffeeBeans.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCoffeeBeans.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCoffeeBeans" - }, - "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/actuallyadditions/models/item/itemCoffeeSeed.json b/src/main/resources/assets/actuallyadditions/models/item/itemCoffeeSeed.json index 7ac254b06..214854028 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCoffeeSeed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCoffeeSeed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCoffeeSeed" - }, - "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/actuallyadditions/models/item/itemColorLens.json b/src/main/resources/assets/actuallyadditions/models/item/itemColorLens.json index febf4f546..cf5e89623 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemColorLens.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemColorLens.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemColorLens" - }, - "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/actuallyadditions/models/item/itemCrafterOnAStick.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrafterOnAStick.json index f988bba3f..7809fa335 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrafterOnAStick.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrafterOnAStick.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrafterOnAStick" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "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/actuallyadditions/models/item/itemCrateKeeper.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrateKeeper.json index 3c716ea09..8308dba1f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrateKeeper.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrateKeeper.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrateKeeper" - }, - "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/actuallyadditions/models/item/itemCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalBlack.json index d5f4a00d0..e908f2af2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrystalBlack" - }, - "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/actuallyadditions/models/item/itemCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalBlue.json index af3722fea..b7809090b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrystalBlue" - }, - "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/actuallyadditions/models/item/itemCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalGreen.json index 4749bb6b5..f2f6b2855 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrystalGreen" - }, - "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/actuallyadditions/models/item/itemCrystalLightBLue.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalLightBLue.json index 4fc6ee310..f21e0d5d9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalLightBLue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalLightBLue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrystalLightBlue" - }, - "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 ] - } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalRed.json index 891e69014..3e47ab4dc 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrystalRed" - }, - "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/actuallyadditions/models/item/itemCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalWhite.json index 89b94e961..a35bc0f6c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemCrystalWhite" - }, - "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/actuallyadditions/models/item/itemDamageLens.json b/src/main/resources/assets/actuallyadditions/models/item/itemDamageLens.json index 7562af40d..3cf3e830d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDamageLens.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDamageLens.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDamageLens" - }, - "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/actuallyadditions/models/item/itemDrillBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json index dc9878249..5ffb7ae44 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillBlack" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json index 7d20a66b3..4efd91cd2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json index f6e750431..597c7de7c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillBrown" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json index 40a300df5..ce23cb65e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillCyan" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json index ddf67eb04..7344584cb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillGray" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json index 02e620bd5..00efd317b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillGreen" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json index f2be7ae87..883650c36 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillLightBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json index bc09f0d84..cc08b6b10 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillLightGray" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json index b8c9bd6d5..ab04de229 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillLime" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json index 2b9e40557..f98228429 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillMagenta" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json index 30d6f5c66..58d89fecc 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillOrange" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json index 38a039ece..d8c780250 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillPink" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json index e916e17a3..3f448e9c9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillPurple" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json index 98efbe6d9..e44904f4c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillRed" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeBlockPlacing.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeBlockPlacing.json index 380ff4691..f698ed519 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeBlockPlacing.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeBlockPlacing.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeBlockPlacing" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeFiveByFive.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFiveByFive.json index 06edaa9a1..1c25ff937 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFiveByFive.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFiveByFive.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeFiveByFive" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeFortune.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFortune.json index 40d8a06b7..e35afc905 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFortune.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFortune.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeFortune" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeFortuneII.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFortuneII.json index 897775de5..fa55e177d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFortuneII.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeFortuneII.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeFortuneII" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeSilkTouch.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSilkTouch.json index c3a1030e5..ed35e7c71 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSilkTouch.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSilkTouch.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeSilkTouch" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeSpeed.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeed.json index 93eb3981f..8dcc1bc00 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeSpeed" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeSpeedII.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeedII.json index 6a9cfcd6b..8b6de13cb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeedII.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeedII.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeSpeedII" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeSpeedIII.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeedIII.json index b871fd200..c884700f0 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeedIII.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeSpeedIII.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeSpeedIII" - }, - "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/actuallyadditions/models/item/itemDrillUpgradeThreeByThree.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeThreeByThree.json index 1e6a9663d..5c0e64d32 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeThreeByThree.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillUpgradeThreeByThree.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillUpgradeThreeByThree" - }, - "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/actuallyadditions/models/item/itemDrillWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillWhite.json index d753d890c..917d8ea48 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillWhite" - }, - "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/actuallyadditions/models/item/itemDrillYellow.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillYellow.json index fc7a27e1f..1ff1b70f0 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillYellow.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillYellow.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDrillYellow" - }, - "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/actuallyadditions/models/item/itemDust.json b/src/main/resources/assets/actuallyadditions/models/item/itemDust.json index c97b4b7d1..1845ef3a4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDust.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDust.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemDust" - }, - "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/actuallyadditions/models/item/itemExplosionLens.json b/src/main/resources/assets/actuallyadditions/models/item/itemExplosionLens.json index bbb387e76..a1d4eff1a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemExplosionLens.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemExplosionLens.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemExplosionLens" - }, - "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/actuallyadditions/models/item/itemFertilizer.json b/src/main/resources/assets/actuallyadditions/models/item/itemFertilizer.json index 21e5e68d3..ede15f37a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFertilizer.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFertilizer.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFertilizer" - }, - "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/actuallyadditions/models/item/itemFlaxSeed.json b/src/main/resources/assets/actuallyadditions/models/item/itemFlaxSeed.json index 0087d9527..582d4985f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFlaxSeed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFlaxSeed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFlaxSeed" - }, - "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/actuallyadditions/models/item/itemFoodBacon.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodBacon.json index 5eed1f061..68db47723 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodBacon.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodBacon.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodBacon" - }, - "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/actuallyadditions/models/item/itemFoodBaguette.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodBaguette.json index b9d80c5f0..1dcedd339 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodBaguette.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodBaguette.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodBaguette" - }, - "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/actuallyadditions/models/item/itemFoodBigCookie.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodBigCookie.json index b2d339305..c79571eef 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodBigCookie.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodBigCookie.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodBigCookie" - }, - "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/actuallyadditions/models/item/itemFoodCarrotJuice.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodCarrotJuice.json index a493df9f4..67a35870f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodCarrotJuice.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodCarrotJuice.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodCarrotJuice" - }, - "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/actuallyadditions/models/item/itemFoodCheese.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodCheese.json index b6fb363ac..9a11d2b2c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodCheese.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodCheese.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodCheese" - }, - "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/actuallyadditions/models/item/itemFoodChocolate.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolate.json index 458ceb6ac..e64434fb3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolate.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolate.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodChocolate" - }, - "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/actuallyadditions/models/item/itemFoodChocolateCake.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolateCake.json index 6d68ecd01..a7eca8eb5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolateCake.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolateCake.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodChocolateCake" - }, - "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/actuallyadditions/models/item/itemFoodChocolateToast.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolateToast.json index 79f80256a..37b956e5e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolateToast.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodChocolateToast.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodChocolateToast" - }, - "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/actuallyadditions/models/item/itemFoodDoughnut.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodDoughnut.json index c1192cfca..45e4ad998 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodDoughnut.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodDoughnut.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodDoughnut" - }, - "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/actuallyadditions/models/item/itemFoodFishNChips.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodFishNChips.json index 09b781a3b..b7bbe0b22 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodFishNChips.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodFishNChips.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodFishNChips" - }, - "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/actuallyadditions/models/item/itemFoodFrenchFries.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodFrenchFries.json index 9e854d5a3..64273194a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodFrenchFries.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodFrenchFries.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodFrenchFries" - }, - "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/actuallyadditions/models/item/itemFoodFrenchFry.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodFrenchFry.json index 0670a6565..d8cd6c69a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodFrenchFry.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodFrenchFry.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodFrenchFry" - }, - "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/actuallyadditions/models/item/itemFoodHamburger.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodHamburger.json index 400e7218e..d03a25d11 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodHamburger.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodHamburger.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodHamburger" - }, - "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/actuallyadditions/models/item/itemFoodNoodle.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodNoodle.json index 4b6894d91..90b72c2d3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodNoodle.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodNoodle.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodNoodle" - }, - "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/actuallyadditions/models/item/itemFoodPizza.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodPizza.json index a6b4c00d0..7af7813cc 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodPizza.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodPizza.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodPizza" - }, - "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/actuallyadditions/models/item/itemFoodPumpkinStew.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodPumpkinStew.json index 2f2a0ec88..a9035f536 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodPumpkinStew.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodPumpkinStew.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodPumpkinStew" - }, - "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/actuallyadditions/models/item/itemFoodRice.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodRice.json index 7a28939c8..c1ca47eca 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodRice.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodRice.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodRice" - }, - "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/actuallyadditions/models/item/itemFoodRiceBread.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodRiceBread.json index f8ce8ddc9..267e9c805 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodRiceBread.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodRiceBread.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodRiceBread" - }, - "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/actuallyadditions/models/item/itemFoodSpaghetti.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodSpaghetti.json index c198d5688..c3d6193f6 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodSpaghetti.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodSpaghetti.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodSpaghetti" - }, - "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/actuallyadditions/models/item/itemFoodSubmarineSandwich.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodSubmarineSandwich.json index 11b9c1390..045cadcdb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodSubmarineSandwich.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodSubmarineSandwich.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodSubmarineSandwich" - }, - "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/actuallyadditions/models/item/itemFoodToast.json b/src/main/resources/assets/actuallyadditions/models/item/itemFoodToast.json index ec7d7d946..e103fa788 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemFoodToast.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFoodToast.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemFoodToast" - }, - "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/actuallyadditions/models/item/itemGrowthRing.json b/src/main/resources/assets/actuallyadditions/models/item/itemGrowthRing.json index 6a168e784..a497e5ec4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemGrowthRing.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemGrowthRing.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemGrowthRing" - }, - "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/actuallyadditions/models/item/itemHairyBall.json b/src/main/resources/assets/actuallyadditions/models/item/itemHairyBall.json index 1b6d96ec5..646b0c71a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHairyBall.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHairyBall.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHairyBall" - }, - "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/actuallyadditions/models/item/itemHelmCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalBlack.json index 9105de89c..bf26205e1 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmCrystalBlack" - }, - "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/actuallyadditions/models/item/itemHelmCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalBlue.json index 9fc307f23..50ac82b4e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmCrystalBlue" - }, - "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/actuallyadditions/models/item/itemHelmCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalGreen.json index 1d2d9075c..3a97208df 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmCrystalGreen" - }, - "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/actuallyadditions/models/item/itemHelmCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalLightBlue.json index e8f611e5c..e2b12aa16 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmCrystalLightBlue" - }, - "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/actuallyadditions/models/item/itemHelmCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalRed.json index f745d5a15..f30bcc650 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmCrystalRed" - }, - "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/actuallyadditions/models/item/itemHelmCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalWhite.json index 2991fdc1d..7e504dcc5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmCrystalWhite" - }, - "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/actuallyadditions/models/item/itemHelmEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmEmerald.json index 632f5f331..7c018afa3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmEmerald" - }, - "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/actuallyadditions/models/item/itemHelmObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmObsidian.json index 1733d7047..7472acbee 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmObsidian" - }, - "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/actuallyadditions/models/item/itemHelmQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemHelmQuartz.json index de80e361e..0c3bd38df 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHelmQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHelmQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHelmQuartz" - }, - "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/actuallyadditions/models/item/itemHoeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json index d7df123a3..b4405b11b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalBlack" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json index 7291c5994..5e41c0164 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json index 7b60b1612..a83b3af0c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalGreen" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json index 9ef20e126..71e4fd303 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalLightBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json index b99a73bcf..fc671fed9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalRed" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json index c752ce004..96c8fd154 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalWhite" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json index a63ca7961..46773a6bb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeEmerald" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json index e2d35b754..6830b59e8 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeObsidian" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json index d14b0e1cb..3c7b724fe 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemHoeQuartz" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemJam.json b/src/main/resources/assets/actuallyadditions/models/item/itemJam.json index de9a01f4d..c8239f49d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemJam.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemJam.json @@ -1,19 +1,7 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemJam", "layer1": "actuallyadditions:items/itemJamOverlay" - }, - "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/actuallyadditions/models/item/itemKnife.json b/src/main/resources/assets/actuallyadditions/models/item/itemKnife.json index 732fa7bbb..022c5cf1d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemKnife.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemKnife.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemKnife" - }, - "display": { - "thirdperson": { - "rotation": [ 180, 90, -35 ], - "translation": [ 0, 0, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json b/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json index a8921e7c8..355a07090 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemLaserWrench" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "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/actuallyadditions/models/item/itemLeafBlower.json b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlower.json index f8cd64808..489521fc7 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlower.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlower.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemLeafBlower" - }, - "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/actuallyadditions/models/item/itemLeafBlowerAdvanced.json b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlowerAdvanced.json index 069eb24a7..17905e2e0 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlowerAdvanced.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlowerAdvanced.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemLeafBlowerAdvanced" - }, - "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/actuallyadditions/models/item/itemMiscBatWing.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBatWing.json index dd74c149c..5fa974da3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscBatWing.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBatWing.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscBatWing" - }, - "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/actuallyadditions/models/item/itemMiscBlackDye.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBlackDye.json index 253063d7e..f5667ffcb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscBlackDye.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBlackDye.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscBlackDye" - }, - "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/actuallyadditions/models/item/itemMiscBlackQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBlackQuartz.json index aa5416518..1bc416f0b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscBlackQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBlackQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscBlackQuartz" - }, - "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/actuallyadditions/models/item/itemMiscCanola.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCanola.json index 26df9bc37..ea2e3e484 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscCanola.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCanola.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscCanola" - }, - "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/actuallyadditions/models/item/itemMiscCoil.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCoil.json index 9ea7a8ed8..b4e3e5884 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscCoil.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCoil.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscCoil" - }, - "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/actuallyadditions/models/item/itemMiscCoilAdvanced.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCoilAdvanced.json index 4f695ffd7..09bd1dfac 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscCoilAdvanced.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCoilAdvanced.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscCoilAdvanced" - }, - "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/actuallyadditions/models/item/itemMiscCup.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCup.json index ae0e7b67b..ce9757e13 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscCup.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscCup.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscCup" - }, - "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/actuallyadditions/models/item/itemMiscDough.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscDough.json index ae5b963cf..092e8d5a6 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscDough.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscDough.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscDough" - }, - "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/actuallyadditions/models/item/itemMiscDrillCore.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscDrillCore.json index 06b4afe88..8ce6af6d0 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscDrillCore.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscDrillCore.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscDrillCore" - }, - "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/actuallyadditions/models/item/itemMiscKnifeBlade.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscKnifeBlade.json index 022ef9ef2..9f7d18846 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscKnifeBlade.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscKnifeBlade.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscKnifeBlade" - }, - "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/actuallyadditions/models/item/itemMiscKnifeHandle.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscKnifeHandle.json index a32e370c1..2b47e71a3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscKnifeHandle.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscKnifeHandle.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscKnifeHandle" - }, - "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/actuallyadditions/models/item/itemMiscLens.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscLens.json index 1ae2e96f0..f76c7da1e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscLens.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscLens.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscLens" - }, - "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/actuallyadditions/models/item/itemMiscMashedFood.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscMashedFood.json index b3b778f22..c92c840a4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscMashedFood.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscMashedFood.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscMashedFood" - }, - "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/actuallyadditions/models/item/itemMiscPaperCone.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscPaperCone.json index 24b378ed8..6095682c5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscPaperCone.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscPaperCone.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscPaperCone" - }, - "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/actuallyadditions/models/item/itemMiscRiceDough.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscRiceDough.json index 4123b88da..1a3a900e2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscRiceDough.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscRiceDough.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscRiceDough" - }, - "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/actuallyadditions/models/item/itemMiscRiceSlime.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscRiceSlime.json index f20e1520f..7f85c37c0 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscRiceSlime.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscRiceSlime.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscRiceSlime" - }, - "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/actuallyadditions/models/item/itemMiscRing.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscRing.json index ded1c493e..e66312b24 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscRing.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscRing.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscRing" - }, - "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/actuallyadditions/models/item/itemMiscTinyCharcoal.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscTinyCharcoal.json index 430bb6df2..02143f751 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscTinyCharcoal.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscTinyCharcoal.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscTinyCharcoal" - }, - "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/actuallyadditions/models/item/itemMiscTinyCoal.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscTinyCoal.json index 065e3d543..82f5f999a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMiscTinyCoal.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscTinyCoal.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemMiscTinyCoal" - }, - "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/actuallyadditions/models/item/itemPantsCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalBlack.json index e4521de3b..3f137ac77 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsCrystalBlack" - }, - "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/actuallyadditions/models/item/itemPantsCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalBlue.json index 6ed1bcbb5..9d551397d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsCrystalBlue" - }, - "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/actuallyadditions/models/item/itemPantsCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalGreen.json index 0e50de466..4b3afa373 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsCrystalGreen" - }, - "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/actuallyadditions/models/item/itemPantsCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalLightBlue.json index db3718cc6..4e3b4e17d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsCrystalLightBlue" - }, - "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/actuallyadditions/models/item/itemPantsCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalRed.json index f3f48adac..a40f58d9e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsCrystalRed" - }, - "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/actuallyadditions/models/item/itemPantsCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalWhite.json index adbd3061b..07c5e306e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsCrystalWhite" - }, - "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/actuallyadditions/models/item/itemPantsEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsEmerald.json index 35b1f272d..8f6f95ad2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsEmerald" - }, - "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/actuallyadditions/models/item/itemPantsObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsObsidian.json index 0597eca71..38e5c7fdc 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsObsidian" - }, - "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/actuallyadditions/models/item/itemPantsQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemPantsQuartz.json index 5a955c125..c47d5c293 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPantsQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPantsQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPantsQuartz" - }, - "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/actuallyadditions/models/item/itemPaxel.json b/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json index 173bf85d1..9d884e5ba 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json @@ -1,19 +1,7 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPaxel", "layer1": "actuallyadditions:items/itemPaxelOverlay" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -4.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json b/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json index bbc5cf49a..596e7fd15 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPhantomConnector" - }, - "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/actuallyadditions/models/item/itemPickaxeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json index a3a260102..771a07a37 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalBlack" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json index 0e9300ed6..a9b2073d4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json index f114a7b7c..92e8e5666 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalGreen" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json index 9eacb99c4..496b110aa 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalLightBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json index fc2a24ef1..748f85268 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalRed" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json index c9258e25c..470033888 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalWhite" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json index 59878c75d..4dd313223 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeEmerald" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json index 9c3abf2cc..0b2a7d461 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeObsidian" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json index 4a55157b8..0f3642d49 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeQuartz" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPotionRIng.json b/src/main/resources/assets/actuallyadditions/models/item/itemPotionRIng.json index f680f0012..f8a56de4e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPotionRIng.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPotionRIng.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPotionRing" - }, - "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 ] - } } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPotionRingAdvanced.json b/src/main/resources/assets/actuallyadditions/models/item/itemPotionRingAdvanced.json index 501577231..d16ea43da 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPotionRingAdvanced.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPotionRingAdvanced.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemPotionRingAdvanced" - }, - "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/actuallyadditions/models/item/itemResonantRice.json b/src/main/resources/assets/actuallyadditions/models/item/itemResonantRice.json index 2454d8596..66ac696a6 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemResonantRice.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemResonantRice.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemResonantRice" - }, - "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/actuallyadditions/models/item/itemRiceSeed.json b/src/main/resources/assets/actuallyadditions/models/item/itemRiceSeed.json index 723b390dd..243266e7a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemRiceSeed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemRiceSeed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemRiceSeed" - }, - "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/actuallyadditions/models/item/itemShovelCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json index c14fea2a9..0ff56ffa2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalBlack" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json index 4d229fe2a..40c7418aa 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json index 8bab6a502..c952a11d9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalGreen" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json index 57df3d027..9f4966f8b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalLightBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json index b184f813f..af139596e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalRed" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json index b798baf3a..63c5a4bfd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalWhite" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json index 176d8ed43..b47ca3480 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelEmerald" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json index c28dafe2a..bcc488885 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelObsidian" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json index a041a770e..58bec9d4d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemShovelQuartz" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSolidifiedExperience.json b/src/main/resources/assets/actuallyadditions/models/item/itemSolidifiedExperience.json index 01c06e5d9..addd00e9b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSolidifiedExperience.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSolidifiedExperience.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSolidifiedExperience" - }, - "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/actuallyadditions/models/item/itemSuctionRing.json b/src/main/resources/assets/actuallyadditions/models/item/itemSuctionRing.json index 5fc36c5bb..789e6d073 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSuctionRing.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSuctionRing.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSuctionRing" - }, - "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/actuallyadditions/models/item/itemSwordCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json index d1fec6526..cb3d2cd81 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalBlack" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json index db2307a34..677a26ee9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json index fad045c4b..41f950a84 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalGreen" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json index 148871f1a..3ed80a4e2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalLightBlue" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json index 8d8985dfd..e81725a19 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalRed" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json index 4e25faca8..94cf38eb1 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalWhite" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json index 76f90708b..da8db7f97 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordEmerald" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json index c288e204f..c3fffbfd9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordObsidian" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json index 96efd9828..545ac6937 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemSwordQuartz" - }, - "display": { - "thirdperson": { - "rotation": [ 0, 90, -35 ], - "translation": [ 0, 1.25, -3.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } } } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json b/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json index 2488f5e93..32e489cb9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemTeleStaff" - }, - "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/actuallyadditions/models/item/itemWaterRemovalRing.json b/src/main/resources/assets/actuallyadditions/models/item/itemWaterRemovalRing.json index e833b971a..88ac40726 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemWaterRemovalRing.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemWaterRemovalRing.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemWaterRemovalRing" - }, - "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/actuallyadditions/models/item/itemWingsOfTheBats.json b/src/main/resources/assets/actuallyadditions/models/item/itemWingsOfTheBats.json index 16ce4d11b..8f6baad6a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemWingsOfTheBats.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemWingsOfTheBats.json @@ -1,18 +1,6 @@ { - "parent": "builtin/generated", + "parent": "actuallyadditions:item/standardItem", "textures": { "layer0": "actuallyadditions:items/itemWingsOfTheBats" - }, - "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/actuallyadditions/models/item/standardItem.json b/src/main/resources/assets/actuallyadditions/models/item/standardItem.json new file mode 100644 index 000000000..b449e1f77 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/standardItem.json @@ -0,0 +1,3 @@ +{ + "parent": "item/generated" +} From 5aa63f2822b046c5774748dd24bdf0cf11852e75 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 2 May 2016 16:56:27 +0200 Subject: [PATCH 054/322] Made slab placing a bit more proper --- .../mod/blocks/BlockSlabs.java | 77 ++++++++++++++++--- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index 17c21c5a5..a4fa86580 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyInteger; @@ -25,11 +24,18 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; public class BlockSlabs extends BlockBase{ + private static final AxisAlignedBB AABB_BOTTOM_HALF = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); + private static final AxisAlignedBB AABB_TOP_HALF = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, 1); private Block fullBlock; private int meta; @@ -81,6 +87,10 @@ public class BlockSlabs extends BlockBase{ return this.getStateFromMeta(meta); } + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + return state.getValue(META) == 1 ? AABB_TOP_HALF : AABB_BOTTOM_HALF; + } + @Override protected ItemBlockBase getItemBlock(){ return new TheItemBlock(this); @@ -104,17 +114,64 @@ public class BlockSlabs extends BlockBase{ this.setMaxDamage(0); } - @Override - public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ - if(PosUtil.getBlock(pos, world) == this.block && ((side.ordinal() == 1 && PosUtil.getMetadata(pos, world) == 0) || (side.ordinal() == 0 && PosUtil.getMetadata(pos, world) == 1))){ - if(PosUtil.setBlock(pos, world, ((BlockSlabs)this.block).fullBlock, ((BlockSlabs)this.block).meta, 3)){ - SoundType type = this.block.getSoundType(); - world.playSound(null, pos, type.getPlaceSound(), SoundCategory.BLOCKS, (type.getVolume()+1.0F)/2.0F, type.getPitch()*0.8F); - stack.stackSize--; - return EnumActionResult.SUCCESS; + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + if(stack.stackSize != 0 && playerIn.canPlayerEdit(pos.offset(facing), facing, stack)){ + IBlockState state = worldIn.getBlockState(pos); + + if(state.getBlock() == this.block){ + BlockSlabs theBlock = (BlockSlabs)this.block; + if((facing == EnumFacing.UP && state.getValue(META) == 0 || facing == EnumFacing.DOWN && state.getValue(META) == 1)){ + IBlockState newState = theBlock.fullBlock.getStateFromMeta(theBlock.meta); + AxisAlignedBB bound = newState.getCollisionBoundingBox(worldIn, pos); + + if(bound != Block.NULL_AABB && worldIn.checkNoEntityCollision(bound.offset(pos)) && worldIn.setBlockState(pos, newState, 11)){ + SoundType soundtype = theBlock.fullBlock.getSoundType(); + worldIn.playSound(playerIn, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume()+1.0F)/2.0F, soundtype.getPitch()*0.8F); + --stack.stackSize; + } + + return EnumActionResult.SUCCESS; + } + } + + return this.tryPlace(playerIn, stack, worldIn, pos.offset(facing)) ? EnumActionResult.SUCCESS : super.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); + } + else{ + return EnumActionResult.FAIL; + } + } + + @SideOnly(Side.CLIENT) + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack){ + IBlockState state = worldIn.getBlockState(pos); + + if(state.getBlock() == this.block){ + if((side == EnumFacing.UP && state.getValue(META) == 0 || side == EnumFacing.DOWN && state.getValue(META) == 1)){ + return true; } } - return super.onItemUse(stack, player, world, pos, hand, side, hitX, hitY, hitZ); + + return worldIn.getBlockState(pos.offset(side)).getBlock() == this.block || super.canPlaceBlockOnSide(worldIn, pos, side, player, stack); + } + + private boolean tryPlace(EntityPlayer player, ItemStack stack, World worldIn, BlockPos pos){ + IBlockState iblockstate = worldIn.getBlockState(pos); + + if(iblockstate.getBlock() == this.block){ + BlockSlabs theBlock = (BlockSlabs)this.block; + IBlockState newState = theBlock.fullBlock.getStateFromMeta(theBlock.meta); + AxisAlignedBB bound = newState.getCollisionBoundingBox(worldIn, pos); + + if(bound != Block.NULL_AABB && worldIn.checkNoEntityCollision(bound.offset(pos)) && worldIn.setBlockState(pos, newState, 11)){ + SoundType soundtype = theBlock.fullBlock.getSoundType(); + worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume()+1.0F)/2.0F, soundtype.getPitch()*0.8F); + --stack.stackSize; + } + + return true; + } + + return false; } @Override From 1757f38bd1b258fde9edd3cddcf6d100fc4d2b05 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 2 May 2016 17:09:23 +0200 Subject: [PATCH 055/322] Fixed most bounding boxes --- .../mod/blocks/BlockCoffeeMachine.java | 10 +++- .../mod/blocks/BlockCompost.java | 46 ++++++++++--------- .../mod/blocks/BlockFishingNet.java | 12 ++++- .../mod/blocks/BlockFurnaceSolar.java | 12 ++++- .../mod/blocks/BlockLaserRelay.java | 3 +- .../mod/blocks/BlockPhantomBooster.java | 12 +++-- .../mod/blocks/BlockSlabs.java | 3 ++ .../mod/blocks/BlockSmileyCloud.java | 26 ----------- .../mod/blocks/BlockWallAA.java | 2 + .../mod/items/ItemAllToolAA.java | 1 + .../mod/items/ItemAxeAA.java | 1 + .../mod/items/ItemDrill.java | 1 + .../mod/items/ItemPickaxeAA.java | 2 + .../mod/items/ItemShovelAA.java | 2 + 14 files changed, 77 insertions(+), 56 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 8ea934fcd..5c1aafa9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -26,13 +26,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -//TODO Fix bounding box public class BlockCoffeeMachine extends BlockContainerBase{ + private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625*2, 1-0.0625, 1-0.0625); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); public BlockCoffeeMachine(String name){ @@ -43,6 +46,11 @@ public class BlockCoffeeMachine extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + return AABB; + } + @Override public boolean isFullCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 822f9e848..152ae4371 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -28,16 +28,28 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.List; + public class BlockCompost extends BlockContainerBase implements IHudDisplay{ + private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625, 11*0.0625, 1-0.0625); + protected static final AxisAlignedBB AABB_LEGS = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.3125D, 1.0D); + protected static final AxisAlignedBB AABB_WALL_NORTH = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.125D); + protected static final AxisAlignedBB AABB_WALL_SOUTH = new AxisAlignedBB(0.0D, 0.0D, 0.875D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB AABB_WALL_EAST = new AxisAlignedBB(0.875D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + protected static final AxisAlignedBB AABB_WALL_WEST = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.125D, 1.0D, 1.0D); + public BlockCompost(String name){ super(Material.WOOD, name); this.setHarvestLevel("axe", 0); @@ -48,27 +60,19 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ //this.setBlockBoundsForItemRender(); } - //TODO Fix bounding box - /*@Override - public void setBlockBoundsForItemRender(){ - float f = 1.0F/16.0F; - this.setBlockBounds(f, 0.0F, f, 1.0F-f, 11*f, 1.0F-f); - } @Override - public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB mask, List list, Entity collidingEntity){ - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.3125F, 1.0F); - super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - float f = 0.125F, y = 0.7F; - this.setBlockBounds(0.0F, 0.0F, 0.0F, f, y, 1.0F); - super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, y, f); - super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - this.setBlockBounds(1.0F-f, 0.0F, 0.0F, 1.0F, y, 1.0F); - super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - this.setBlockBounds(0.0F, 0.0F, 1.0F-f, 1.0F, y, 1.0F); - super.addCollisionBoxesToList(world, pos, state, mask, list, collidingEntity); - this.setBlockBoundsForItemRender(); - }*/ + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + return AABB; + } + + @Override + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn){ + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_LEGS); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_WEST); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_NORTH); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_EAST); + addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_SOUTH); + } @Override public boolean isOpaqueCube(IBlockState state){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index c026a16c6..1c6d40530 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -18,18 +18,26 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockFishingNet extends BlockContainerBase{ + private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 0.0625, 1); + public BlockFishingNet(String name){ super(Material.WOOD, name); this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(3.0F); this.setSoundType(SoundType.WOOD); - //TODO Fix block bounds - //this.setBlockBounds(0F, 0F, 0F, 1F, 1F/16F, 1F); + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + return AABB; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index 5978a3767..fbbe077b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -18,19 +18,27 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockFurnaceSolar extends BlockContainerBase{ + private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 6*0.0625, 1); + public BlockFurnaceSolar(String name){ super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); this.setSoundType(SoundType.STONE); + } - //TODO Block bounds - //this.setBlockBounds(0F, 0F, 0F, 1F, 6F/16F, 1F); + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + return AABB; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 8da959c04..20ed3050e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -22,10 +22,11 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -//TODO Fix bounding box public class BlockLaserRelay extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index 24873bc0c..29ee417b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -18,20 +18,26 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockPhantomBooster extends BlockContainerBase{ + private static final AxisAlignedBB AABB = new AxisAlignedBB(2*0.0625, 0, 2*0.0625, 1-2*0.0625, 1, 1-2*0.0625); + public BlockPhantomBooster(String name){ super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); this.setSoundType(SoundType.STONE); + } - //TODO Fix block bounds - //float f = 1F/16F; - //this.setBlockBounds(2*f, 0F, 2*f, 1-2*f, 1F, 1-2*f); + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + return AABB; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index a4fa86580..305b9420e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -87,6 +87,7 @@ public class BlockSlabs extends BlockBase{ return this.getStateFromMeta(meta); } + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return state.getValue(META) == 1 ? AABB_TOP_HALF : AABB_BOTTOM_HALF; } @@ -114,6 +115,7 @@ public class BlockSlabs extends BlockBase{ this.setMaxDamage(0); } + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ if(stack.stackSize != 0 && playerIn.canPlayerEdit(pos.offset(facing), facing, stack)){ IBlockState state = worldIn.getBlockState(pos); @@ -141,6 +143,7 @@ public class BlockSlabs extends BlockBase{ } } + @Override @SideOnly(Side.CLIENT) public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack){ IBlockState state = worldIn.getBlockState(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 9aef4bef9..0843937a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -57,32 +57,6 @@ public class BlockSmileyCloud extends BlockContainerBase{ return false; } - //TODO Fix bounding box - /*@Override - public void setBlockBoundsBasedOnState(IBlockAccess world, BlockPos pos){ - int meta = PosUtil.getMetadata(pos, world); - float f = 0.0625F; - - if(meta == 1){ - this.setBlockBounds(0F, 0F, 0F, 1F, 1F-f*3F, 1F-f*2F); - } - if(meta == 3){ - this.setBlockBounds(0F, 0F, 0F, 1F-f*2F, 1F-f*3F, 1F); - } - if(meta == 0){ - this.setBlockBounds(0F, 0F, f*2F, 1F, 1F-f*3F, 1F); - } - if(meta == 2){ - this.setBlockBounds(f*2F, 0F, 0F, 1F, 1F-f*3F, 1F); - } - } - - @Override - public void addCollisionBoxesToList(World world, BlockPos pos, IBlockState state, AxisAlignedBB axis, List list, Entity entity){ - this.setBlockBoundsBasedOnState(world, pos); - super.addCollisionBoxesToList(world, pos, state, axis, list, entity); - }*/ - @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index fc5de2f80..058e6f8e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -77,11 +77,13 @@ public class BlockWallAA extends BlockBase{ return side != EnumFacing.DOWN || super.shouldSideBeRendered(blockState, blockAccess, pos, side); } + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ state = this.getActualState(state, source, pos); return field_185751_g[figureOutSomeWallStuff(state)]; } + @Override public AxisAlignedBB getSelectedBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ blockState = this.getActualState(blockState, worldIn, pos); return field_185750_B[figureOutSomeWallStuff(blockState)]; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 918e6f7c3..557870852 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -51,6 +51,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ this.color = color; } + @Override protected void registerRendering(){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, "itemPaxel")); ActuallyAdditions.proxy.addRenderVariant(this, new ResourceLocation(ModUtil.MOD_ID, "itemPaxel")); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index 79f6b6d2d..ca1f386d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -34,6 +34,7 @@ public class ItemAxeAA extends ItemToolAA{ super(6.0F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); } + @Override public float getStrVsBlock(ItemStack stack, IBlockState state){ Material material = state.getMaterial(); return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index a873c5533..ecb0dea10 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -214,6 +214,7 @@ public class ItemDrill extends ItemEnergy{ return EnumRarity.EPIC; } + @Override public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index c706f7bfc..663e570be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -34,6 +34,7 @@ public class ItemPickaxeAA extends ItemToolAA{ super(1.0F, -2.8F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); } + @Override public boolean canHarvestBlock(IBlockState blockIn){ Block block = blockIn.getBlock(); @@ -74,6 +75,7 @@ public class ItemPickaxeAA extends ItemToolAA{ } } + @Override public float getStrVsBlock(ItemStack stack, IBlockState state){ Material material = state.getMaterial(); return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index aa8328703..678cf9ad0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -43,11 +43,13 @@ public class ItemShovelAA extends ItemToolAA{ super(1.5F, -3.0F, material, repairItem, unlocalizedName, rarity, EFFECTIVE_ON); } + @Override public boolean canHarvestBlock(IBlockState blockIn){ Block block = blockIn.getBlock(); return block == Blocks.SNOW_LAYER || block == Blocks.SNOW; } + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); } From 928676ea537f193a84e997ca1a3813eecd27d10b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 2 May 2016 17:12:31 +0200 Subject: [PATCH 056/322] cleanup --- .../mod/blocks/BlockCompost.java | 2 +- .../mod/blocks/BlockFurnaceSolar.java | 1 - .../mod/blocks/BlockLaserRelay.java | 3 -- .../mod/blocks/BlockPhantom.java | 3 +- .../mod/blocks/BlockSmileyCloud.java | 8 ++- .../mod/blocks/BlockWallAA.java | 51 +++++++++---------- .../mod/blocks/BlockWildPlant.java | 2 +- .../mod/blocks/render/RenderSmileyCloud.java | 3 +- .../mod/event/TooltipEvent.java | 2 +- .../mod/inventory/ContainerEnervator.java | 5 +- .../mod/items/InitItems.java | 10 ++-- .../mod/items/ItemAllToolAA.java | 2 +- .../mod/items/ItemResonantRice.java | 1 - .../mod/items/ItemShovelAA.java | 3 -- .../mod/items/ItemTeleStaff.java | 1 - .../mod/misc/DungeonLoot.java | 7 --- .../tile/TileEntityAtomicReconstructor.java | 1 - .../mod/tile/TileEntityCoffeeMachine.java | 1 - .../mod/tile/TileEntityFishingNet.java | 1 - .../mod/tile/TileEntityGrinder.java | 1 - 20 files changed, 42 insertions(+), 66 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 152ae4371..7171b2035 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -43,12 +43,12 @@ import java.util.List; public class BlockCompost extends BlockContainerBase implements IHudDisplay{ - private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625, 11*0.0625, 1-0.0625); protected static final AxisAlignedBB AABB_LEGS = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.3125D, 1.0D); protected static final AxisAlignedBB AABB_WALL_NORTH = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.125D); protected static final AxisAlignedBB AABB_WALL_SOUTH = new AxisAlignedBB(0.0D, 0.0D, 0.875D, 1.0D, 1.0D, 1.0D); protected static final AxisAlignedBB AABB_WALL_EAST = new AxisAlignedBB(0.875D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); protected static final AxisAlignedBB AABB_WALL_WEST = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.125D, 1.0D, 1.0D); + private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625, 11*0.0625, 1-0.0625); public BlockCompost(String name){ super(Material.WOOD, name); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index fbbe077b5..f104e27ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -18,7 +18,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 20ed3050e..09737b255 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -22,9 +21,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockLaserRelay extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index 9f6974992..03cbb574e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -28,7 +28,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 0843937a9..f3f8824f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -22,22 +22,20 @@ import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.List; import java.util.Random; public class BlockSmileyCloud extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 058e6f8e4..07e9c9089 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -16,7 +16,6 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockFenceGate; import net.minecraft.block.BlockWall; import net.minecraft.block.material.Material; -import net.minecraft.block.state.BlockStateBase; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; @@ -35,15 +34,13 @@ import java.util.List; public class BlockWallAA extends BlockBase{ + protected static final AxisAlignedBB[] field_185751_g = new AxisAlignedBB[]{new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + protected static final AxisAlignedBB[] field_185750_B = new AxisAlignedBB[]{field_185751_g[0].setMaxY(1.5D), field_185751_g[1].setMaxY(1.5D), field_185751_g[2].setMaxY(1.5D), field_185751_g[3].setMaxY(1.5D), field_185751_g[4].setMaxY(1.5D), field_185751_g[5].setMaxY(1.5D), field_185751_g[6].setMaxY(1.5D), field_185751_g[7].setMaxY(1.5D), field_185751_g[8].setMaxY(1.5D), field_185751_g[9].setMaxY(1.5D), field_185751_g[10].setMaxY(1.5D), field_185751_g[11].setMaxY(1.5D), field_185751_g[12].setMaxY(1.5D), field_185751_g[13].setMaxY(1.5D), field_185751_g[14].setMaxY(1.5D), field_185751_g[15].setMaxY(1.5D)}; private int meta; - public BlockWallAA(String name, Block base){ this(name, base, 0); } - protected static final AxisAlignedBB[] field_185751_g = new AxisAlignedBB[]{new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; - protected static final AxisAlignedBB[] field_185750_B = new AxisAlignedBB[]{field_185751_g[0].setMaxY(1.5D), field_185751_g[1].setMaxY(1.5D), field_185751_g[2].setMaxY(1.5D), field_185751_g[3].setMaxY(1.5D), field_185751_g[4].setMaxY(1.5D), field_185751_g[5].setMaxY(1.5D), field_185751_g[6].setMaxY(1.5D), field_185751_g[7].setMaxY(1.5D), field_185751_g[8].setMaxY(1.5D), field_185751_g[9].setMaxY(1.5D), field_185751_g[10].setMaxY(1.5D), field_185751_g[11].setMaxY(1.5D), field_185751_g[12].setMaxY(1.5D), field_185751_g[13].setMaxY(1.5D), field_185751_g[14].setMaxY(1.5D), field_185751_g[15].setMaxY(1.5D)}; - public BlockWallAA(String name, Block base, int meta){ super(base.getMaterial(base.getDefaultState()), name); @@ -56,6 +53,28 @@ public class BlockWallAA extends BlockBase{ this.setDefaultState(this.blockState.getBaseState().withProperty(BlockWall.UP, false).withProperty(BlockWall.NORTH, false).withProperty(BlockWall.EAST, false).withProperty(BlockWall.SOUTH, false).withProperty(BlockWall.WEST, false)); } + private static int figureOutSomeWallStuff(IBlockState state){ + int i = 0; + + if(state.getValue(BlockWall.NORTH)){ + i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); + } + + if(state.getValue(BlockWall.EAST)){ + i |= 1 << EnumFacing.EAST.getHorizontalIndex(); + } + + if(state.getValue(BlockWall.SOUTH)){ + i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); + } + + if(state.getValue(BlockWall.WEST)){ + i |= 1 << EnumFacing.WEST.getHorizontalIndex(); + } + + return i; + } + @Override public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos){ return state.withProperty(BlockWall.UP, !worldIn.isAirBlock(pos.up())).withProperty(BlockWall.NORTH, this.canConnectTo(worldIn, pos.north())).withProperty(BlockWall.EAST, this.canConnectTo(worldIn, pos.east())).withProperty(BlockWall.SOUTH, this.canConnectTo(worldIn, pos.south())).withProperty(BlockWall.WEST, this.canConnectTo(worldIn, pos.west())); @@ -89,28 +108,6 @@ public class BlockWallAA extends BlockBase{ return field_185750_B[figureOutSomeWallStuff(blockState)]; } - private static int figureOutSomeWallStuff(IBlockState state){ - int i = 0; - - if(state.getValue(BlockWall.NORTH)){ - i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); - } - - if(state.getValue(BlockWall.EAST)){ - i |= 1 << EnumFacing.EAST.getHorizontalIndex(); - } - - if(state.getValue(BlockWall.SOUTH)){ - i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); - } - - if(state.getValue(BlockWall.WEST)){ - i |= 1 << EnumFacing.WEST.getHorizontalIndex(); - } - - return i; - } - @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index b212845d1..663e19c85 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -59,7 +59,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override @SideOnly(Side.CLIENT) public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player){ - int metadata = PosUtil.getMetadata(pos, world); + int metadata = PosUtil.getMetadata(pos, world); return metadata >= allWildPlants.length ? null : new ItemStack(((BlockPlant)allWildPlants[metadata].wildVersionOf).seedItem); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 1f813b71b..befb31b3d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -37,7 +37,8 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ theCloud.setStatus(ClientProxy.bulletForMyValentine || (theCloud.name != null && !theCloud.name.isEmpty() && theCloud.name.equals("Pink Fluffy Unicloud"))); if(theCloud.name != null && !theCloud.name.isEmpty()){ - easterEggs : for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ + easterEggs: + for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ for(String triggerName : cloud.getTriggerNames()){ if(StringUtil.equalsToLowerCase(triggerName, theCloud.name)){ GlStateManager.pushMatrix(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index 63309d36c..49dae44e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -94,7 +94,7 @@ public class TooltipEvent{ } else{ if(ConfigBoolValues.CTRL_INFO_FOR_EXTRA_INFO.isEnabled()){ - event.getToolTip().add(TextFormatting.DARK_GRAY+""+TextFormatting .ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".ctrlForMoreInfo.desc")); + event.getToolTip().add(TextFormatting.DARK_GRAY+""+TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".ctrlForMoreInfo.desc")); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index c72dbfe2f..5774aed05 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -28,10 +28,9 @@ import net.minecraftforge.fml.relauncher.SideOnly; @InventoryContainer public class ContainerEnervator extends Container{ + public static final EntityEquipmentSlot[] ARMOR_SLOTS = new EntityEquipmentSlot[]{EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; private TileEntityEnervator enervator; - public static final EntityEquipmentSlot[] ARMOR_SLOTS = new EntityEquipmentSlot[] {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; - public ContainerEnervator(EntityPlayer player, TileEntityBase tile){ this.enervator = (TileEntityEnervator)tile; InventoryPlayer inventory = player.inventory; @@ -77,7 +76,7 @@ public class ContainerEnervator extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 6cc7e7b82..1a58b8100 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -328,7 +328,7 @@ public class InitItems{ itemShovelCrystalLightBlue = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemShovelCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); itemSwordCrystalLightBlue = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemSwordCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); itemHoeCrystalLightBlue = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalLightBlue, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), "itemHoeCrystalLightBlue", Util.CRYSTAL_LIGHT_BLUE_RARITY); - itemHelmCrystalLightBlue = new ItemArmorAA("itemHelmCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); + itemHelmCrystalLightBlue = new ItemArmorAA("itemHelmCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); itemChestCrystalLightBlue = new ItemArmorAA("itemChestCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); itemPantsCrystalLightBlue = new ItemArmorAA("itemPantsCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); itemBootsCrystalLightBlue = new ItemArmorAA("itemBootsCrystalLightBlue", InitArmorMaterials.armorMaterialCrystalLightBlue, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), Util.CRYSTAL_LIGHT_BLUE_RARITY); @@ -342,7 +342,7 @@ public class InitItems{ itemHelmCrystalBlack = new ItemArmorAA("itemHelmCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); itemChestCrystalBlack = new ItemArmorAA("itemChestCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); itemPantsCrystalBlack = new ItemArmorAA("itemPantsCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); - itemBootsCrystalBlack = new ItemArmorAA("itemBootsCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); + itemBootsCrystalBlack = new ItemArmorAA("itemBootsCrystalBlack", InitArmorMaterials.armorMaterialCrystalBlack, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), Util.CRYSTAL_BLACK_RARITY); itemPaxelCrystalBlack = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalBlack, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), "itemPaxelCrystalBlack", Util.CRYSTAL_BLACK_RARITY, 2631982); itemPickaxeCrystalGreen = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemPickaxeCrystalGreen", Util.CRYSTAL_GREEN_RARITY); @@ -352,8 +352,8 @@ public class InitItems{ itemHoeCrystalGreen = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemHoeCrystalGreen", Util.CRYSTAL_GREEN_RARITY); itemHelmCrystalGreen = new ItemArmorAA("itemHelmCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); itemChestCrystalGreen = new ItemArmorAA("itemChestCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); - itemPantsCrystalGreen = new ItemArmorAA("itemPantsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); - itemBootsCrystalGreen = new ItemArmorAA("itemBootsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); + itemPantsCrystalGreen = new ItemArmorAA("itemPantsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); + itemBootsCrystalGreen = new ItemArmorAA("itemBootsCrystalGreen", InitArmorMaterials.armorMaterialCrystalGreen, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), Util.CRYSTAL_GREEN_RARITY); itemPaxelCrystalGreen = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalGreen, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), "itemPaxelCrystalGreen", Util.CRYSTAL_GREEN_RARITY, 46848); itemPickaxeCrystalWhite = new ItemPickaxeAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemPickaxeCrystalWhite", Util.CRYSTAL_WHITE_RARITY); @@ -361,7 +361,7 @@ public class InitItems{ itemShovelCrystalWhite = new ItemShovelAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemShovelCrystalWhite", Util.CRYSTAL_WHITE_RARITY); itemSwordCrystalWhite = new ItemSwordAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemSwordCrystalWhite", Util.CRYSTAL_WHITE_RARITY); itemHoeCrystalWhite = new ItemHoeAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemHoeCrystalWhite", Util.CRYSTAL_WHITE_RARITY); - itemHelmCrystalWhite = new ItemArmorAA("itemHelmCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()),Util.CRYSTAL_WHITE_RARITY); + itemHelmCrystalWhite = new ItemArmorAA("itemHelmCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 0, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemChestCrystalWhite = new ItemArmorAA("itemChestCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 1, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemPantsCrystalWhite = new ItemArmorAA("itemPantsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemBootsCrystalWhite = new ItemArmorAA("itemBootsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 557870852..a3bd8d6f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -67,7 +67,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ @Override public boolean canHarvestBlock(IBlockState state, ItemStack stack){ - return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getMaterial(state).isToolNotRequired() || (state.getBlock() == Blocks.SNOW_LAYER || state.getBlock()== Blocks.SNOW || (state.getBlock()== Blocks.OBSIDIAN ? this.toolMaterial.getHarvestLevel() >= 3 : (state.getBlock()!= Blocks.DIAMOND_BLOCK && state.getBlock()!= Blocks.DIAMOND_ORE ? (state.getBlock()!= Blocks.EMERALD_ORE && state.getBlock()!= Blocks.EMERALD_BLOCK? (state.getBlock()!= Blocks.GOLD_BLOCK&& state.getBlock()!= Blocks.GOLD_ORE ? (state.getBlock()!= Blocks.IRON_BLOCK&& state.getBlock()!= Blocks.IRON_ORE ? (state.getBlock()!= Blocks.LAPIS_BLOCK&& state.getBlock()!= Blocks.LAPIS_ORE ? (state.getBlock()!= Blocks.REDSTONE_ORE && state.getBlock()!= Blocks.LIT_REDSTONE_ORE ? (state.getBlock().getMaterial(state) == Material.ROCK || (state.getBlock().getMaterial(state) == Material.IRON || state.getBlock().getMaterial(state) == Material.ANVIL)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); + return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getMaterial(state).isToolNotRequired() || (state.getBlock() == Blocks.SNOW_LAYER || state.getBlock() == Blocks.SNOW || (state.getBlock() == Blocks.OBSIDIAN ? this.toolMaterial.getHarvestLevel() >= 3 : (state.getBlock() != Blocks.DIAMOND_BLOCK && state.getBlock() != Blocks.DIAMOND_ORE ? (state.getBlock() != Blocks.EMERALD_ORE && state.getBlock() != Blocks.EMERALD_BLOCK ? (state.getBlock() != Blocks.GOLD_BLOCK && state.getBlock() != Blocks.GOLD_ORE ? (state.getBlock() != Blocks.IRON_BLOCK && state.getBlock() != Blocks.IRON_ORE ? (state.getBlock() != Blocks.LAPIS_BLOCK && state.getBlock() != Blocks.LAPIS_ORE ? (state.getBlock() != Blocks.REDSTONE_ORE && state.getBlock() != Blocks.LIT_REDSTONE_ORE ? (state.getBlock().getMaterial(state) == Material.ROCK || (state.getBlock().getMaterial(state) == Material.IRON || state.getBlock().getMaterial(state) == Material.ANVIL)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); } private boolean hasExtraWhitelist(Block block){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 7b8a360cf..1cee8bfe0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index 678cf9ad0..e58bbfe55 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -13,19 +13,16 @@ package de.ellpeck.actuallyadditions.mod.items; import com.google.common.collect.Sets; import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; -import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index dc73bf59c..7b5ca10f0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.block.SoundType; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java index 50699a25f..f8235e5e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java @@ -10,15 +10,8 @@ package de.ellpeck.actuallyadditions.mod.misc; -import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.WeightedRandomChestContent; //TODO Fix dungeon loot (oh god) public class DungeonLoot{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 5688d9d96..66be49acb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -20,7 +20,6 @@ import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 704bed081..4e69051ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -19,7 +19,6 @@ import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index a3d2d1c42..7bf013a90 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemFishingRod; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 8815a3bc4..be75cea9a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -16,7 +16,6 @@ import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.item.ItemStack; From 9ab94e5701ed7b657cda163771bd8aa4be55c7c3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 2 May 2016 17:46:53 +0200 Subject: [PATCH 057/322] this --- .../api/internal/EntrySet.java | 8 +- .../mod/blocks/BlockWallAA.java | 2 +- .../mod/blocks/base/BlockPlant.java | 8 +- .../mod/booklet/GuiBooklet.java | 6 +- .../mod/booklet/page/PageCrusherRecipe.java | 12 +- .../mod/booklet/page/PagePicture.java | 2 +- .../mod/creative/CreativeTab.java | 422 +++++++++--------- .../mod/gen/JamVillagerTradeHandler.java | 4 +- .../actuallyadditions/mod/gen/OreGen.java | 6 +- .../mod/inventory/ContainerCoffeeMachine.java | 14 +- .../mod/inventory/ContainerDrill.java | 26 +- .../inventory/ContainerFluidCollector.java | 6 +- .../mod/inventory/ContainerInputter.java | 2 +- .../inventory/ContainerRangedCollector.java | 2 +- .../mod/inventory/ContainerXPSolidifier.java | 4 +- .../mod/inventory/gui/GuiBreaker.java | 2 +- .../mod/inventory/gui/GuiCanolaPress.java | 12 +- .../mod/inventory/gui/GuiCoalGenerator.java | 8 +- .../mod/inventory/gui/GuiCoffeeMachine.java | 22 +- .../mod/inventory/gui/GuiCrafter.java | 2 +- .../inventory/gui/GuiDirectionalBreaker.java | 6 +- .../mod/inventory/gui/GuiDrill.java | 2 +- .../mod/inventory/gui/GuiDropper.java | 2 +- .../mod/inventory/gui/GuiEnergizer.java | 6 +- .../mod/inventory/gui/GuiEnervator.java | 6 +- .../mod/inventory/gui/GuiFeeder.java | 10 +- .../inventory/gui/GuiFermentingBarrel.java | 12 +- .../mod/inventory/gui/GuiFluidCollector.java | 6 +- .../mod/inventory/gui/GuiFurnaceDouble.java | 6 +- .../mod/inventory/gui/GuiGiantChest.java | 2 +- .../mod/inventory/gui/GuiGrinder.java | 8 +- .../mod/inventory/gui/GuiInputter.java | 74 +-- .../mod/inventory/gui/GuiMiner.java | 10 +- .../mod/inventory/gui/GuiOilGenerator.java | 12 +- .../mod/inventory/gui/GuiPhantomPlacer.java | 2 +- .../mod/inventory/gui/GuiRangedCollector.java | 8 +- .../mod/inventory/gui/GuiRepairer.java | 6 +- .../mod/inventory/gui/GuiSmileyCloud.java | 8 +- .../mod/inventory/gui/GuiXPSolidifier.java | 24 +- .../mod/items/ItemAllToolAA.java | 2 +- .../mod/items/ItemLeafBlower.java | 2 +- .../mod/items/base/ItemEnergy.java | 4 +- .../mod/misc/LaserRelayConnectionHandler.java | 2 +- .../tile/TileEntityAtomicReconstructor.java | 4 +- .../mod/tile/TileEntityBreaker.java | 18 +- .../mod/tile/TileEntityCanolaPress.java | 14 +- .../mod/tile/TileEntityCoalGenerator.java | 10 +- .../mod/tile/TileEntityCoffeeMachine.java | 8 +- .../mod/tile/TileEntityCompost.java | 2 +- .../tile/TileEntityDirectionalBreaker.java | 16 +- .../mod/tile/TileEntityDropper.java | 4 +- .../mod/tile/TileEntityEnergizer.java | 4 +- .../mod/tile/TileEntityEnervator.java | 6 +- .../mod/tile/TileEntityFeeder.java | 6 +- .../mod/tile/TileEntityFermentingBarrel.java | 16 +- .../mod/tile/TileEntityFishingNet.java | 10 +- .../mod/tile/TileEntityFluidCollector.java | 36 +- .../mod/tile/TileEntityFurnaceDouble.java | 10 +- .../mod/tile/TileEntityFurnaceSolar.java | 10 +- .../mod/tile/TileEntityGreenhouseGlass.java | 18 +- .../mod/tile/TileEntityGrinder.java | 14 +- .../mod/tile/TileEntityHeatCollector.java | 10 +- .../mod/tile/TileEntityInputter.java | 14 +- .../mod/tile/TileEntityInventoryBase.java | 30 +- .../mod/tile/TileEntityItemRepairer.java | 2 +- .../mod/tile/TileEntityLaserRelay.java | 2 +- .../tile/TileEntityLavaFactoryController.java | 10 +- .../mod/tile/TileEntityLeafGenerator.java | 10 +- .../mod/tile/TileEntityMiner.java | 16 +- .../mod/tile/TileEntityOilGenerator.java | 12 +- .../mod/tile/TileEntityPhantomEnergyface.java | 10 +- .../mod/tile/TileEntityPhantomItemface.java | 4 +- .../mod/tile/TileEntityPhantomLiquiface.java | 8 +- .../mod/tile/TileEntityPhantomPlacer.java | 28 +- .../mod/tile/TileEntityPhantomface.java | 18 +- .../mod/tile/TileEntityRangedCollector.java | 2 +- .../mod/tile/TileEntitySmileyCloud.java | 2 +- .../mod/tile/TileEntityXPSolidifier.java | 8 +- .../mod/util/FluidStateMapper.java | 4 +- 79 files changed, 593 insertions(+), 593 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/EntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/EntrySet.java index fb67d6e6f..993483334 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/EntrySet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/EntrySet.java @@ -62,10 +62,10 @@ public class EntrySet{ public NBTTagCompound writeToNBT(){ NBTTagCompound compound = new NBTTagCompound(); - compound.setInteger("Entry", entry == null ? -1 : ActuallyAdditionsAPI.bookletEntries.indexOf(entry)); - compound.setInteger("Chapter", entry == null || chapter == null ? -1 : entry.getChapters().indexOf(chapter)); - compound.setInteger("Page", page == null ? -1 : page.getID()); - compound.setInteger("PageInIndex", pageInIndex); + compound.setInteger("Entry", this.entry == null ? -1 : ActuallyAdditionsAPI.bookletEntries.indexOf(this.entry)); + compound.setInteger("Chapter", this.entry == null || this.chapter == null ? -1 : this.entry.getChapters().indexOf(this.chapter)); + compound.setInteger("Page", this.page == null ? -1 : this.page.getID()); + compound.setInteger("PageInIndex", this.pageInIndex); return compound; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 07e9c9089..40900050a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -115,7 +115,7 @@ public class BlockWallAA extends BlockBase{ @Override public int damageDropped(IBlockState state){ - return meta; + return this.meta; } @SuppressWarnings("unchecked") diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 3688daa01..092db8a7b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -85,10 +85,10 @@ public class BlockPlant extends BlockCrops{ @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing facing, float hitX, float hitY, float hitZ){ - if(getMetaFromState(state) >= 7){ + if(this.getMetaFromState(state) >= 7){ if(!world.isRemote){ - List drops = getDrops(world, pos, state, 0); + List drops = this.getDrops(world, pos, state, 0); boolean deductedSeedSize = false; for(ItemStack drop : drops){ if(drop != null){ @@ -104,7 +104,7 @@ public class BlockPlant extends BlockCrops{ } } - world.setBlockState(pos, getStateFromMeta(0)); + world.setBlockState(pos, this.getStateFromMeta(0)); } return true; } @@ -118,7 +118,7 @@ public class BlockPlant extends BlockCrops{ @Override public int quantityDropped(IBlockState state, int fortune, Random random){ - return this.getMetaFromState(state) >= 7 ? random.nextInt(addDropAmount)+minDropAmount : super.quantityDropped(state, fortune, random); + return this.getMetaFromState(state) >= 7 ? random.nextInt(this.addDropAmount)+this.minDropAmount : super.quantityDropped(state, fortune, random); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 405587c5a..4636d7d6f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -321,17 +321,17 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.buttonList.add(this.buttonConfig); for(int i = 0; i < this.chapterButtons.length; i++){ - this.chapterButtons[i] = new IndexButton(9+i, guiLeft+15, guiTop+10+(i*12), 115, 10, "", this); + this.chapterButtons[i] = new IndexButton(9+i, this.guiLeft+15, this.guiTop+10+(i*12), 115, 10, "", this); this.buttonList.add(this.chapterButtons[i]); } for(int i = 0; i < this.bookmarkButtons.length; i++){ - int x = this.guiLeft+xSize/2-(this.bookmarkButtons.length/2*16)+(i*16); + int x = this.guiLeft+this.xSize/2-(this.bookmarkButtons.length/2*16)+(i*16); this.bookmarkButtons[i] = new BookmarkButton(this.chapterButtons[this.chapterButtons.length-1].id+1+i, x, this.guiTop+this.ySize+13, this); this.buttonList.add(this.bookmarkButtons[i]); } - this.searchField = new GuiTextField(4500, this.fontRendererObj, guiLeft+148, guiTop+162, 66, 10); + this.searchField = new GuiTextField(4500, this.fontRendererObj, this.guiLeft+148, this.guiTop+162, 66, 10); this.searchField.setMaxStringLength(30); this.searchField.setEnableBackgroundDrawing(false); this.searchField.setCanLoseFocus(false); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index 56169dd26..488447406 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -42,7 +42,7 @@ public class PageCrusherRecipe extends BookletPageAA{ @Override @SideOnly(Side.CLIENT) public void renderPre(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ - if(recipe != null){ + if(this.recipe != null){ Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.resLocValentine : GuiBooklet.resLoc); gui.drawRect(gui.getGuiLeft()+37, gui.getGuiTop()+20, 60, 180, 60, 60); } @@ -52,7 +52,7 @@ public class PageCrusherRecipe extends BookletPageAA{ @Override @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ - if(recipe == null){ + if(this.recipe == null){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } else{ @@ -65,12 +65,12 @@ public class PageCrusherRecipe extends BookletPageAA{ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+100, 115, 0, false); } - if(recipe != null){ - if(recipe.outputTwoChance > 0){ - Minecraft.getMinecraft().fontRendererObj.drawString(recipe.outputTwoChance+"%", gui.getGuiLeft()+37+62, gui.getGuiTop()+20+33, 0); + if(this.recipe != null){ + if(this.recipe.outputTwoChance > 0){ + Minecraft.getMinecraft().fontRendererObj.drawString(this.recipe.outputTwoChance+"%", gui.getGuiLeft()+37+62, gui.getGuiTop()+20+33, 0); } - if(recipe.getRecipeOutputOnes() != null){ + if(this.recipe.getRecipeOutputOnes() != null){ for(int i = 0; i < 2; i++){ for(int j = 0; j < 3; j++){ ItemStack stack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java index 5d8aa51a2..5263523b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java @@ -37,7 +37,7 @@ public class PagePicture extends PageTextOnly{ String text = gui.getCurrentEntrySet().page.getText(); if(text != null && !text.isEmpty()){ - StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+textStartY, 115, 0, false); + StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+this.textStartY, 115, 0, false); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 18dd9a0a4..ef8826037 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -47,251 +47,251 @@ public class CreativeTab extends CreativeTabs{ public void displayAllRelevantItems(List list){ this.list = list; - add(InitItems.itemBooklet); - add(InitBlocks.blockSmileyCloud); + this.add(InitItems.itemBooklet); + this.add(InitBlocks.blockSmileyCloud); - add(InitBlocks.blockFireworkBox); - add(InitBlocks.blockLaserRelay); - add(InitBlocks.blockAtomicReconstructor); - add(InitBlocks.blockPhantomface); - add(InitBlocks.blockPhantomEnergyface); - add(InitBlocks.blockPhantomLiquiface); - add(InitBlocks.blockPhantomPlacer); - add(InitBlocks.blockPhantomBreaker); - add(InitBlocks.blockInputter); - add(InitBlocks.blockInputterAdvanced); - add(InitBlocks.blockPhantomBooster); - add(InitBlocks.blockCoffeeMachine); - add(InitBlocks.blockXPSolidifier); + this.add(InitBlocks.blockFireworkBox); + this.add(InitBlocks.blockLaserRelay); + this.add(InitBlocks.blockAtomicReconstructor); + this.add(InitBlocks.blockPhantomface); + this.add(InitBlocks.blockPhantomEnergyface); + this.add(InitBlocks.blockPhantomLiquiface); + this.add(InitBlocks.blockPhantomPlacer); + this.add(InitBlocks.blockPhantomBreaker); + this.add(InitBlocks.blockInputter); + this.add(InitBlocks.blockInputterAdvanced); + this.add(InitBlocks.blockPhantomBooster); + this.add(InitBlocks.blockCoffeeMachine); + this.add(InitBlocks.blockXPSolidifier); - add(InitBlocks.blockMiner); - add(InitBlocks.blockGreenhouseGlass); - add(InitBlocks.blockGrinder); - add(InitBlocks.blockGrinderDouble); - add(InitBlocks.blockFurnaceDouble); - add(InitBlocks.blockLavaFactoryController); + this.add(InitBlocks.blockMiner); + this.add(InitBlocks.blockGreenhouseGlass); + this.add(InitBlocks.blockGrinder); + this.add(InitBlocks.blockGrinderDouble); + this.add(InitBlocks.blockFurnaceDouble); + this.add(InitBlocks.blockLavaFactoryController); - add(InitBlocks.blockEnergizer); - add(InitBlocks.blockEnervator); + this.add(InitBlocks.blockEnergizer); + this.add(InitBlocks.blockEnervator); - add(InitBlocks.blockFurnaceSolar); - add(InitBlocks.blockHeatCollector); - add(InitBlocks.blockCoalGenerator); - add(InitBlocks.blockOilGenerator); - add(InitBlocks.blockLeafGenerator); + this.add(InitBlocks.blockFurnaceSolar); + this.add(InitBlocks.blockHeatCollector); + this.add(InitBlocks.blockCoalGenerator); + this.add(InitBlocks.blockOilGenerator); + this.add(InitBlocks.blockLeafGenerator); - add(InitBlocks.blockItemRepairer); - add(InitBlocks.blockFishingNet); - add(InitBlocks.blockBreaker); - add(InitBlocks.blockDirectionalBreaker); - add(InitBlocks.blockRangedCollector); - add(InitBlocks.blockPlacer); - add(InitBlocks.blockDropper); - add(InitBlocks.blockFluidPlacer); - add(InitBlocks.blockFluidCollector); + this.add(InitBlocks.blockItemRepairer); + this.add(InitBlocks.blockFishingNet); + this.add(InitBlocks.blockBreaker); + this.add(InitBlocks.blockDirectionalBreaker); + this.add(InitBlocks.blockRangedCollector); + this.add(InitBlocks.blockPlacer); + this.add(InitBlocks.blockDropper); + this.add(InitBlocks.blockFluidPlacer); + this.add(InitBlocks.blockFluidCollector); - add(InitBlocks.blockMisc); - add(InitBlocks.blockFeeder); - add(InitBlocks.blockCompost); - add(InitBlocks.blockGiantChest); - add(InitBlocks.blockCanolaPress); - add(InitBlocks.blockFermentingBarrel); + this.add(InitBlocks.blockMisc); + this.add(InitBlocks.blockFeeder); + this.add(InitBlocks.blockCompost); + this.add(InitBlocks.blockGiantChest); + this.add(InitBlocks.blockCanolaPress); + this.add(InitBlocks.blockFermentingBarrel); - add(InitBlocks.blockTestifiBucksGreenWall); - add(InitBlocks.blockTestifiBucksWhiteWall); - add(InitBlocks.blockTestifiBucksGreenStairs); - add(InitBlocks.blockTestifiBucksWhiteStairs); - add(InitBlocks.blockTestifiBucksGreenSlab); - add(InitBlocks.blockTestifiBucksWhiteSlab); - add(InitBlocks.blockTestifiBucksGreenFence); - add(InitBlocks.blockTestifiBucksWhiteFence); + this.add(InitBlocks.blockTestifiBucksGreenWall); + this.add(InitBlocks.blockTestifiBucksWhiteWall); + this.add(InitBlocks.blockTestifiBucksGreenStairs); + this.add(InitBlocks.blockTestifiBucksWhiteStairs); + this.add(InitBlocks.blockTestifiBucksGreenSlab); + this.add(InitBlocks.blockTestifiBucksWhiteSlab); + this.add(InitBlocks.blockTestifiBucksGreenFence); + this.add(InitBlocks.blockTestifiBucksWhiteFence); - add(InitBlocks.blockQuartzWall); - add(InitBlocks.blockQuartzStair); - add(InitBlocks.blockQuartzSlab); - add(InitBlocks.blockChiseledQuartzWall); - add(InitBlocks.blockChiseledQuartzStair); - add(InitBlocks.blockChiseledQuartzSlab); - add(InitBlocks.blockPillarQuartzWall); - add(InitBlocks.blockPillarQuartzStair); - add(InitBlocks.blockPillarQuartzSlab); + this.add(InitBlocks.blockQuartzWall); + this.add(InitBlocks.blockQuartzStair); + this.add(InitBlocks.blockQuartzSlab); + this.add(InitBlocks.blockChiseledQuartzWall); + this.add(InitBlocks.blockChiseledQuartzStair); + this.add(InitBlocks.blockChiseledQuartzSlab); + this.add(InitBlocks.blockPillarQuartzWall); + this.add(InitBlocks.blockPillarQuartzStair); + this.add(InitBlocks.blockPillarQuartzSlab); - add(InitBlocks.blockColoredLamp); - add(InitBlocks.blockColoredLampOn); - add(InitBlocks.blockLampPowerer); - add(InitBlocks.blockTreasureChest); + this.add(InitBlocks.blockColoredLamp); + this.add(InitBlocks.blockColoredLampOn); + this.add(InitBlocks.blockLampPowerer); + this.add(InitBlocks.blockTreasureChest); - add(InitBlocks.blockBlackLotus); + this.add(InitBlocks.blockBlackLotus); - add(InitItems.itemColorLens); - add(InitItems.itemExplosionLens); - add(InitItems.itemDamageLens); - add(InitItems.itemLaserWrench); - add(InitItems.itemCrateKeeper); - add(InitItems.itemChestToCrateUpgrade); + this.add(InitItems.itemColorLens); + this.add(InitItems.itemExplosionLens); + this.add(InitItems.itemDamageLens); + this.add(InitItems.itemLaserWrench); + this.add(InitItems.itemCrateKeeper); + this.add(InitItems.itemChestToCrateUpgrade); - add(InitItems.itemDrill); - add(InitItems.itemDrillUpgradeSpeed); - add(InitItems.itemDrillUpgradeSpeedII); - add(InitItems.itemDrillUpgradeSpeedIII); - add(InitItems.itemDrillUpgradeSilkTouch); - add(InitItems.itemDrillUpgradeFortune); - add(InitItems.itemDrillUpgradeFortuneII); - add(InitItems.itemDrillUpgradeThreeByThree); - add(InitItems.itemDrillUpgradeFiveByFive); - add(InitItems.itemDrillUpgradeBlockPlacing); - add(InitItems.itemBattery); - add(InitItems.itemBatteryDouble); - add(InitItems.itemBatteryTriple); - add(InitItems.itemBatteryQuadruple); - add(InitItems.itemBatteryQuintuple); - add(InitItems.itemTeleStaff); + this.add(InitItems.itemDrill); + this.add(InitItems.itemDrillUpgradeSpeed); + this.add(InitItems.itemDrillUpgradeSpeedII); + this.add(InitItems.itemDrillUpgradeSpeedIII); + this.add(InitItems.itemDrillUpgradeSilkTouch); + this.add(InitItems.itemDrillUpgradeFortune); + this.add(InitItems.itemDrillUpgradeFortuneII); + this.add(InitItems.itemDrillUpgradeThreeByThree); + this.add(InitItems.itemDrillUpgradeFiveByFive); + this.add(InitItems.itemDrillUpgradeBlockPlacing); + this.add(InitItems.itemBattery); + this.add(InitItems.itemBatteryDouble); + this.add(InitItems.itemBatteryTriple); + this.add(InitItems.itemBatteryQuadruple); + this.add(InitItems.itemBatteryQuintuple); + this.add(InitItems.itemTeleStaff); - add(InitItems.itemGrowthRing); - add(InitItems.itemMagnetRing); - add(InitItems.itemWaterRemovalRing); + this.add(InitItems.itemGrowthRing); + this.add(InitItems.itemMagnetRing); + this.add(InitItems.itemWaterRemovalRing); - add(InitItems.itemPhantomConnector); - add(InitItems.itemBucketCanolaOil); - add(InitItems.itemBucketOil); + this.add(InitItems.itemPhantomConnector); + this.add(InitItems.itemBucketCanolaOil); + this.add(InitItems.itemBucketOil); - add(InitItems.itemWingsOfTheBats); + this.add(InitItems.itemWingsOfTheBats); - add(InitItems.itemCoffeeSeed); - add(InitItems.itemCoffeeBean); - add(InitItems.itemRiceSeed); - add(InitItems.itemCanolaSeed); - add(InitItems.itemFlaxSeed); - add(InitItems.itemHairyBall); - add(InitItems.itemMisc); - add(InitItems.itemResonantRice); - add(InitItems.itemFertilizer); + this.add(InitItems.itemCoffeeSeed); + this.add(InitItems.itemCoffeeBean); + this.add(InitItems.itemRiceSeed); + this.add(InitItems.itemCanolaSeed); + this.add(InitItems.itemFlaxSeed); + this.add(InitItems.itemHairyBall); + this.add(InitItems.itemMisc); + this.add(InitItems.itemResonantRice); + this.add(InitItems.itemFertilizer); - add(InitItems.itemCoffee); - add(InitItems.itemFoods); - add(InitItems.itemKnife); - add(InitItems.itemCrafterOnAStick); - add(InitItems.itemDust); - add(InitItems.itemSolidifiedExperience); - add(InitItems.itemLeafBlower); - add(InitItems.itemLeafBlowerAdvanced); + this.add(InitItems.itemCoffee); + this.add(InitItems.itemFoods); + this.add(InitItems.itemKnife); + this.add(InitItems.itemCrafterOnAStick); + this.add(InitItems.itemDust); + this.add(InitItems.itemSolidifiedExperience); + this.add(InitItems.itemLeafBlower); + this.add(InitItems.itemLeafBlowerAdvanced); - add(InitItems.woodenPaxel); - add(InitItems.stonePaxel); - add(InitItems.ironPaxel); - add(InitItems.goldPaxel); - add(InitItems.diamondPaxel); - add(InitItems.emeraldPaxel); - add(InitItems.obsidianPaxel); - add(InitItems.quartzPaxel); - add(InitItems.itemPaxelCrystalRed); - add(InitItems.itemPaxelCrystalBlue); - add(InitItems.itemPaxelCrystalLightBlue); - add(InitItems.itemPaxelCrystalBlack); - add(InitItems.itemPaxelCrystalGreen); - add(InitItems.itemPaxelCrystalWhite); + this.add(InitItems.woodenPaxel); + this.add(InitItems.stonePaxel); + this.add(InitItems.ironPaxel); + this.add(InitItems.goldPaxel); + this.add(InitItems.diamondPaxel); + this.add(InitItems.emeraldPaxel); + this.add(InitItems.obsidianPaxel); + this.add(InitItems.quartzPaxel); + this.add(InitItems.itemPaxelCrystalRed); + this.add(InitItems.itemPaxelCrystalBlue); + this.add(InitItems.itemPaxelCrystalLightBlue); + this.add(InitItems.itemPaxelCrystalBlack); + this.add(InitItems.itemPaxelCrystalGreen); + this.add(InitItems.itemPaxelCrystalWhite); InitForeignPaxels.addToCreativeTab(); - add(InitBlocks.blockCrystal); - add(InitItems.itemCrystal); + this.add(InitBlocks.blockCrystal); + this.add(InitItems.itemCrystal); - add(InitItems.itemJams); + this.add(InitItems.itemJams); - add(InitItems.itemPotionRing); - add(InitItems.itemPotionRingAdvanced); + this.add(InitItems.itemPotionRing); + this.add(InitItems.itemPotionRingAdvanced); - add(InitItems.itemPickaxeQuartz); - add(InitItems.itemSwordQuartz); - add(InitItems.itemAxeQuartz); - add(InitItems.itemShovelQuartz); - add(InitItems.itemHoeQuartz); + this.add(InitItems.itemPickaxeQuartz); + this.add(InitItems.itemSwordQuartz); + this.add(InitItems.itemAxeQuartz); + this.add(InitItems.itemShovelQuartz); + this.add(InitItems.itemHoeQuartz); - add(InitItems.itemHelmQuartz); - add(InitItems.itemChestQuartz); - add(InitItems.itemPantsQuartz); - add(InitItems.itemBootsQuartz); + this.add(InitItems.itemHelmQuartz); + this.add(InitItems.itemChestQuartz); + this.add(InitItems.itemPantsQuartz); + this.add(InitItems.itemBootsQuartz); - add(InitItems.itemPickaxeEmerald); - add(InitItems.itemSwordEmerald); - add(InitItems.itemAxeEmerald); - add(InitItems.itemShovelEmerald); - add(InitItems.itemHoeEmerald); + this.add(InitItems.itemPickaxeEmerald); + this.add(InitItems.itemSwordEmerald); + this.add(InitItems.itemAxeEmerald); + this.add(InitItems.itemShovelEmerald); + this.add(InitItems.itemHoeEmerald); - add(InitItems.itemHelmEmerald); - add(InitItems.itemChestEmerald); - add(InitItems.itemPantsEmerald); - add(InitItems.itemBootsEmerald); + this.add(InitItems.itemHelmEmerald); + this.add(InitItems.itemChestEmerald); + this.add(InitItems.itemPantsEmerald); + this.add(InitItems.itemBootsEmerald); - add(InitItems.itemPickaxeObsidian); - add(InitItems.itemSwordObsidian); - add(InitItems.itemAxeObsidian); - add(InitItems.itemShovelObsidian); - add(InitItems.itemHoeObsidian); + this.add(InitItems.itemPickaxeObsidian); + this.add(InitItems.itemSwordObsidian); + this.add(InitItems.itemAxeObsidian); + this.add(InitItems.itemShovelObsidian); + this.add(InitItems.itemHoeObsidian); - add(InitItems.itemHelmObsidian); - add(InitItems.itemChestObsidian); - add(InitItems.itemPantsObsidian); - add(InitItems.itemBootsObsidian); + this.add(InitItems.itemHelmObsidian); + this.add(InitItems.itemChestObsidian); + this.add(InitItems.itemPantsObsidian); + this.add(InitItems.itemBootsObsidian); - add(InitItems.itemPickaxeCrystalRed); - add(InitItems.itemAxeCrystalRed); - add(InitItems.itemShovelCrystalRed); - add(InitItems.itemSwordCrystalRed); - add(InitItems.itemHoeCrystalRed); - add(InitItems.itemHelmCrystalRed); - add(InitItems.itemChestCrystalRed); - add(InitItems.itemPantsCrystalRed); - add(InitItems.itemBootsCrystalRed); + this.add(InitItems.itemPickaxeCrystalRed); + this.add(InitItems.itemAxeCrystalRed); + this.add(InitItems.itemShovelCrystalRed); + this.add(InitItems.itemSwordCrystalRed); + this.add(InitItems.itemHoeCrystalRed); + this.add(InitItems.itemHelmCrystalRed); + this.add(InitItems.itemChestCrystalRed); + this.add(InitItems.itemPantsCrystalRed); + this.add(InitItems.itemBootsCrystalRed); - add(InitItems.itemPickaxeCrystalBlue); - add(InitItems.itemAxeCrystalBlue); - add(InitItems.itemShovelCrystalBlue); - add(InitItems.itemSwordCrystalBlue); - add(InitItems.itemHoeCrystalBlue); - add(InitItems.itemHelmCrystalBlue); - add(InitItems.itemChestCrystalBlue); - add(InitItems.itemPantsCrystalBlue); - add(InitItems.itemBootsCrystalBlue); + this.add(InitItems.itemPickaxeCrystalBlue); + this.add(InitItems.itemAxeCrystalBlue); + this.add(InitItems.itemShovelCrystalBlue); + this.add(InitItems.itemSwordCrystalBlue); + this.add(InitItems.itemHoeCrystalBlue); + this.add(InitItems.itemHelmCrystalBlue); + this.add(InitItems.itemChestCrystalBlue); + this.add(InitItems.itemPantsCrystalBlue); + this.add(InitItems.itemBootsCrystalBlue); - add(InitItems.itemPickaxeCrystalLightBlue); - add(InitItems.itemAxeCrystalLightBlue); - add(InitItems.itemShovelCrystalLightBlue); - add(InitItems.itemSwordCrystalLightBlue); - add(InitItems.itemHoeCrystalLightBlue); - add(InitItems.itemHelmCrystalLightBlue); - add(InitItems.itemChestCrystalLightBlue); - add(InitItems.itemPantsCrystalLightBlue); - add(InitItems.itemBootsCrystalLightBlue); + this.add(InitItems.itemPickaxeCrystalLightBlue); + this.add(InitItems.itemAxeCrystalLightBlue); + this.add(InitItems.itemShovelCrystalLightBlue); + this.add(InitItems.itemSwordCrystalLightBlue); + this.add(InitItems.itemHoeCrystalLightBlue); + this.add(InitItems.itemHelmCrystalLightBlue); + this.add(InitItems.itemChestCrystalLightBlue); + this.add(InitItems.itemPantsCrystalLightBlue); + this.add(InitItems.itemBootsCrystalLightBlue); - add(InitItems.itemPickaxeCrystalBlack); - add(InitItems.itemAxeCrystalBlack); - add(InitItems.itemShovelCrystalBlack); - add(InitItems.itemSwordCrystalBlack); - add(InitItems.itemHoeCrystalBlack); - add(InitItems.itemHelmCrystalBlack); - add(InitItems.itemChestCrystalBlack); - add(InitItems.itemPantsCrystalBlack); - add(InitItems.itemBootsCrystalBlack); + this.add(InitItems.itemPickaxeCrystalBlack); + this.add(InitItems.itemAxeCrystalBlack); + this.add(InitItems.itemShovelCrystalBlack); + this.add(InitItems.itemSwordCrystalBlack); + this.add(InitItems.itemHoeCrystalBlack); + this.add(InitItems.itemHelmCrystalBlack); + this.add(InitItems.itemChestCrystalBlack); + this.add(InitItems.itemPantsCrystalBlack); + this.add(InitItems.itemBootsCrystalBlack); - add(InitItems.itemPickaxeCrystalGreen); - add(InitItems.itemAxeCrystalGreen); - add(InitItems.itemShovelCrystalGreen); - add(InitItems.itemSwordCrystalGreen); - add(InitItems.itemHoeCrystalGreen); - add(InitItems.itemHelmCrystalGreen); - add(InitItems.itemChestCrystalGreen); - add(InitItems.itemPantsCrystalGreen); - add(InitItems.itemBootsCrystalGreen); + this.add(InitItems.itemPickaxeCrystalGreen); + this.add(InitItems.itemAxeCrystalGreen); + this.add(InitItems.itemShovelCrystalGreen); + this.add(InitItems.itemSwordCrystalGreen); + this.add(InitItems.itemHoeCrystalGreen); + this.add(InitItems.itemHelmCrystalGreen); + this.add(InitItems.itemChestCrystalGreen); + this.add(InitItems.itemPantsCrystalGreen); + this.add(InitItems.itemBootsCrystalGreen); - add(InitItems.itemPickaxeCrystalWhite); - add(InitItems.itemAxeCrystalWhite); - add(InitItems.itemShovelCrystalWhite); - add(InitItems.itemSwordCrystalWhite); - add(InitItems.itemHoeCrystalWhite); - add(InitItems.itemHelmCrystalWhite); - add(InitItems.itemChestCrystalWhite); - add(InitItems.itemPantsCrystalWhite); - add(InitItems.itemBootsCrystalWhite); + this.add(InitItems.itemPickaxeCrystalWhite); + this.add(InitItems.itemAxeCrystalWhite); + this.add(InitItems.itemShovelCrystalWhite); + this.add(InitItems.itemSwordCrystalWhite); + this.add(InitItems.itemHoeCrystalWhite); + this.add(InitItems.itemHelmCrystalWhite); + this.add(InitItems.itemChestCrystalWhite); + this.add(InitItems.itemPantsCrystalWhite); + this.add(InitItems.itemBootsCrystalWhite); } public void add(Item item){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index 057f060f2..cd748a82c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -42,11 +42,11 @@ public class JamVillagerTradeHandler{ public void addWants(String oredictName, int minSize, int maxSize){ ArrayList stacks = (ArrayList)OreDictionary.getOres(oredictName); - trades.add(new Trade(stacks, minSize, maxSize)); + this.trades.add(new Trade(stacks, minSize, maxSize)); } public void addWants(ItemStack stack, int minSize, int maxSize){ - trades.add(new Trade(stack, minSize, maxSize)); + this.trades.add(new Trade(stack, minSize, maxSize)); } //TODO Fix the Villager diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 31a350778..9203e8194 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -46,13 +46,13 @@ public class OreGen implements IWorldGenerator{ if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimension()) < 0){ switch(world.provider.getDimension()){ case -1: - generateNether(world, random, chunkX*16, chunkZ*16); + this.generateNether(world, random, chunkX*16, chunkZ*16); //case 0: // generateSurface(world, random, chunkX*16, chunkZ*16); case 1: - generateEnd(world, random, chunkX*16, chunkZ*16); + this.generateEnd(world, random, chunkX*16, chunkZ*16); default: - generateSurface(world, random, chunkX*16, chunkZ*16); + this.generateSurface(world, random, chunkX*16, chunkZ*16); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index d9e5a4824..9aa870112 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -34,18 +34,18 @@ public class ContainerCoffeeMachine extends Container{ public ContainerCoffeeMachine(InventoryPlayer inventory, TileEntityBase tile){ this.machine = (TileEntityCoffeeMachine)tile; - this.addSlotToContainer(new Slot(machine, TileEntityCoffeeMachine.SLOT_COFFEE_BEANS, 37, 6)); - this.addSlotToContainer(new Slot(machine, TileEntityCoffeeMachine.SLOT_INPUT, 80, 42)); - this.addSlotToContainer(new SlotOutput(machine, TileEntityCoffeeMachine.SLOT_OUTPUT, 80, 73)); + this.addSlotToContainer(new Slot(this.machine, TileEntityCoffeeMachine.SLOT_COFFEE_BEANS, 37, 6)); + this.addSlotToContainer(new Slot(this.machine, TileEntityCoffeeMachine.SLOT_INPUT, 80, 42)); + this.addSlotToContainer(new SlotOutput(this.machine, TileEntityCoffeeMachine.SLOT_OUTPUT, 80, 73)); for(int i = 0; i < 4; i++){ for(int j = 0; j < 2; j++){ - this.addSlotToContainer(new Slot(machine, j+i*2+3, 125+j*18, 6+i*18)); + this.addSlotToContainer(new Slot(this.machine, j+i*2+3, 125+j*18, 6+i*18)); } } - this.addSlotToContainer(new Slot(machine, TileEntityCoffeeMachine.SLOT_WATER_INPUT, 26, 73)); - this.addSlotToContainer(new SlotOutput(machine, TileEntityCoffeeMachine.SLOT_WATER_OUTPUT, 45, 73)); + this.addSlotToContainer(new Slot(this.machine, TileEntityCoffeeMachine.SLOT_WATER_INPUT, 26, 73)); + this.addSlotToContainer(new SlotOutput(this.machine, TileEntityCoffeeMachine.SLOT_WATER_OUTPUT, 45, 73)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -64,7 +64,7 @@ public class ContainerCoffeeMachine extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index a7ee9fb02..a9277b1e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -36,7 +36,7 @@ public class ContainerDrill extends Container{ this.inventory = inventory; for(int i = 0; i < SLOT_AMOUNT; i++){ - this.addSlotToContainer(new Slot(drillInventory, i, 44+i*18, 19){ + this.addSlotToContainer(new Slot(ContainerDrill.this.drillInventory, i, 44+i*18, 19){ @Override public boolean isItemValid(ItemStack stack){ return stack.getItem() instanceof ItemDrillUpgrade || stack.getItem() instanceof IEnergyContainerItem; @@ -122,7 +122,7 @@ public class ContainerDrill extends Container{ @Override public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ - if(clickTypeIn == ClickType.SWAP && dragType == inventory.currentItem){ + if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){ return null; } else{ @@ -132,9 +132,9 @@ public class ContainerDrill extends Container{ @Override public void onContainerClosed(EntityPlayer player){ - ItemStack stack = inventory.getCurrentItem(); + ItemStack stack = this.inventory.getCurrentItem(); if(stack != null && stack.getItem() instanceof ItemDrill){ - ((ItemDrill)stack.getItem()).writeSlotsToNBT(this.drillInventory.slots, inventory.getCurrentItem()); + ((ItemDrill)stack.getItem()).writeSlotsToNBT(this.drillInventory.slots, this.inventory.getCurrentItem()); } super.onContainerClosed(player); } @@ -221,31 +221,31 @@ public class ContainerDrill extends Container{ @Override public int getSizeInventory(){ - return slots.length; + return this.slots.length; } @Override public ItemStack getStackInSlot(int i){ if(i < this.getSizeInventory()){ - return slots[i]; + return this.slots[i]; } return null; } @Override public ItemStack decrStackSize(int i, int j){ - if(slots[i] != null){ + if(this.slots[i] != null){ ItemStack stackAt; - if(slots[i].stackSize <= j){ - stackAt = slots[i]; - slots[i] = null; + if(this.slots[i].stackSize <= j){ + stackAt = this.slots[i]; + this.slots[i] = null; this.markDirty(); return stackAt; } else{ - stackAt = slots[i].splitStack(j); - if(slots[i].stackSize == 0){ - slots[i] = null; + stackAt = this.slots[i].splitStack(j); + if(this.slots[i].stackSize == 0){ + this.slots[i] = null; } this.markDirty(); return stackAt; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 0ff708024..7dcc3499a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -29,8 +29,8 @@ public class ContainerFluidCollector extends Container{ public ContainerFluidCollector(InventoryPlayer inventory, TileEntityBase tile){ this.collector = (TileEntityFluidCollector)tile; - this.addSlotToContainer(new Slot(collector, 0, 90, 73)); - this.addSlotToContainer(new SlotOutput(collector, 1, 90, 42)); + this.addSlotToContainer(new Slot(this.collector, 0, 90, 73)); + this.addSlotToContainer(new SlotOutput(this.collector, 1, 90, 42)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -49,7 +49,7 @@ public class ContainerFluidCollector extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index a0d3a606e..366f289a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -108,7 +108,7 @@ public class ContainerInputter extends Container{ public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ //Calls the Filter's SlotClick function - return ((SlotFilter)getSlot(slotId)).slotClick(player); + return ((SlotFilter)this.getSlot(slotId)).slotClick(player); } else{ return super.slotClick(slotId, dragType, clickTypeIn, player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 5ff272472..475fd3add 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -103,7 +103,7 @@ public class ContainerRangedCollector extends Container{ public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ //Calls the Filter's SlotClick function - return ((SlotFilter)getSlot(slotId)).slotClick(player); + return ((SlotFilter)this.getSlot(slotId)).slotClick(player); } else{ return super.slotClick(slotId, dragType, clickTypeIn, player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index 961b346f2..ed088c3c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -28,7 +28,7 @@ public class ContainerXPSolidifier extends Container{ public ContainerXPSolidifier(InventoryPlayer inventory, TileEntityBase tile){ this.solidifier = (TileEntityXPSolidifier)tile; - this.addSlotToContainer(new SlotOutput(solidifier, 0, 80, 8)); + this.addSlotToContainer(new SlotOutput(this.solidifier, 0, 80, 8)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -47,7 +47,7 @@ public class ContainerXPSolidifier extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java index 413ff5cb3..9cc21ac2a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java @@ -41,7 +41,7 @@ public class GuiBreaker extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.breaker.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.breaker.getName()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java index 8594f6447..67b8739da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java @@ -41,19 +41,19 @@ public class GuiCanolaPress extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text1 = this.press.storage.getEnergyStored()+"/"+this.press.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88){ + if(x >= this.guiLeft+43 && y >= this.guiTop+6 && x <= this.guiLeft+58 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text1), x, y); } String text2 = StringUtil.getFluidInfo(this.press.tank); - if(x >= guiLeft+117 && y >= guiTop+6 && x <= guiLeft+132 && y <= guiTop+88){ + if(x >= this.guiLeft+117 && y >= this.guiTop+6 && x <= this.guiLeft+132 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text2), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.press.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press.getName()); } @Override @@ -68,17 +68,17 @@ public class GuiCanolaPress extends GuiContainer{ if(this.press.storage.getEnergyStored() > 0){ int i = this.press.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 29, 16, i); + this.drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 29, 16, i); } if(this.press.tank.getFluidAmount() > 0){ int i = this.press.getTankScaled(83); - drawTexturedModalRect(this.guiLeft+117, this.guiTop+89-i, 192, 29, 16, i); + this.drawTexturedModalRect(this.guiLeft+117, this.guiTop+89-i, 192, 29, 16, i); } if(this.press.currentProcessTime > 0){ int i = this.press.getProcessScaled(29); - drawTexturedModalRect(this.guiLeft+83, this.guiTop+32, 176, 0, 12, i); + this.drawTexturedModalRect(this.guiLeft+83, this.guiTop+32, 176, 0, 12, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java index a0d541a9d..bfd37e45f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java @@ -40,14 +40,14 @@ public class GuiCoalGenerator extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text1 = this.generator.storage.getEnergyStored()+"/"+this.generator.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88){ + if(x >= this.guiLeft+43 && y >= this.guiTop+6 && x <= this.guiLeft+58 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text1), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.generator.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator.getName()); } @Override @@ -62,12 +62,12 @@ public class GuiCoalGenerator extends GuiContainer{ if(this.generator.storage.getEnergyStored() > 0){ int i = this.generator.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i); + this.drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i); } if(this.generator.currentBurnTime > 0){ int i = this.generator.getBurningScaled(13); - this.drawTexturedModalRect(guiLeft+87, guiTop+27+12-i, 176, 96-i, 14, i); + this.drawTexturedModalRect(this.guiLeft+87, this.guiTop+27+12-i, 176, 96-i, 14, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 09e29f373..acaad95c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -56,7 +56,7 @@ public class GuiCoffeeMachine extends GuiContainer{ public void initGui(){ super.initGui(); - GuiButton buttonOkay = new GuiButton(0, guiLeft+60, guiTop+11, 58, 20, StringUtil.localize("info."+ModUtil.MOD_ID+".gui.ok")); + GuiButton buttonOkay = new GuiButton(0, this.guiLeft+60, this.guiTop+11, 58, 20, StringUtil.localize("info."+ModUtil.MOD_ID+".gui.ok")); this.buttonList.add(buttonOkay); } @@ -65,23 +65,23 @@ public class GuiCoffeeMachine extends GuiContainer{ super.drawScreen(x, y, f); String text1 = this.machine.storage.getEnergyStored()+"/"+this.machine.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+16 && y >= guiTop+5 && x <= guiLeft+23 && y <= guiTop+89){ + if(x >= this.guiLeft+16 && y >= this.guiTop+5 && x <= this.guiLeft+23 && y <= this.guiTop+89){ this.drawHoveringText(Collections.singletonList(text1), x, y); } String text3 = StringUtil.getFluidInfo(this.machine.tank); - if(x >= guiLeft+27 && y >= guiTop+5 && x <= guiLeft+33 && y <= guiTop+70){ + if(x >= this.guiLeft+27 && y >= this.guiTop+5 && x <= this.guiLeft+33 && y <= this.guiTop+70){ this.drawHoveringText(Collections.singletonList(text3), x, y); } String text2 = this.machine.coffeeCacheAmount+"/"+TileEntityCoffeeMachine.COFFEE_CACHE_MAX_AMOUNT+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.coffee"); - if(x >= guiLeft+40 && y >= guiTop+25 && x <= guiLeft+49 && y <= guiTop+56){ + if(x >= this.guiLeft+40 && y >= this.guiTop+25 && x <= this.guiLeft+49 && y <= this.guiTop+56){ this.drawHoveringText(Collections.singletonList(text2), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.machine.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.machine.getName()); } @Override @@ -96,29 +96,29 @@ public class GuiCoffeeMachine extends GuiContainer{ if(this.machine.storage.getEnergyStored() > 0){ int i = this.machine.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+17, this.guiTop+89-i, 176, 0, 6, i); + this.drawTexturedModalRect(this.guiLeft+17, this.guiTop+89-i, 176, 0, 6, i); } if(this.machine.tank.getFluidAmount() > 0){ int i = this.machine.getWaterScaled(64); - drawTexturedModalRect(this.guiLeft+27, this.guiTop+70-i, 182, 0, 6, i); + this.drawTexturedModalRect(this.guiLeft+27, this.guiTop+70-i, 182, 0, 6, i); } if(this.machine.coffeeCacheAmount > 0){ int i = this.machine.getCoffeeScaled(30); - drawTexturedModalRect(this.guiLeft+41, this.guiTop+56-i, 192, 0, 8, i); + this.drawTexturedModalRect(this.guiLeft+41, this.guiTop+56-i, 192, 0, 8, i); } if(this.machine.brewTime > 0){ int i = this.machine.getBrewScaled(23); - drawTexturedModalRect(this.guiLeft+53, this.guiTop+42, 192, 30, i, 16); + this.drawTexturedModalRect(this.guiLeft+53, this.guiTop+42, 192, 30, i, 16); int j = this.machine.getBrewScaled(26); - drawTexturedModalRect(this.guiLeft+99+25-j, this.guiTop+44, 192+25-j, 46, j, 12); + this.drawTexturedModalRect(this.guiLeft+99+25-j, this.guiTop+44, 192+25-j, 46, j, 12); } } @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(x, y, z, world, button.id, Minecraft.getMinecraft().thePlayer)); + PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java index 4d7032ffb..171c49262 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java @@ -34,7 +34,7 @@ public class GuiCrafter extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, "container."+ModUtil.MOD_ID+".crafting"); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".crafting"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java index f3dacb552..a769a1b36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java @@ -41,14 +41,14 @@ public class GuiDirectionalBreaker extends GuiContainer{ super.drawScreen(x, y, f); String text1 = this.breaker.storage.getEnergyStored()+"/"+this.breaker.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88){ + if(x >= this.guiLeft+43 && y >= this.guiTop+6 && x <= this.guiLeft+58 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text1), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.breaker.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.breaker.getName()); } @Override @@ -63,7 +63,7 @@ public class GuiDirectionalBreaker extends GuiContainer{ if(this.breaker.storage.getEnergyStored() > 0){ int i = this.breaker.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 29, 16, i); + this.drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 29, 16, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java index 9b30d6d8a..db2e1c464 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java @@ -33,7 +33,7 @@ public class GuiDrill extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, "container."+ModUtil.MOD_ID+".drill"); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".drill"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java index a015c2eef..fcf10d836 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java @@ -41,7 +41,7 @@ public class GuiDropper extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.dropper.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.dropper.getName()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java index 57e370a46..e84fb4eb6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java @@ -40,14 +40,14 @@ public class GuiEnergizer extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text1 = this.energizer.storage.getEnergyStored()+"/"+this.energizer.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+57 && y >= guiTop+6 && x <= guiLeft+72 && y <= guiTop+88){ + if(x >= this.guiLeft+57 && y >= this.guiTop+6 && x <= this.guiLeft+72 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text1), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.energizer.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.energizer.getName()); } @Override @@ -62,7 +62,7 @@ public class GuiEnergizer extends GuiContainer{ if(this.energizer.storage.getEnergyStored() > 0){ int i = this.energizer.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+57, this.guiTop+89-i, 176, 0, 16, i); + this.drawTexturedModalRect(this.guiLeft+57, this.guiTop+89-i, 176, 0, 16, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java index 866c82aa0..c82acebd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java @@ -40,14 +40,14 @@ public class GuiEnervator extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text1 = this.enervator.storage.getEnergyStored()+"/"+this.enervator.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+57 && y >= guiTop+6 && x <= guiLeft+72 && y <= guiTop+88){ + if(x >= this.guiLeft+57 && y >= this.guiTop+6 && x <= this.guiLeft+72 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text1), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.enervator.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.enervator.getName()); } @Override @@ -62,7 +62,7 @@ public class GuiEnervator extends GuiContainer{ if(this.enervator.storage.getEnergyStored() > 0){ int i = this.enervator.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+57, this.guiTop+89-i, 176, 0, 16, i); + this.drawTexturedModalRect(this.guiLeft+57, this.guiTop+89-i, 176, 0, 16, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java index 549f7bd9d..5aa8d3ca9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java @@ -41,7 +41,7 @@ public class GuiFeeder extends GuiContainer{ @Override public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); - if(x >= guiLeft+69 && y >= guiTop+30 && x <= guiLeft+69+10 && y <= guiTop+30+10){ + if(x >= this.guiLeft+69 && y >= this.guiTop+30 && x <= this.guiLeft+69+10 && y <= this.guiTop+30+10){ String[] array = new String[]{(this.tileFeeder.currentAnimalAmount+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.animals")), ((this.tileFeeder.currentAnimalAmount >= 2 && this.tileFeeder.currentAnimalAmount < TileEntityFeeder.THRESHOLD) ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.enoughToBreed") : (this.tileFeeder.currentAnimalAmount >= TileEntityFeeder.THRESHOLD ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.tooMany") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.notEnough")))}; this.drawHoveringText(Arrays.asList(array), x, y); } @@ -49,7 +49,7 @@ public class GuiFeeder extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileFeeder.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileFeeder.getName()); } @Override @@ -62,15 +62,15 @@ public class GuiFeeder extends GuiContainer{ if(this.tileFeeder.currentTimer > 0){ int i = this.tileFeeder.getCurrentTimerToScale(20); - this.drawTexturedModalRect(guiLeft+85, guiTop+42-i, 181, 19+19-i, 6, 20); + this.drawTexturedModalRect(this.guiLeft+85, this.guiTop+42-i, 181, 19+19-i, 6, 20); } if(this.tileFeeder.currentAnimalAmount >= 2 && this.tileFeeder.currentAnimalAmount < TileEntityFeeder.THRESHOLD){ - this.drawTexturedModalRect(guiLeft+70, guiTop+31, 192, 16, 8, 8); + this.drawTexturedModalRect(this.guiLeft+70, this.guiTop+31, 192, 16, 8, 8); } if(this.tileFeeder.currentAnimalAmount >= TileEntityFeeder.THRESHOLD){ - this.drawTexturedModalRect(guiLeft+70, guiTop+31, 192, 24, 8, 8); + this.drawTexturedModalRect(this.guiLeft+70, this.guiTop+31, 192, 24, 8, 8); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java index 543f88437..061999f80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java @@ -42,19 +42,19 @@ public class GuiFermentingBarrel extends GuiContainer{ super.drawScreen(x, y, f); String text1 = StringUtil.getFluidInfo(this.press.canolaTank); - if(x >= guiLeft+61 && y >= guiTop+6 && x <= guiLeft+76 && y <= guiTop+88){ + if(x >= this.guiLeft+61 && y >= this.guiTop+6 && x <= this.guiLeft+76 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text1), x, y); } String text2 = StringUtil.getFluidInfo(this.press.oilTank); - if(x >= guiLeft+99 && y >= guiTop+6 && x <= guiLeft+114 && y <= guiTop+88){ + if(x >= this.guiLeft+99 && y >= this.guiTop+6 && x <= this.guiLeft+114 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text2), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.press.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press.getName()); } @Override @@ -69,17 +69,17 @@ public class GuiFermentingBarrel extends GuiContainer{ if(this.press.canolaTank.getFluidAmount() > 0){ int i = this.press.getCanolaTankScaled(83); - drawTexturedModalRect(this.guiLeft+61, this.guiTop+89-i, 192, 29, 16, i); + this.drawTexturedModalRect(this.guiLeft+61, this.guiTop+89-i, 192, 29, 16, i); } if(this.press.oilTank.getFluidAmount() > 0){ int i = this.press.getOilTankScaled(83); - drawTexturedModalRect(this.guiLeft+99, this.guiTop+89-i, 176, 29, 16, i); + this.drawTexturedModalRect(this.guiLeft+99, this.guiTop+89-i, 176, 29, 16, i); } if(this.press.currentProcessTime > 0){ int i = this.press.getProcessScaled(29); - drawTexturedModalRect(this.guiLeft+82, this.guiTop+34, 176, 0, 12, i); + this.drawTexturedModalRect(this.guiLeft+82, this.guiTop+34, 176, 0, 12, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java index bf3aedf77..3644aa6ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java @@ -42,14 +42,14 @@ public class GuiFluidCollector extends GuiContainer{ super.drawScreen(x, y, f); String text2 = StringUtil.getFluidInfo(this.collector.tank); - if(x >= guiLeft+68 && y >= guiTop+6 && x <= guiLeft+83 && y <= guiTop+88){ + if(x >= this.guiLeft+68 && y >= this.guiTop+6 && x <= this.guiLeft+83 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text2), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.collector.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector.getName()); } @Override @@ -64,7 +64,7 @@ public class GuiFluidCollector extends GuiContainer{ if(this.collector.tank.getFluidAmount() > 0){ int i = this.collector.getTankScaled(83); - drawTexturedModalRect(this.guiLeft+68, this.guiTop+89-i, 176, 0, 16, i); + this.drawTexturedModalRect(this.guiLeft+68, this.guiTop+89-i, 176, 0, 16, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java index a821f0a28..436c2e602 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java @@ -40,14 +40,14 @@ public class GuiFurnaceDouble extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text = this.tileFurnace.storage.getEnergyStored()+"/"+this.tileFurnace.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+28 && y >= guiTop+6 && x <= guiLeft+43 && y <= guiTop+88){ + if(x >= this.guiLeft+28 && y >= this.guiTop+6 && x <= this.guiLeft+43 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileFurnace.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileFurnace.getName()); } @Override @@ -62,7 +62,7 @@ public class GuiFurnaceDouble extends GuiContainer{ if(this.tileFurnace.storage.getEnergyStored() > 0){ int i = this.tileFurnace.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+28, this.guiTop+89-i, 176, 44, 16, i); + this.drawTexturedModalRect(this.guiLeft+28, this.guiTop+89-i, 176, 44, 16, i); } if(this.tileFurnace.firstSmeltTime > 0){ int i = this.tileFurnace.getFirstTimeToScale(23); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index 87acd5918..d6c673f30 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -38,7 +38,7 @@ public class GuiGiantChest extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.chest.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.chest.getName()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java index db7c2e000..2c0abe989 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java @@ -47,14 +47,14 @@ public class GuiGrinder extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text = this.tileGrinder.storage.getEnergyStored()+"/"+this.tileGrinder.storage.getMaxEnergyStored()+" RF"; - if((this.isDouble && x >= guiLeft+14 && y >= guiTop+6 && x <= guiLeft+29 && y <= guiTop+88) || (!this.isDouble && x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88)){ + if((this.isDouble && x >= this.guiLeft+14 && y >= this.guiTop+6 && x <= this.guiLeft+29 && y <= this.guiTop+88) || (!this.isDouble && x >= this.guiLeft+43 && y >= this.guiTop+6 && x <= this.guiLeft+58 && y <= this.guiTop+88)){ this.drawHoveringText(Collections.singletonList(text), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileGrinder.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileGrinder.getName()); } @Override @@ -69,11 +69,11 @@ public class GuiGrinder extends GuiContainer{ if(this.tileGrinder.storage.getEnergyStored() > 0){ int i = this.tileGrinder.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+(isDouble ? 14 : 43), this.guiTop+89-i, 176, (isDouble ? 44 : 23), 16, i); + this.drawTexturedModalRect(this.guiLeft+(this.isDouble ? 14 : 43), this.guiTop+89-i, 176, (this.isDouble ? 44 : 23), 16, i); } if(this.tileGrinder.firstCrushTime > 0){ int i = this.tileGrinder.getFirstTimeToScale(23); - this.drawTexturedModalRect(this.guiLeft+(isDouble ? 51 : 80), this.guiTop+40, 176, 0, 24, i); + this.drawTexturedModalRect(this.guiLeft+(this.isDouble ? 51 : 80), this.guiTop+40, 176, 0, 24, i); } if(this.isDouble){ if(this.tileGrinder.secondCrushTime > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 2608f88b0..10ae2acfb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -80,39 +80,39 @@ public class GuiInputter extends GuiContainer{ public void initGui(){ super.initGui(); - this.fieldPullStart = new GuiTextField(3000, this.fontRendererObj, guiLeft+13, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); + this.fieldPullStart = new GuiTextField(3000, this.fontRendererObj, this.guiLeft+13, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); this.fieldPullStart.setMaxStringLength(4); this.fieldPullStart.setEnableBackgroundDrawing(false); - this.fieldPullEnd = new GuiTextField(3001, this.fontRendererObj, guiLeft+50, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); + this.fieldPullEnd = new GuiTextField(3001, this.fontRendererObj, this.guiLeft+50, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); this.fieldPullEnd.setMaxStringLength(4); this.fieldPullEnd.setEnableBackgroundDrawing(false); - this.fieldPutStart = new GuiTextField(3002, this.fontRendererObj, guiLeft+98, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); + this.fieldPutStart = new GuiTextField(3002, this.fontRendererObj, this.guiLeft+98, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); this.fieldPutStart.setMaxStringLength(4); this.fieldPutStart.setEnableBackgroundDrawing(false); - this.fieldPutEnd = new GuiTextField(3004, this.fontRendererObj, guiLeft+135, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); + this.fieldPutEnd = new GuiTextField(3004, this.fontRendererObj, this.guiLeft+135, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); this.fieldPutEnd.setMaxStringLength(4); this.fieldPutEnd.setEnableBackgroundDrawing(false); - SmallerButton buttonSidePutP = new SmallerButton(0, guiLeft+155, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), ">"); - SmallerButton buttonSidePutM = new SmallerButton(1, guiLeft+90, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), "<"); + SmallerButton buttonSidePutP = new SmallerButton(0, this.guiLeft+155, this.guiTop+43+(this.isAdvanced ? OFFSET_ADVANCED : 0), ">"); + SmallerButton buttonSidePutM = new SmallerButton(1, this.guiLeft+90, this.guiTop+43+(this.isAdvanced ? OFFSET_ADVANCED : 0), "<"); - SmallerButton buttonSidePullP = new SmallerButton(2, guiLeft+70, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), ">"); - SmallerButton buttonSidePullM = new SmallerButton(3, guiLeft+5, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), "<"); + SmallerButton buttonSidePullP = new SmallerButton(2, this.guiLeft+70, this.guiTop+43+(this.isAdvanced ? OFFSET_ADVANCED : 0), ">"); + SmallerButton buttonSidePullM = new SmallerButton(3, this.guiLeft+5, this.guiTop+43+(this.isAdvanced ? OFFSET_ADVANCED : 0), "<"); - whitelistPull = new SmallerButton(TileEntityInputter.WHITELIST_PULL_BUTTON_ID, guiLeft+3, guiTop+16, ""); - whitelistPut = new SmallerButton(TileEntityInputter.WHITELIST_PUT_BUTTON_ID, guiLeft+157, guiTop+16, ""); + this.whitelistPull = new SmallerButton(TileEntityInputter.WHITELIST_PULL_BUTTON_ID, this.guiLeft+3, this.guiTop+16, ""); + this.whitelistPut = new SmallerButton(TileEntityInputter.WHITELIST_PUT_BUTTON_ID, this.guiLeft+157, this.guiTop+16, ""); this.buttonList.add(buttonSidePutP); this.buttonList.add(buttonSidePullP); this.buttonList.add(buttonSidePutM); this.buttonList.add(buttonSidePullM); if(this.isAdvanced){ - this.buttonList.add(whitelistPut); - this.buttonList.add(whitelistPull); + this.buttonList.add(this.whitelistPut); + this.buttonList.add(this.whitelistPull); } - this.buttonList.add(new TinyButton(TileEntityInputter.OKAY_BUTTON_ID, guiLeft+84, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0))); + this.buttonList.add(new TinyButton(TileEntityInputter.OKAY_BUTTON_ID, this.guiLeft+84, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0))); } @Override @@ -126,14 +126,14 @@ public class GuiInputter extends GuiContainer{ if(this.isAdvanced){ List infoList = this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.whitelistInfo"), 200); String text1 = this.tileInputter.isPullWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); - if(x >= guiLeft+3 && y >= guiTop+16 && x <= guiLeft+18 && y <= guiTop+31){ + if(x >= this.guiLeft+3 && y >= this.guiTop+16 && x <= this.guiLeft+18 && y <= this.guiTop+31){ ArrayList list = new ArrayList(); list.add(TextFormatting.BOLD+text1); list.addAll(infoList); this.drawHoveringText(list, x, y); } String text2 = this.tileInputter.isPutWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); - if(x >= guiLeft+157 && y >= guiTop+16 && x <= guiLeft+172 && y <= guiTop+31){ + if(x >= this.guiLeft+157 && y >= this.guiTop+16 && x <= this.guiLeft+172 && y <= this.guiTop+31){ ArrayList list = new ArrayList(); list.add(TextFormatting.BOLD+text2); list.addAll(infoList); @@ -143,23 +143,23 @@ public class GuiInputter extends GuiContainer{ int newTopOffset = this.guiTop+(this.isAdvanced ? OFFSET_ADVANCED : 0); //Info Mode on! - if(x >= guiLeft+11 && y >= newTopOffset+65 && x <= guiLeft+11+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+11 && y >= newTopOffset+65 && x <= this.guiLeft+11+31 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull")), 200), x, y); } - if(x >= guiLeft+96 && y >= newTopOffset+65 && x <= guiLeft+96+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+96 && y >= newTopOffset+65 && x <= this.guiLeft+96+31 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put")), 200), x, y); } - if(x >= guiLeft+48 && y >= newTopOffset+65 && x <= guiLeft+48+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+48 && y >= newTopOffset+65 && x <= this.guiLeft+48+31 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull")), 200), x, y); } - if(x >= guiLeft+133 && y >= newTopOffset+65 && x <= guiLeft+133+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+133 && y >= newTopOffset+65 && x <= this.guiLeft+133+31 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put")), 200), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileInputter.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileInputter.getName()); } @Override @@ -167,21 +167,21 @@ public class GuiInputter extends GuiContainer{ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); - this.drawTexturedModalRect(this.guiLeft, this.guiTop+93+(isAdvanced ? OFFSET_ADVANCED : 0), 0, 0, 176, 86); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+93+(this.isAdvanced ? OFFSET_ADVANCED : 0), 0, 0, 176, 86); this.mc.getTextureManager().bindTexture(this.isAdvanced ? resLocAdvanced : resLoc); - this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93+(isAdvanced ? OFFSET_ADVANCED : 0)); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93+(this.isAdvanced ? OFFSET_ADVANCED : 0)); - this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull"), guiLeft+22+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put"), guiLeft+107+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull"), this.guiLeft+22+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put"), this.guiLeft+107+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(sideString[tileInputter.sideToPull+1], guiLeft+24+1, guiTop+45+3+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(sideString[tileInputter.sideToPut+1], guiLeft+109+1, guiTop+45+3+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(sideString[this.tileInputter.sideToPull+1], this.guiLeft+24+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(sideString[this.tileInputter.sideToPut+1], this.guiLeft+109+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutStart), guiLeft+99, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); - this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutEnd), guiLeft+136, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); - this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullStart), guiLeft+14, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); - this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullEnd), guiLeft+51, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); + this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutStart), this.guiLeft+99, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); + this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutEnd), this.guiLeft+136, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); + this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullStart), this.guiLeft+14, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); + this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullEnd), this.guiLeft+51, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); this.fieldPutStart.drawTextBox(); this.fieldPutEnd.drawTextBox(); @@ -238,13 +238,13 @@ public class GuiInputter extends GuiContainer{ public void setVariable(GuiTextField field, int sendInt){ if(!field.getText().isEmpty()){ - this.sendPacket(parse(field.getText()), sendInt); + this.sendPacket(this.parse(field.getText()), sendInt); field.setText(""); } } private void sendPacket(int text, int textID){ - PacketHandler.theNetwork.sendToServer(new PacketGuiNumber(x, y, z, world, text, textID, Minecraft.getMinecraft().thePlayer)); + PacketHandler.theNetwork.sendToServer(new PacketGuiNumber(this.x, this.y, this.z, this.world, text, textID, Minecraft.getMinecraft().thePlayer)); } private int parse(String theInt){ @@ -265,7 +265,7 @@ public class GuiInputter extends GuiContainer{ this.setVariable(this.fieldPullEnd, 3); } else{ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(x, y, z, world, button.id, Minecraft.getMinecraft().thePlayer)); + PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); } } @@ -280,7 +280,7 @@ public class GuiInputter extends GuiContainer{ @Override public void drawButton(Minecraft mc, int x, int y){ if(this.visible){ - mc.getTextureManager().bindTexture(resLoc); + mc.getTextureManager().bindTexture(this.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.hovered = x >= this.xPosition && y >= this.yPosition && x < this.xPosition+this.width && y < this.yPosition+this.height; int k = this.getHoverState(this.hovered); @@ -291,8 +291,8 @@ public class GuiInputter extends GuiContainer{ this.mouseDragged(mc, x, y); int color = 14737632; - if(packedFGColour != 0){ - color = packedFGColour; + if(this.packedFGColour != 0){ + color = this.packedFGColour; } else if(!this.enabled){ color = 10526880; @@ -317,7 +317,7 @@ public class GuiInputter extends GuiContainer{ @Override public void drawButton(Minecraft mc, int x, int y){ if(this.visible){ - mc.getTextureManager().bindTexture(resLoc); + mc.getTextureManager().bindTexture(this.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.hovered = x >= this.xPosition && y >= this.yPosition && x < this.xPosition+this.width && y < this.yPosition+this.height; int k = this.getHoverState(this.hovered); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index f3ab98257..bc65456c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -44,10 +44,10 @@ public class GuiMiner extends GuiContainer{ public void initGui(){ super.initGui(); - GuiButton buttonMode = new GuiButton(0, guiLeft+xSize/2-51, guiTop+75, 50, 20, "Mode"); + GuiButton buttonMode = new GuiButton(0, this.guiLeft+this.xSize/2-51, this.guiTop+75, 50, 20, "Mode"); this.buttonList.add(buttonMode); - GuiButton buttonReset = new GuiButton(1, guiLeft+xSize/2+1, guiTop+75, 50, 20, "Reset"); + GuiButton buttonReset = new GuiButton(1, this.guiLeft+this.xSize/2+1, this.guiTop+75, 50, 20, "Reset"); this.buttonList.add(buttonReset); } @@ -58,7 +58,7 @@ public class GuiMiner extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.miner.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.miner.getName()); } @Override @@ -72,11 +72,11 @@ public class GuiMiner extends GuiContainer{ this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); String mining = this.miner.onlyMineOres ? "Only Mining Ores" : "Mining Everything"; - this.fontRendererObj.drawString(mining, this.guiLeft+this.xSize/2-fontRendererObj.getStringWidth(mining)/2, guiTop+8, StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(mining, this.guiLeft+this.xSize/2-this.fontRendererObj.getStringWidth(mining)/2, this.guiTop+8, StringUtil.DECIMAL_COLOR_GRAY_TEXT); } @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(miner.getPos().getX(), miner.getPos().getY(), miner.getPos().getZ(), miner.getWorld(), button.id, Minecraft.getMinecraft().thePlayer)); + PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.miner.getPos().getX(), this.miner.getPos().getY(), this.miner.getPos().getZ(), this.miner.getWorld(), button.id, Minecraft.getMinecraft().thePlayer)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index 93dee8c80..14c78bf42 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -41,18 +41,18 @@ public class GuiOilGenerator extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text1 = this.generator.storage.getEnergyStored()+"/"+this.generator.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+43 && y >= guiTop+6 && x <= guiLeft+58 && y <= guiTop+88){ + if(x >= this.guiLeft+43 && y >= this.guiTop+6 && x <= this.guiLeft+58 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text1), x, y); } String text2 = StringUtil.getFluidInfo(this.generator.tank); - if(x >= guiLeft+117 && y >= guiTop+6 && x <= guiLeft+132 && y <= guiTop+88){ + if(x >= this.guiLeft+117 && y >= this.guiTop+6 && x <= this.guiLeft+132 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text2), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.generator.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator.getName()); } @Override @@ -67,17 +67,17 @@ public class GuiOilGenerator extends GuiContainer{ if(this.generator.storage.getEnergyStored() > 0){ int i = this.generator.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i); + this.drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i); } if(this.generator.tank.getFluidAmount() > 0){ int i = this.generator.getTankScaled(83); - drawTexturedModalRect(this.guiLeft+117, this.guiTop+89-i, 192, 0, 16, i); + this.drawTexturedModalRect(this.guiLeft+117, this.guiTop+89-i, 192, 0, 16, i); } if(this.generator.currentBurnTime > 0){ int i = this.generator.getBurningScaled(13); - this.drawTexturedModalRect(guiLeft+72, guiTop+44+12-i, 176, 96-i, 14, i); + this.drawTexturedModalRect(this.guiLeft+72, this.guiTop+44+12-i, 176, 96-i, 14, i); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java index 58b2a48ef..a6802ec58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java @@ -41,7 +41,7 @@ public class GuiPhantomPlacer extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.placer.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.placer.getName()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index 08ac4a7c1..965c6e391 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -59,7 +59,7 @@ public class GuiRangedCollector extends GuiContainer{ public void initGui(){ super.initGui(); - this.whitelistButton = new GuiInputter.SmallerButton(0, guiLeft+3, guiTop+16, ""); + this.whitelistButton = new GuiInputter.SmallerButton(0, this.guiLeft+3, this.guiTop+16, ""); this.buttonList.add(this.whitelistButton); } @@ -71,14 +71,14 @@ public class GuiRangedCollector extends GuiContainer{ this.whitelistButton.displayString = this.collector.isWhitelist ? "O" : "X"; String text1 = this.collector.isWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); - if(x >= guiLeft+3 && y >= guiTop+16 && x <= guiLeft+18 && y <= guiTop+31){ + if(x >= this.guiLeft+3 && y >= this.guiTop+16 && x <= this.guiLeft+18 && y <= this.guiTop+31){ this.drawHoveringText(Collections.singletonList(text1), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.collector.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector.getName()); } @Override @@ -94,6 +94,6 @@ public class GuiRangedCollector extends GuiContainer{ @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(x, y, z, world, button.id, Minecraft.getMinecraft().thePlayer)); + PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 6af9383b3..121498598 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -40,14 +40,14 @@ public class GuiRepairer extends GuiContainer{ public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); String text = this.tileRepairer.storage.getEnergyStored()+"/"+this.tileRepairer.storage.getMaxEnergyStored()+" RF"; - if(x >= guiLeft+28 && y >= guiTop+6 && x <= guiLeft+43 && y <= guiTop+88){ + if(x >= this.guiLeft+28 && y >= this.guiTop+6 && x <= this.guiLeft+43 && y <= this.guiTop+88){ this.drawHoveringText(Collections.singletonList(text), x, y); } } @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileRepairer.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileRepairer.getName()); } @Override @@ -62,7 +62,7 @@ public class GuiRepairer extends GuiContainer{ if(this.tileRepairer.storage.getEnergyStored() > 0){ int i = this.tileRepairer.getEnergyScaled(83); - drawTexturedModalRect(this.guiLeft+28, this.guiTop+89-i, 176, 44, 16, i); + this.drawTexturedModalRect(this.guiLeft+28, this.guiTop+89-i, 176, 44, 16, i); } if(TileEntityItemRepairer.canBeRepaired(this.tileRepairer.slots[TileEntityItemRepairer.SLOT_INPUT])){ int i = this.tileRepairer.getItemDamageToScale(22); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index cd809636d..58564a0e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -61,7 +61,7 @@ public class GuiSmileyCloud extends GuiContainer{ public void initGui(){ super.initGui(); - this.nameField = new GuiTextField(4000, this.fontRendererObj, guiLeft+5, guiTop+6, 114, 8); + this.nameField = new GuiTextField(4000, this.fontRendererObj, this.guiLeft+5, this.guiTop+6, 114, 8); this.nameField.setMaxStringLength(20); this.nameField.setEnableBackgroundDrawing(false); this.nameField.setFocused(true); @@ -75,9 +75,9 @@ public class GuiSmileyCloud extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - String name = cloud.name == null || cloud.name.isEmpty() ? "" : TextFormatting.GOLD+cloud.name+TextFormatting.RESET+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.the")+" "; + String name = this.cloud.name == null || this.cloud.name.isEmpty() ? "" : TextFormatting.GOLD+this.cloud.name+TextFormatting.RESET+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.the")+" "; String localizedName = name+StringUtil.localize("container."+ModUtil.MOD_ID+".cloud.name"); - this.fontRendererObj.drawString(localizedName, xSize/2-this.fontRendererObj.getStringWidth(localizedName)/2, -10, StringUtil.DECIMAL_COLOR_WHITE); + this.fontRendererObj.drawString(localizedName, this.xSize/2-this.fontRendererObj.getStringWidth(localizedName)/2, -10, StringUtil.DECIMAL_COLOR_WHITE); } @Override @@ -123,6 +123,6 @@ public class GuiSmileyCloud extends GuiContainer{ } private void sendPacket(String text, int textID){ - PacketHandler.theNetwork.sendToServer(new PacketGuiString(x, y, z, world, text, textID, Minecraft.getMinecraft().thePlayer)); + PacketHandler.theNetwork.sendToServer(new PacketGuiString(this.x, this.y, this.z, this.world, text, textID, Minecraft.getMinecraft().thePlayer)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index ef38f3511..bd22443bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -53,15 +53,15 @@ public class GuiXPSolidifier extends GuiContainer{ public void initGui(){ super.initGui(); - GuiButton buttonOne = new GuiInputter.SmallerButton(0, guiLeft+62, guiTop+44, "1"); - GuiButton buttonFive = new GuiInputter.SmallerButton(1, guiLeft+80, guiTop+44, "5"); - GuiButton buttonTen = new GuiInputter.SmallerButton(2, guiLeft+99, guiTop+44, "10"); - GuiButton buttonTwenty = new GuiInputter.SmallerButton(3, guiLeft+62, guiTop+61, "20"); - GuiButton buttonThirty = new GuiInputter.SmallerButton(4, guiLeft+80, guiTop+61, "30"); - GuiButton buttonForty = new GuiInputter.SmallerButton(5, guiLeft+99, guiTop+61, "40"); - GuiButton buttonFifty = new GuiInputter.SmallerButton(6, guiLeft+62, guiTop+78, "50"); - GuiButton buttonSixtyFour = new GuiInputter.SmallerButton(7, guiLeft+80, guiTop+78, "64"); - GuiButton buttonAll = new GuiInputter.SmallerButton(8, guiLeft+99, guiTop+78, "All"); + GuiButton buttonOne = new GuiInputter.SmallerButton(0, this.guiLeft+62, this.guiTop+44, "1"); + GuiButton buttonFive = new GuiInputter.SmallerButton(1, this.guiLeft+80, this.guiTop+44, "5"); + GuiButton buttonTen = new GuiInputter.SmallerButton(2, this.guiLeft+99, this.guiTop+44, "10"); + GuiButton buttonTwenty = new GuiInputter.SmallerButton(3, this.guiLeft+62, this.guiTop+61, "20"); + GuiButton buttonThirty = new GuiInputter.SmallerButton(4, this.guiLeft+80, this.guiTop+61, "30"); + GuiButton buttonForty = new GuiInputter.SmallerButton(5, this.guiLeft+99, this.guiTop+61, "40"); + GuiButton buttonFifty = new GuiInputter.SmallerButton(6, this.guiLeft+62, this.guiTop+78, "50"); + GuiButton buttonSixtyFour = new GuiInputter.SmallerButton(7, this.guiLeft+80, this.guiTop+78, "64"); + GuiButton buttonAll = new GuiInputter.SmallerButton(8, this.guiLeft+99, this.guiTop+78, "All"); this.buttonList.add(buttonOne); this.buttonList.add(buttonFive); @@ -81,7 +81,7 @@ public class GuiXPSolidifier extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.solidifier.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.solidifier.getName()); } @Override @@ -94,12 +94,12 @@ public class GuiXPSolidifier extends GuiContainer{ this.mc.getTextureManager().bindTexture(resLoc); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); - this.drawCenteredString(this.fontRendererObj, Integer.toString(this.solidifier.amount), guiLeft+88, guiTop+30, StringUtil.DECIMAL_COLOR_WHITE); + this.drawCenteredString(this.fontRendererObj, Integer.toString(this.solidifier.amount), this.guiLeft+88, this.guiTop+30, StringUtil.DECIMAL_COLOR_WHITE); } @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(x, y, z, world, button.id, Minecraft.getMinecraft().thePlayer)); + PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); this.solidifier.onButtonPressed(button.id, Minecraft.getMinecraft().thePlayer); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index a3bd8d6f8..b5c84bc3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -102,7 +102,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ return new IItemColor(){ @Override public int getColorFromItemstack(ItemStack stack, int pass){ - return pass > 0 ? color : 0xFFFFFF; + return pass > 0 ? ItemAllToolAA.this.color : 0xFFFFFF; } }; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 276a38760..92cbac320 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -68,7 +68,7 @@ public class ItemLeafBlower extends ItemBase{ @Override public void onUsingTick(ItemStack stack, EntityLivingBase player, int time){ if(!player.worldObj.isRemote){ - if(time <= getMaxItemUseDuration(stack) && (this.isAdvanced || time%3 == 0)){ + if(time <= this.getMaxItemUseDuration(stack) && (this.isAdvanced || time%3 == 0)){ //Breaks the Blocks this.breakStuff(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)); //Plays a Minecart sounds (It really sounds like a Leaf Blower!) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 84c8a7c85..07f3a25cc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -99,8 +99,8 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ @Override public double getDurabilityForDisplay(ItemStack stack){ - double energyDif = getMaxEnergyStored(stack)-getEnergyStored(stack); - double maxAmount = getMaxEnergyStored(stack); + double energyDif = this.getMaxEnergyStored(stack)-this.getEnergyStored(stack); + double maxAmount = this.getMaxEnergyStored(stack); return energyDif/maxAmount; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 60bb021d3..565dd461d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -226,7 +226,7 @@ public class LaserRelayConnectionHandler{ } public boolean contains(BlockPos relay){ - return (this.firstRelay != null && PosUtil.areSamePos(firstRelay, relay)) || (this.secondRelay != null && PosUtil.areSamePos(secondRelay, relay)); + return (this.firstRelay != null && PosUtil.areSamePos(this.firstRelay, relay)) || (this.secondRelay != null && PosUtil.areSamePos(this.secondRelay, relay)); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 66be49acb..03cc860c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -89,7 +89,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private void doWork(){ if(this.storage.getEnergyStored() >= ENERGY_USE){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, worldObj)); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); //Extract energy for shooting the laser itself too! this.storage.extractEnergy(ENERGY_USE, false); @@ -124,7 +124,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple System.out.println("SOUND!"); this.worldObj.playSound(null, this.getX(), this.getY(), this.getZ(), SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 29020d186..994c3c966 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -55,7 +55,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!this.isRedstonePowered && !this.activateOnceWithSignal){ if(this.currentTime > 0){ this.currentTime--; @@ -76,28 +76,28 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } private void doWork(){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, worldObj)); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, 0); if(coordsBlock != null){ - Block blockToBreak = PosUtil.getBlock(coordsBlock, worldObj); - IBlockState stateToBreak = worldObj.getBlockState(coordsBlock); - if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(stateToBreak, worldObj, coordsBlock) > -1.0F){ + Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + IBlockState stateToBreak = this.worldObj.getBlockState(coordsBlock); + if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(stateToBreak, this.worldObj, coordsBlock) > -1.0F){ ArrayList drops = new ArrayList(); - drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock, stateToBreak, 0)); + drops.addAll(blockToBreak.getDrops(this.worldObj, coordsBlock, stateToBreak, 0)); if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); + this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); } - WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); WorldUtil.addToInventory(this, drops, true, true); this.markDirty(); } } else if(this.isPlacer){ int theSlot = WorldUtil.findFirstFilledSlot(this.slots); - this.setInventorySlotContents(theSlot, WorldUtil.useItemAtSide(sideToManipulate, worldObj, this.pos, this.slots[theSlot])); + this.setInventorySlotContents(theSlot, WorldUtil.useItemAtSide(sideToManipulate, this.worldObj, this.pos, this.slots[theSlot])); if(this.slots[theSlot] != null && this.slots[theSlot].stackSize <= 0){ this.slots[theSlot] = null; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 03ead9842..a038b524c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -75,7 +75,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.isCanola(0) && PRODUCE <= this.tank.getCapacity()-this.tank.getFluidAmount()){ if(this.storage.getEnergyStored() >= ENERGY_USE){ this.currentProcessTime++; @@ -97,15 +97,15 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE this.currentProcessTime = 0; } - WorldUtil.fillBucket(tank, slots, 1, 2); + WorldUtil.fillBucket(this.tank, this.slots, 1, 2); if(this.tank.getFluidAmount() > 0){ - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.DOWN, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.tank); if(!this.isRedstonePowered){ - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.NORTH, this.tank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.EAST, this.tank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.SOUTH, this.tank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.WEST, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.NORTH, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.EAST, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.SOUTH, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.WEST, this.tank); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index ef75b1688..1700ea0b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -65,7 +65,7 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ boolean flag = this.currentBurnTime > 0; if(this.currentBurnTime > 0){ @@ -85,19 +85,19 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); } if(flag != this.currentBurnTime > 0){ this.markDirty(); - int meta = PosUtil.getMetadata(this.getPos(), worldObj); + int meta = PosUtil.getMetadata(this.getPos(), this.worldObj); if(meta == 1){ if(!(this.currentBurnTime <= 0 && this.slots[0] != null && TileEntityFurnace.getItemBurnTime(this.slots[0]) > 0 && this.storage.getEnergyStored() < this.storage.getMaxEnergyStored())){ - PosUtil.setMetadata(this.pos, worldObj, 0, 2); + PosUtil.setMetadata(this.pos, this.worldObj, 0, 2); } } else{ - PosUtil.setMetadata(this.pos, worldObj, 1, 2); + PosUtil.setMetadata(this.pos, this.worldObj, 1, 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 4e69051ba..49ca1c558 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -95,7 +95,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ this.storeCoffee(); if(this.brewTime > 0 || this.isRedstonePowered){ @@ -103,7 +103,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } if((this.coffeeCacheAmount != this.lastCoffeeAmount || this.storage.getEnergyStored() != this.lastEnergy || this.tank.getFluidAmount() != this.lastTank || this.brewTime != this.lastBrewTime) && this.sendUpdateWithInterval()){ - this.lastCoffeeAmount = coffeeCacheAmount; + this.lastCoffeeAmount = this.coffeeCacheAmount; this.lastEnergy = this.storage.getEnergyStored(); this.lastTank = this.tank.getFluidAmount(); this.lastBrewTime = this.brewTime; @@ -128,11 +128,11 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } } - WorldUtil.emptyBucket(tank, slots, SLOT_WATER_INPUT, SLOT_WATER_OUTPUT, FluidRegistry.WATER); + WorldUtil.emptyBucket(this.tank, this.slots, SLOT_WATER_INPUT, SLOT_WATER_OUTPUT, FluidRegistry.WATER); } public void brew(){ - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.slots[SLOT_INPUT] != null && this.slots[SLOT_INPUT].getItem() == InitItems.itemMisc && this.slots[SLOT_INPUT].getItemDamage() == TheMiscItems.CUP.ordinal() && this.slots[SLOT_OUTPUT] == null && this.coffeeCacheAmount >= CACHE_USE && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == FluidRegistry.WATER && this.tank.getFluidAmount() >= WATER_USE){ if(this.storage.getEnergyStored() >= ENERGY_USED){ if(this.brewTime%30 == 0 && !ConfigValues.lessSound){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index b89d2894c..5f9993bec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -51,7 +51,7 @@ public class TileEntityCompost extends TileEntityInventoryBase{ @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ boolean theFlag = this.conversionTime > 0; if(this.slots[0] != null && !(this.slots[0].getItem() instanceof ItemFertilizer) && this.slots[0].stackSize >= AMOUNT){ this.conversionTime++; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 9217ad965..4569821dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -57,7 +57,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!this.isRedstonePowered && !this.activateOnceWithSignal){ if(this.storage.getEnergyStored() >= ENERGY_USE*RANGE){ if(this.currentTime > 0){ @@ -79,21 +79,21 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } private void doWork(){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, worldObj)); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); for(int i = 0; i < RANGE; i++){ - BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, pos, i); + BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); if(coordsBlock != null){ - Block blockToBreak = PosUtil.getBlock(coordsBlock, worldObj); - if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(worldObj.getBlockState(coordsBlock), worldObj, pos) > -1.0F){ + Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(this.worldObj.getBlockState(coordsBlock), this.worldObj, this.pos) > -1.0F){ ArrayList drops = new ArrayList(); - drops.addAll(blockToBreak.getDrops(worldObj, coordsBlock, worldObj.getBlockState(coordsBlock), 0)); + drops.addAll(blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0)); if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(worldObj.getBlockState(coordsBlock))); + this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); } - WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.getPos(), i); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); WorldUtil.addToInventory(this, drops, true, true); this.storage.extractEnergy(ENERGY_USE, false); this.markDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 60a4982b0..81211d751 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -41,7 +41,7 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!this.isRedstonePowered && !this.activateOnceWithSignal){ if(this.currentTime > 0){ this.currentTime--; @@ -65,7 +65,7 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst if(this.removeFromInventory(false) != null){ ItemStack stack = this.removeFromInventory(true); stack.stackSize = 1; - WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, worldObj)), worldObj, this.pos, stack); + WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)), this.worldObj, this.pos, stack); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index 33131aeb2..7b9059379 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -43,7 +43,7 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.slots[0] != null && this.slots[0].getItem() instanceof IEnergyContainerItem && this.slots[1] == null){ if(this.storage.getEnergyStored() > 0){ int received = ((IEnergyContainerItem)this.slots[0].getItem()).receiveEnergy(this.slots[0], this.storage.getEnergyStored(), false); @@ -59,7 +59,7 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne } } - if(lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ + if(this.lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ this.lastEnergy = this.storage.getEnergyStored(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 2d9f66303..852eec83a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -44,7 +44,7 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.slots[0] != null && this.slots[0].getItem() instanceof IEnergyContainerItem && this.slots[1] == null){ if(((IEnergyContainerItem)this.slots[0].getItem()).getEnergyStored(this.slots[0]) > 0){ int toReceive = ((IEnergyContainerItem)this.slots[0].getItem()).extractEnergy(this.slots[0], this.storage.getMaxEnergyStored()-this.storage.getEnergyStored(), false); @@ -61,10 +61,10 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); } - if(lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ + if(this.lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ this.lastEnergy = this.storage.getEnergyStored(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index 6530c4481..ee2437aee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -62,10 +62,10 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ boolean theFlag = this.currentTimer > 0; int range = 5; - List animals = worldObj.getEntitiesWithinAABB(EntityAnimal.class, new AxisAlignedBB(this.pos.getX()-range, this.pos.getY()-range, this.pos.getZ()-range, this.pos.getX()+range, this.pos.getY()+range, this.pos.getZ()+range)); + List animals = this.worldObj.getEntitiesWithinAABB(EntityAnimal.class, new AxisAlignedBB(this.pos.getX()-range, this.pos.getY()-range, this.pos.getZ()-range, this.pos.getX()+range, this.pos.getY()+range, this.pos.getZ()+range)); if(animals != null){ this.currentAnimalAmount = animals.size(); if(this.currentAnimalAmount >= 2){ @@ -120,7 +120,7 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ double d = Util.RANDOM.nextGaussian()*0.02D; double d1 = Util.RANDOM.nextGaussian()*0.02D; double d2 = Util.RANDOM.nextGaussian()*0.02D; - worldObj.spawnParticle(EnumParticleTypes.HEART, (animal.posX+(double)(Util.RANDOM.nextFloat()*animal.width*2.0F))-animal.width, animal.posY+0.5D+(double)(Util.RANDOM.nextFloat()*animal.height), (animal.posZ+(double)(Util.RANDOM.nextFloat()*animal.width*2.0F))-animal.width, d, d1, d2); + this.worldObj.spawnParticle(EnumParticleTypes.HEART, (animal.posX+(double)(Util.RANDOM.nextFloat()*animal.width*2.0F))-animal.width, animal.posY+0.5D+(double)(Util.RANDOM.nextFloat()*animal.height), (animal.posZ+(double)(Util.RANDOM.nextFloat()*animal.width*2.0F))-animal.width, d, d1, d2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index e538bd60e..ab8f4c0c2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -56,7 +56,7 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ int produce = 80; if(this.canolaTank.getFluidAmount() >= produce && produce <= this.oilTank.getCapacity()-this.oilTank.getFluidAmount()){ this.currentProcessTime++; @@ -72,16 +72,16 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen this.currentProcessTime = 0; } - WorldUtil.emptyBucket(canolaTank, slots, 0, 1, InitFluids.fluidCanolaOil); - WorldUtil.fillBucket(oilTank, slots, 2, 3); + WorldUtil.emptyBucket(this.canolaTank, this.slots, 0, 1, InitFluids.fluidCanolaOil); + WorldUtil.fillBucket(this.oilTank, this.slots, 2, 3); if(this.oilTank.getFluidAmount() > 0){ - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.DOWN, this.oilTank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.oilTank); if(!this.isRedstonePowered){ - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.NORTH, this.oilTank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.EAST, this.oilTank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.SOUTH, this.oilTank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.WEST, this.oilTank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.NORTH, this.oilTank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.EAST, this.oilTank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.SOUTH, this.oilTank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.WEST, this.oilTank); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index 7bf013a90..a43ffb12a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -47,25 +47,25 @@ public class TileEntityFishingNet extends TileEntityBase{ @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!this.isRedstonePowered){ if(PosUtil.getMaterial(PosUtil.offset(this.pos, 0, -1, 0), this.worldObj) == Material.WATER){ if(this.timeUntilNextDrop > 0){ this.timeUntilNextDrop--; - if(timeUntilNextDrop <= 0){ + if(this.timeUntilNextDrop <= 0){ LootContext.Builder builder = new LootContext.Builder((WorldServer)this.worldObj); List fishables = this.worldObj.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING).generateLootForPools(Util.RANDOM, builder.build()); for(ItemStack fishable : fishables){ - TileEntity tile = worldObj.getTileEntity(PosUtil.offset(pos, 0, 1, 0)); + TileEntity tile = this.worldObj.getTileEntity(PosUtil.offset(this.pos, 0, 1, 0)); if(tile != null && tile instanceof IInventory){ ArrayList list = new ArrayList(); list.add(fishable); WorldUtil.addToInventory((IInventory)tile, list, EnumFacing.DOWN, true, false); } else{ - EntityItem item = new EntityItem(worldObj, pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, fishable); + EntityItem item = new EntityItem(this.worldObj, this.pos.getX()+0.5, this.pos.getY()+0.5, this.pos.getZ()+0.5, fishable); item.lifespan = 2000; - worldObj.spawnEntityInWorld(item); + this.worldObj.spawnEntityInWorld(item); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 4bda628ed..9994ef410 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -56,35 +56,35 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements } private void doWork(){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, worldObj)); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, 0); if(coordsBlock != null){ - Block blockToBreak = PosUtil.getBlock(coordsBlock, worldObj); - if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, worldObj) == 0 && FluidContainerRegistry.BUCKET_VOLUME <= this.tank.getCapacity()-this.tank.getFluidAmount()){ + Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, this.worldObj) == 0 && FluidContainerRegistry.BUCKET_VOLUME <= this.tank.getCapacity()-this.tank.getFluidAmount()){ if(blockToBreak instanceof IFluidBlock && ((IFluidBlock)blockToBreak).getFluid() != null){ if(this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), FluidContainerRegistry.BUCKET_VOLUME), true); - WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } else if(blockToBreak == Blocks.LAVA || blockToBreak == Blocks.FLOWING_LAVA){ if(this.tank.fill(new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ this.tank.fill(new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), true); - WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } else if(blockToBreak == Blocks.WATER || blockToBreak == Blocks.FLOWING_WATER){ if(this.tank.fill(new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ this.tank.fill(new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), true); - WorldUtil.breakBlockAtSide(sideToManipulate, worldObj, this.pos); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } } - else if(this.isPlacer && PosUtil.getBlock(coordsBlock, worldObj).isReplaceable(worldObj, coordsBlock)){ + else if(this.isPlacer && PosUtil.getBlock(coordsBlock, this.worldObj).isReplaceable(this.worldObj, coordsBlock)){ if(this.tank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME){ if(this.tank.getFluid().getFluid().getBlock() != null){ - WorldUtil.useItemAtSide(sideToManipulate, worldObj, this.pos, new ItemStack(this.tank.getFluid().getFluid().getBlock())); + WorldUtil.useItemAtSide(sideToManipulate, this.worldObj, this.pos, new ItemStack(this.tank.getFluid().getFluid().getBlock())); this.tank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); } } @@ -149,7 +149,7 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!this.isRedstonePowered && !this.activateOnceWithSignal){ if(this.currentTime > 0){ this.currentTime--; @@ -163,24 +163,24 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements } if(!this.isPlacer){ - WorldUtil.fillBucket(tank, slots, 0, 1); + WorldUtil.fillBucket(this.tank, this.slots, 0, 1); } else{ - WorldUtil.emptyBucket(tank, slots, 0, 1); + WorldUtil.emptyBucket(this.tank, this.slots, 0, 1); } if(!this.isPlacer && this.tank.getFluidAmount() > 0){ - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.DOWN, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.tank); if(!this.isRedstonePowered){ - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.NORTH, this.tank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.EAST, this.tank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.SOUTH, this.tank); - WorldUtil.pushFluid(worldObj, this.pos, EnumFacing.WEST, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.NORTH, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.EAST, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.SOUTH, this.tank); + WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.WEST, this.tank); } } - if(lastTankAmount != this.tank.getFluidAmount() && this.sendUpdateWithInterval()){ - lastTankAmount = this.tank.getFluidAmount(); + if(this.lastTankAmount != this.tank.getFluidAmount() && this.sendUpdateWithInterval()){ + this.lastTankAmount = this.tank.getFluidAmount(); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index 3be5c827d..ac2bd5b2e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -59,7 +59,7 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ boolean flag = this.firstSmeltTime > 0 || this.secondSmeltTime > 0; boolean canSmeltOnFirst = this.canSmeltOn(SLOT_INPUT_1, SLOT_OUTPUT_1); @@ -97,18 +97,18 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements if(flag != (this.firstSmeltTime > 0 || this.secondSmeltTime > 0)){ this.markDirty(); - int meta = PosUtil.getMetadata(this.pos, worldObj); + int meta = PosUtil.getMetadata(this.pos, this.worldObj); if(meta > 3){ if(!this.canSmeltOn(SLOT_INPUT_1, SLOT_OUTPUT_1) && !this.canSmeltOn(SLOT_INPUT_2, SLOT_OUTPUT_2)){ - PosUtil.setMetadata(this.pos, worldObj, meta-4, 2); + PosUtil.setMetadata(this.pos, this.worldObj, meta-4, 2); } } else{ - PosUtil.setMetadata(this.pos, worldObj, meta+4, 2); + PosUtil.setMetadata(this.pos, this.worldObj, meta+4, 2); } } - if((lastEnergy != this.storage.getEnergyStored() || this.lastFirstSmelt != this.firstSmeltTime || this.lastSecondSmelt != this.secondSmeltTime) && this.sendUpdateWithInterval()){ + if((this.lastEnergy != this.storage.getEnergyStored() || this.lastFirstSmelt != this.firstSmeltTime || this.lastSecondSmelt != this.secondSmeltTime) && this.sendUpdateWithInterval()){ this.lastEnergy = this.storage.getEnergyStored(); this.lastFirstSmelt = this.firstSmeltTime; this.lastSecondSmelt = this.secondSmeltTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 2bc007c45..ed4227725 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -61,8 +61,8 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ - if(!this.hasBlockAbove() && worldObj.isDaytime()){ + if(!this.worldObj.isRemote){ + if(!this.hasBlockAbove() && this.worldObj.isDaytime()){ if(PRODUCE <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored()){ this.storage.receiveEnergy(PRODUCE, false); this.markDirty(); @@ -70,7 +70,7 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); } if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ @@ -80,9 +80,9 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro } public boolean hasBlockAbove(){ - for(int y = 1; y <= worldObj.getHeight(); y++){ + for(int y = 1; y <= this.worldObj.getHeight(); y++){ BlockPos offset = PosUtil.offset(this.pos, 0, y, 0); - if(!PosUtil.getBlock(offset, worldObj).isAir(worldObj.getBlockState(offset), worldObj, offset)){ + if(!PosUtil.getBlock(offset, this.worldObj).isAir(this.worldObj.getBlockState(offset), this.worldObj, offset)){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index 108bec22c..ca7d95dc5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -39,18 +39,18 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ - if(worldObj.canBlockSeeSky(this.getPos()) && worldObj.isDaytime()){ + if(!this.worldObj.isRemote){ + if(this.worldObj.canBlockSeeSky(this.getPos()) && this.worldObj.isDaytime()){ if(this.timeUntilNextFert > 0){ this.timeUntilNextFert--; - if(timeUntilNextFert <= 0){ + if(this.timeUntilNextFert <= 0){ BlockPos blockToFert = this.blockToFertilize(); if(blockToFert != null){ - int metaBefore = PosUtil.getMetadata(blockToFert, worldObj); - PosUtil.getBlock(blockToFert, worldObj).updateTick(worldObj, blockToFert, worldObj.getBlockState(blockToFert), Util.RANDOM); + int metaBefore = PosUtil.getMetadata(blockToFert, this.worldObj); + PosUtil.getBlock(blockToFert, this.worldObj).updateTick(this.worldObj, blockToFert, this.worldObj.getBlockState(blockToFert), Util.RANDOM); - if(PosUtil.getMetadata(blockToFert, worldObj) != metaBefore){ - worldObj.playAuxSFX(2005, blockToFert, 0); + if(PosUtil.getMetadata(blockToFert, this.worldObj) != metaBefore){ + this.worldObj.playAuxSFX(2005, blockToFert, 0); } } } @@ -66,8 +66,8 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ public BlockPos blockToFertilize(){ for(int i = -1; i > 0; i--){ BlockPos offset = PosUtil.offset(this.pos, 0, i, 0); - Block block = PosUtil.getBlock(pos, worldObj); - if(block != null && !(worldObj.isAirBlock(offset))){ + Block block = PosUtil.getBlock(this.pos, this.worldObj); + if(block != null && !(this.worldObj.isAirBlock(offset))){ if((block instanceof IGrowable || block instanceof IPlantable) && !(block instanceof BlockGrass)){ return offset; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index be75cea9a..91b268ff5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -96,7 +96,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ boolean flag = this.firstCrushTime > 0 || this.secondCrushTime > 0; boolean canCrushOnFirst = this.canCrushOn(SLOT_INPUT_1, SLOT_OUTPUT_1_1, SLOT_OUTPUT_1_2); @@ -113,7 +113,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg shouldPlaySound = true; } this.firstCrushTime++; - if(this.firstCrushTime >= getMaxCrushTime()){ + if(this.firstCrushTime >= this.getMaxCrushTime()){ this.finishCrushing(SLOT_INPUT_1, SLOT_OUTPUT_1_1, SLOT_OUTPUT_1_2); this.firstCrushTime = 0; } @@ -130,7 +130,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg shouldPlaySound = true; } this.secondCrushTime++; - if(this.secondCrushTime >= getMaxCrushTime()){ + if(this.secondCrushTime >= this.getMaxCrushTime()){ this.finishCrushing(SLOT_INPUT_2, SLOT_OUTPUT_2_1, SLOT_OUTPUT_2_2); this.secondCrushTime = 0; } @@ -147,18 +147,18 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg if(flag != (this.firstCrushTime > 0 || this.secondCrushTime > 0)){ this.markDirty(); - int meta = PosUtil.getMetadata(this.pos, worldObj); + int meta = PosUtil.getMetadata(this.pos, this.worldObj); if(meta == 1){ if(!this.canCrushOn(SLOT_INPUT_1, SLOT_OUTPUT_1_1, SLOT_OUTPUT_1_2) && (!this.isDouble || !this.canCrushOn(SLOT_INPUT_2, SLOT_OUTPUT_2_1, SLOT_OUTPUT_2_2))){ - PosUtil.setMetadata(this.pos, worldObj, 0, 2); + PosUtil.setMetadata(this.pos, this.worldObj, 0, 2); } } else{ - PosUtil.setMetadata(this.pos, worldObj, 1, 2); + PosUtil.setMetadata(this.pos, this.worldObj, 1, 2); } } - if((lastEnergy != this.storage.getEnergyStored() || this.lastFirstCrush != this.firstCrushTime || this.lastSecondCrush != this.secondCrushTime) && this.sendUpdateWithInterval()){ + if((this.lastEnergy != this.storage.getEnergyStored() || this.lastFirstCrush != this.firstCrushTime || this.lastSecondCrush != this.secondCrushTime) && this.sendUpdateWithInterval()){ this.lastEnergy = this.storage.getEnergyStored(); this.lastFirstCrush = this.firstCrushTime; this.lastSecondCrush = this.secondCrushTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index c6820ece9..fa38e1cf1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -47,13 +47,13 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ ArrayList blocksAround = new ArrayList(); if(ENERGY_PRODUCE <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored()){ for(int i = 1; i <= 5; i++){ BlockPos coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionBySidesInOrder(i), this.pos, 0); - Block block = PosUtil.getBlock(coords, worldObj); - if(block != null && block.getMaterial(worldObj.getBlockState(coords)) == Material.LAVA && PosUtil.getMetadata(coords, worldObj) == 0){ + Block block = PosUtil.getBlock(coords, this.worldObj); + if(block != null && block.getMaterial(this.worldObj.getBlockState(coords)) == Material.LAVA && PosUtil.getMetadata(coords, this.worldObj) == 0){ blocksAround.add(i); } } @@ -64,13 +64,13 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr if(Util.RANDOM.nextInt(10000) == 0){ int randomSide = blocksAround.get(Util.RANDOM.nextInt(blocksAround.size())); - WorldUtil.breakBlockAtSide(WorldUtil.getDirectionBySidesInOrder(randomSide), worldObj, this.pos); + WorldUtil.breakBlockAtSide(WorldUtil.getDirectionBySidesInOrder(randomSide), this.worldObj, this.pos); } } } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergy(worldObj, this.pos, EnumFacing.UP, this.storage); + WorldUtil.pushEnergy(this.worldObj, this.pos, EnumFacing.UP, this.storage); } if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index c4f678e4b..aec488d75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -83,7 +83,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt */ private void pull(){ //The Inventory to pull from - IInventory theInventory = (IInventory)placeToPull; + IInventory theInventory = (IInventory)this.placeToPull; //Does the Inventory even have Slots!? if(theInventory.getSizeInventory() > 0){ //The slot currently pulling from (for later) @@ -181,7 +181,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt * (Check pull() for Description, similar to this) */ private void put(){ - IInventory theInventory = (IInventory)placeToPut; + IInventory theInventory = (IInventory)this.placeToPut; if(theInventory.getSizeInventory() > 0){ int theSlotToPut = this.slotToPutStart; int maxSize = theInventory.getInventoryStackLimit(); @@ -266,7 +266,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt * @return If the Item is filtered correctly */ private boolean checkBothFilters(ItemStack stack){ - return this.checkFilter(stack, true, isPullWhitelist) || this.checkFilter(stack, false, isPutWhitelist); + return this.checkFilter(stack, true, this.isPullWhitelist) || this.checkFilter(stack, false, this.isPutWhitelist); } /** @@ -395,23 +395,23 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ this.initVars(); //Is Block not powered by Redstone? if(!this.isRedstonePowered){ if(!(this.sideToPull == this.sideToPut && this.slotToPullStart == this.slotToPutStart && this.slotToPullEnd == this.slotToPutEnd)){ - if(sideToPull != -1 && this.placeToPull instanceof IInventory){ + if(this.sideToPull != -1 && this.placeToPull instanceof IInventory){ this.pull(); } - if(sideToPut != -1 && this.placeToPut instanceof IInventory){ + if(this.sideToPut != -1 && this.placeToPut instanceof IInventory){ this.put(); } } } //Update the Client - if((this.sideToPut != this.lastPutSide || this.sideToPull != this.lastPullSide || this.slotToPullStart != this.lastPullStart || this.slotToPullEnd != this.lastPullEnd || this.slotToPutStart != this.lastPutStart || this.slotToPutEnd != this.lastPutEnd || this.isPullWhitelist != lastPullWhite || this.isPutWhitelist != this.lastPutWhite) && this.sendUpdateWithInterval()){ + if((this.sideToPut != this.lastPutSide || this.sideToPull != this.lastPullSide || this.slotToPullStart != this.lastPullStart || this.slotToPullEnd != this.lastPullEnd || this.slotToPutStart != this.lastPutStart || this.slotToPutEnd != this.lastPutEnd || this.isPullWhitelist != this.lastPullWhite || this.isPutWhitelist != this.lastPutWhite) && this.sendUpdateWithInterval()){ this.lastPutSide = this.sideToPut; this.lastPullSide = this.sideToPull; this.lastPullStart = this.slotToPullStart; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index a82c10c0d..345b88464 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -41,11 +41,11 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements if(!isForSync || this.shouldSyncSlots()){ if(this.slots.length > 0){ NBTTagList tagList = new NBTTagList(); - for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ + for(int currentIndex = 0; currentIndex < this.slots.length; currentIndex++){ NBTTagCompound tagCompound = new NBTTagCompound(); tagCompound.setByte("Slot", (byte)currentIndex); - if(slots[currentIndex] != null){ - slots[currentIndex].writeToNBT(tagCompound); + if(this.slots[currentIndex] != null){ + this.slots[currentIndex].writeToNBT(tagCompound); } tagList.appendTag(tagCompound); } @@ -67,8 +67,8 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements for(int i = 0; i < tagList.tagCount(); i++){ NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); byte slotIndex = tagCompound.getByte("Slot"); - if(slotIndex >= 0 && slotIndex < slots.length){ - slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); + if(slotIndex >= 0 && slotIndex < this.slots.length){ + this.slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); } } } @@ -83,7 +83,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public int[] getSlotsForFace(EnumFacing side){ if(this.slots.length > 0){ - int[] theInt = new int[slots.length]; + int[] theInt = new int[this.slots.length]; for(int i = 0; i < theInt.length; i++){ theInt[i] = i; } @@ -148,31 +148,31 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public int getSizeInventory(){ - return slots.length; + return this.slots.length; } @Override public ItemStack getStackInSlot(int i){ if(i < this.getSizeInventory()){ - return slots[i]; + return this.slots[i]; } return null; } @Override public ItemStack decrStackSize(int i, int j){ - if(slots[i] != null){ + if(this.slots[i] != null){ ItemStack stackAt; - if(slots[i].stackSize <= j){ - stackAt = slots[i]; - slots[i] = null; + if(this.slots[i].stackSize <= j){ + stackAt = this.slots[i]; + this.slots[i] = null; this.markDirty(); return stackAt; } else{ - stackAt = slots[i].splitStack(j); - if(slots[i].stackSize == 0){ - slots[i] = null; + stackAt = this.slots[i].splitStack(j); + if(this.slots[i].stackSize == 0){ + this.slots[i] = null; } this.markDirty(); return stackAt; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index b0abbbe7f..580fc3f04 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -53,7 +53,7 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.slots[SLOT_OUTPUT] == null && canBeRepaired(this.slots[SLOT_INPUT])){ if(this.slots[SLOT_INPUT].getItemDamage() <= 0){ this.slots[SLOT_OUTPUT] = this.slots[SLOT_INPUT].copy(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 5468216d7..b00503c36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -115,7 +115,7 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei if(maxTransmit > 0){ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(this.pos); if(network != null){ - transmitted = LaserRelayConnectionHandler.getInstance().transferEnergyToReceiverInNeed(worldObj, blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); + transmitted = LaserRelayConnectionHandler.getInstance().transferEnergyToReceiverInNeed(this.worldObj, blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); } } return transmitted; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 0c2c733c8..4100ffce9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -51,12 +51,12 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.storage.getEnergyStored() >= ENERGY_USE && this.isMultiblock() == HAS_AIR){ this.currentWorkTime++; if(this.currentWorkTime >= 200){ this.currentWorkTime = 0; - PosUtil.setBlock(PosUtil.offset(this.pos, 0, 1, 0), worldObj, Blocks.LAVA, 0, 2); + PosUtil.setBlock(PosUtil.offset(this.pos, 0, 1, 0), this.worldObj, Blocks.LAVA, 0, 2); this.storage.extractEnergy(ENERGY_USE, false); } } @@ -79,12 +79,12 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I PosUtil.offset(thisPos, 0, 1, -1) }; - if(WorldUtil.hasBlocksInPlacesGiven(positions, InitBlocks.blockMisc, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal(), worldObj)){ + if(WorldUtil.hasBlocksInPlacesGiven(positions, InitBlocks.blockMisc, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal(), this.worldObj)){ BlockPos pos = PosUtil.offset(thisPos, 0, 1, 0); - if(PosUtil.getBlock(pos, worldObj) == Blocks.LAVA || PosUtil.getBlock(pos, worldObj) == Blocks.FLOWING_LAVA){ + if(PosUtil.getBlock(pos, this.worldObj) == Blocks.LAVA || PosUtil.getBlock(pos, this.worldObj) == Blocks.FLOWING_LAVA){ return HAS_LAVA; } - if(PosUtil.getBlock(pos, worldObj) == null || worldObj.isAirBlock(pos)){ + if(PosUtil.getBlock(pos, this.worldObj) == null || this.worldObj.isAirBlock(pos)){ return HAS_AIR; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index a6be2af3e..7e88f279f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -53,7 +53,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!this.isRedstonePowered){ if(this.nextUseCounter >= 5){ @@ -66,7 +66,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr for(int reachZ = -RANGE; reachZ < RANGE+1; reachZ++){ for(int reachY = -RANGE; reachY < RANGE+1; reachY++){ BlockPos pos = PosUtil.offset(this.pos, reachX, reachY, reachZ); - Block block = PosUtil.getBlock(pos, worldObj); + Block block = PosUtil.getBlock(pos, this.worldObj); if(block != null && block.isLeaves(this.worldObj.getBlockState(pos), this.worldObj, pos)){ breakPositions.add(pos); } @@ -79,7 +79,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr BlockPos theCoord = breakPositions.get(0); if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, theCoord, Block.getStateId(worldObj.getBlockState(theCoord))); + this.worldObj.playAuxSFX(2001, theCoord, Block.getStateId(this.worldObj.getBlockState(theCoord))); } this.worldObj.setBlockToAir(theCoord); @@ -87,7 +87,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr this.storage.receiveEnergy(ENERGY_PRODUCED, false); if(!ConfigValues.lessParticles){ - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.pos.getX(), this.pos.getY(), this.pos.getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.pos.getX(), this.pos.getY(), this.pos.getZ(), 64)); } } } @@ -98,7 +98,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); } if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index f5e230494..5b0a1fc86 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -74,7 +74,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR if(!this.isRedstonePowered && this.ticksElapsed%5 == 0){ if(this.layerAt > 0){ - if(this.mine(TileEntityPhantomface.upgradeRange(DEFAULT_RANGE, worldObj, this.pos))){ + if(this.mine(TileEntityPhantomface.upgradeRange(DEFAULT_RANGE, this.worldObj, this.pos))){ this.layerAt--; } } @@ -94,18 +94,18 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR if(this.storage.getEnergyStored() >= actualUse){ BlockPos pos = new BlockPos(this.pos.getX()+anX, this.layerAt, this.pos.getZ()+aZ); - Block block = PosUtil.getBlock(pos, worldObj); - int meta = PosUtil.getMetadata(pos, worldObj); + Block block = PosUtil.getBlock(pos, this.worldObj); + int meta = PosUtil.getMetadata(pos, this.worldObj); if(block != null && !block.isAir(this.worldObj.getBlockState(pos), this.worldObj, pos)){ - if(block.getHarvestLevel(worldObj.getBlockState(pos)) <= 3F && block.getBlockHardness(this.worldObj.getBlockState(pos), this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ + if(block.getHarvestLevel(this.worldObj.getBlockState(pos)) <= 3F && block.getBlockHardness(this.worldObj.getBlockState(pos), this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ ArrayList drops = new ArrayList(); - drops.addAll(block.getDrops(worldObj, pos, worldObj.getBlockState(pos), 0)); + drops.addAll(block.getDrops(this.worldObj, pos, this.worldObj.getBlockState(pos), 0)); if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - worldObj.playAuxSFX(2001, pos, Block.getStateId(worldObj.getBlockState(pos))); + this.worldObj.playAuxSFX(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); } - worldObj.setBlockToAir(pos); + this.worldObj.setBlockToAir(pos); WorldUtil.addToInventory(this, drops, true, true); this.markDirty(); @@ -157,7 +157,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR private void shootParticles(int endX, int endY, int endZ){ if(!ConfigValues.lessParticles){ - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 96)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 96)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 8f6806283..0aa93cef3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -72,7 +72,7 @@ public class TileEntityOilGenerator extends TileEntityInventoryBase implements I @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ boolean flag = this.currentBurnTime > 0; if(this.currentBurnTime > 0){ @@ -88,22 +88,22 @@ public class TileEntityOilGenerator extends TileEntityInventoryBase implements I } } - WorldUtil.emptyBucket(tank, slots, 0, 1, InitFluids.fluidOil); + WorldUtil.emptyBucket(this.tank, this.slots, 0, 1, InitFluids.fluidOil); if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); } if(flag != this.currentBurnTime > 0){ this.markDirty(); - int meta = PosUtil.getMetadata(pos, worldObj); + int meta = PosUtil.getMetadata(this.pos, this.worldObj); if(meta == 1){ if(!(ENERGY_PRODUCED*BURN_TIME <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored() && this.currentBurnTime <= 0 && this.tank.getFluidAmount() >= fuelUsed)){ - PosUtil.setMetadata(this.pos, worldObj, 0, 2); + PosUtil.setMetadata(this.pos, this.worldObj, 0, 2); } } else{ - PosUtil.setMetadata(this.pos, worldObj, 1, 2); + PosUtil.setMetadata(this.pos, this.worldObj, 1, 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 4c740631c..82dbc792b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -62,7 +62,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement public IEnergyProvider getProvider(){ if(this.boundPosition != null){ - TileEntity tile = worldObj.getTileEntity(boundPosition); + TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); if(tile instanceof IEnergyProvider){ return (IEnergyProvider)tile; } @@ -72,7 +72,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement public IEnergyReceiver getReceiver(){ if(this.boundPosition != null){ - TileEntity tile = worldObj.getTileEntity(boundPosition); + TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); if(tile instanceof IEnergyReceiver){ return (IEnergyReceiver)tile; } @@ -84,7 +84,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.isBoundThingInRange() && this.getProvider() != null){ this.pushEnergy(EnumFacing.UP); this.pushEnergy(EnumFacing.DOWN); @@ -98,11 +98,11 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement @Override public boolean isBoundThingInRange(){ - return super.isBoundThingInRange() && (worldObj.getTileEntity(boundPosition) instanceof IEnergyReceiver || worldObj.getTileEntity(boundPosition) instanceof IEnergyProvider); + return super.isBoundThingInRange() && (this.worldObj.getTileEntity(this.boundPosition) instanceof IEnergyReceiver || this.worldObj.getTileEntity(this.boundPosition) instanceof IEnergyProvider); } private void pushEnergy(EnumFacing side){ - TileEntity tile = WorldUtil.getTileEntityFromSide(side, worldObj, this.getPos()); + TileEntity tile = WorldUtil.getTileEntityFromSide(side, this.worldObj, this.getPos()); if(tile != null && tile instanceof IEnergyReceiver && this.getProvider().getEnergyStored(side.getOpposite()) > 0){ if(((IEnergyReceiver)tile).canConnectEnergy(side.getOpposite()) && this.canConnectEnergy(side)){ int receive = this.extractEnergy(side, Math.min(((IEnergyReceiver)tile).getMaxEnergyStored(side.getOpposite())-((IEnergyReceiver)tile).getEnergyStored(side.getOpposite()), this.getEnergyStored(side)), true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index f4af158a2..e7e0dba00 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -95,7 +95,7 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ public IInventory getInventory(){ if(this.boundPosition != null){ - TileEntity tile = worldObj.getTileEntity(boundPosition); + TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); if(tile instanceof IInventory){ return (IInventory)tile; } @@ -110,7 +110,7 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ @Override public boolean isBoundThingInRange(){ - return super.isBoundThingInRange() && worldObj.getTileEntity(boundPosition) instanceof IInventory; + return super.isBoundThingInRange() && this.worldObj.getTileEntity(this.boundPosition) instanceof IInventory; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index 005dca4a5..7a890b370 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -30,7 +30,7 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.isRedstonePowered && this.isBoundThingInRange() && this.getHandler() != null){ this.pushFluid(EnumFacing.UP); this.pushFluid(EnumFacing.DOWN); @@ -44,7 +44,7 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements public IFluidHandler getHandler(){ if(this.boundPosition != null){ - TileEntity tile = worldObj.getTileEntity(boundPosition); + TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); if(tile instanceof IFluidHandler){ return (IFluidHandler)tile; } @@ -53,7 +53,7 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements } private void pushFluid(EnumFacing side){ - TileEntity tile = WorldUtil.getTileEntityFromSide(side, worldObj, this.pos); + TileEntity tile = WorldUtil.getTileEntityFromSide(side, this.worldObj, this.pos); if(tile != null && tile instanceof IFluidHandler && this.getTankInfo(side) != null && this.getTankInfo(side).length > 0 && ((IFluidHandler)tile).getTankInfo(side.getOpposite()) != null && ((IFluidHandler)tile).getTankInfo(side.getOpposite()).length > 0){ for(FluidTankInfo myInfo : this.getTankInfo(side)){ for(FluidTankInfo hisInfo : ((IFluidHandler)tile).getTankInfo(side.getOpposite())){ @@ -73,7 +73,7 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements @Override public boolean isBoundThingInRange(){ - return super.isBoundThingInRange() && worldObj.getTileEntity(boundPosition) instanceof IFluidHandler; + return super.isBoundThingInRange() && this.worldObj.getTileEntity(this.boundPosition) instanceof IFluidHandler; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 8e2ef7d00..7d95ec642 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -53,9 +53,9 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements super.writeSyncableNBT(compound, sync); compound.setInteger("Range", this.range); if(this.boundPosition != null){ - compound.setInteger("XCoordOfTileStored", boundPosition.getX()); - compound.setInteger("YCoordOfTileStored", boundPosition.getY()); - compound.setInteger("ZCoordOfTileStored", boundPosition.getZ()); + compound.setInteger("XCoordOfTileStored", this.boundPosition.getX()); + compound.setInteger("YCoordOfTileStored", this.boundPosition.getY()); + compound.setInteger("ZCoordOfTileStored", this.boundPosition.getZ()); } } @@ -75,8 +75,8 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ - this.range = TileEntityPhantomface.upgradeRange(RANGE, worldObj, this.pos); + if(!this.worldObj.isRemote){ + this.range = TileEntityPhantomface.upgradeRange(RANGE, this.worldObj, this.pos); if(!this.hasBoundPosition()){ this.boundPosition = null; @@ -112,7 +112,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements @Override public boolean hasBoundPosition(){ if(this.boundPosition != null){ - if(this.worldObj.getTileEntity(boundPosition) instanceof IPhantomTile || (this.getPos().getX() == this.boundPosition.getX() && this.getPos().getY() == this.boundPosition.getY() && this.getPos().getZ() == this.boundPosition.getZ() && this.worldObj.provider.getDimension() == this.worldObj.provider.getDimension())){ + if(this.worldObj.getTileEntity(this.boundPosition) instanceof IPhantomTile || (this.getPos().getX() == this.boundPosition.getX() && this.getPos().getY() == this.boundPosition.getY() && this.getPos().getZ() == this.boundPosition.getZ() && this.worldObj.provider.getDimension() == this.worldObj.provider.getDimension())){ this.boundPosition = null; return false; } @@ -123,16 +123,16 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements private void doWork(){ if(this.isBreaker){ - Block blockToBreak = PosUtil.getBlock(boundPosition, worldObj); - if(blockToBreak != null && blockToBreak.getBlockHardness(worldObj.getBlockState(boundPosition), worldObj, boundPosition) > -1.0F){ + Block blockToBreak = PosUtil.getBlock(this.boundPosition, this.worldObj); + if(blockToBreak != null && blockToBreak.getBlockHardness(this.worldObj.getBlockState(this.boundPosition), this.worldObj, this.boundPosition) > -1.0F){ ArrayList drops = new ArrayList(); - drops.addAll(blockToBreak.getDrops(worldObj, boundPosition, worldObj.getBlockState(boundPosition), 0)); + drops.addAll(blockToBreak.getDrops(this.worldObj, this.boundPosition, this.worldObj.getBlockState(this.boundPosition), 0)); if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - worldObj.playAuxSFX(2001, this.boundPosition, Block.getStateId(worldObj.getBlockState(this.boundPosition))); + this.worldObj.playAuxSFX(2001, this.boundPosition, Block.getStateId(this.worldObj.getBlockState(this.boundPosition))); } - worldObj.setBlockToAir(this.boundPosition); + this.worldObj.setBlockToAir(this.boundPosition); WorldUtil.addToInventory(this, drops, true, true); this.markDirty(); } @@ -140,7 +140,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } else{ int theSlot = WorldUtil.findFirstFilledSlot(this.slots); - this.setInventorySlotContents(theSlot, WorldUtil.useItemAtSide(EnumFacing.UP, worldObj, boundPosition, this.slots[theSlot])); + this.setInventorySlotContents(theSlot, WorldUtil.useItemAtSide(EnumFacing.UP, this.worldObj, this.boundPosition, this.slots[theSlot])); if(this.slots[theSlot] != null && this.slots[theSlot].stackSize <= 0){ this.slots[theSlot] = null; } @@ -158,11 +158,11 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements double d5 = (double)(Util.RANDOM.nextFloat()*1.0F*(float)j1); double d0 = (double)this.boundPosition.getX()+0.5D+0.25D*(double)i1; double d3 = (double)(Util.RANDOM.nextFloat()*1.0F*(float)i1); - worldObj.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5); + this.worldObj.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5); } if(this.ticksElapsed%80 == 0){ - PacketParticle.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), boundPosition.getX(), boundPosition.getY(), boundPosition.getZ(), 2, 0.35F, TileEntityPhantomface.COLORS, 3); + PacketParticle.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.boundPosition.getX(), this.boundPosition.getY(), this.boundPosition.getZ(), 2, 0.35F, TileEntityPhantomface.COLORS, 3); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 59046ba17..27ee9acea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -61,9 +61,9 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP super.writeSyncableNBT(compound, sync); compound.setInteger("Range", this.range); if(this.boundPosition != null){ - compound.setInteger("XCoordOfTileStored", boundPosition.getX()); - compound.setInteger("YCoordOfTileStored", boundPosition.getY()); - compound.setInteger("ZCoordOfTileStored", boundPosition.getZ()); + compound.setInteger("XCoordOfTileStored", this.boundPosition.getX()); + compound.setInteger("YCoordOfTileStored", this.boundPosition.getY()); + compound.setInteger("ZCoordOfTileStored", this.boundPosition.getZ()); } } @@ -83,14 +83,14 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ - this.range = upgradeRange(RANGE, worldObj, this.getPos()); + if(!this.worldObj.isRemote){ + this.range = upgradeRange(RANGE, this.worldObj, this.getPos()); if(!this.hasBoundPosition()){ this.boundPosition = null; } - if(this.boundPosition != this.boundPosBefore || (this.boundPosition != null && PosUtil.getBlock(this.boundPosition, worldObj) != this.boundBlockBefore) || this.rangeBefore != this.range){ + if(this.boundPosition != this.boundPosBefore || (this.boundPosition != null && PosUtil.getBlock(this.boundPosition, this.worldObj) != this.boundBlockBefore) || this.rangeBefore != this.range){ this.rangeBefore = this.range; this.boundPosBefore = this.boundPosition; this.boundBlockBefore = this.boundPosition == null ? null : PosUtil.getBlock(this.boundPosition, this.worldObj); @@ -117,7 +117,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP @Override public boolean hasBoundPosition(){ if(this.boundPosition != null){ - if(worldObj.getTileEntity(boundPosition) instanceof IPhantomTile || (this.getPos().getX() == this.boundPosition.getX() && this.getPos().getY() == this.boundPosition.getY() && this.getPos().getZ() == this.boundPosition.getZ())){ + if(this.worldObj.getTileEntity(this.boundPosition) instanceof IPhantomTile || (this.getPos().getX() == this.boundPosition.getX() && this.getPos().getY() == this.boundPosition.getY() && this.getPos().getZ() == this.boundPosition.getZ())){ this.boundPosition = null; return false; } @@ -137,11 +137,11 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP double d5 = (double)(Util.RANDOM.nextFloat()*1.0F*(float)j1); double d0 = (double)this.boundPosition.getX()+0.5D+0.25D*(double)i1; double d3 = (double)(Util.RANDOM.nextFloat()*1.0F*(float)i1); - worldObj.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5); + this.worldObj.spawnParticle(EnumParticleTypes.PORTAL, d0, d1, d2, d3, d4, d5); } if(this.ticksElapsed%80 == 0){ - PacketParticle.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), boundPosition.getX(), boundPosition.getY(), boundPosition.getZ(), 2, 0.35F, COLORS, 3); + PacketParticle.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.boundPosition.getX(), this.boundPosition.getY(), this.boundPosition.getZ(), 2, 0.35F, COLORS, 3); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index dcb4df0cd..603d11e5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -48,7 +48,7 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!this.isRedstonePowered){ ArrayList items = (ArrayList)this.worldObj.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(this.pos.getX()-RANGE, this.pos.getY()-RANGE, this.pos.getZ()-RANGE, this.pos.getX()+RANGE, this.pos.getY()+RANGE, this.pos.getZ()+RANGE)); if(!items.isEmpty()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 72bd9f5e4..549b7cacb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -39,7 +39,7 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(!Objects.equals(this.name, this.nameBefore) && this.sendUpdateWithInterval()){ this.nameBefore = this.name; this.markDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index bc1617e78..5a09920e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -44,7 +44,7 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I @Override public void updateEntity(){ super.updateEntity(); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ if(this.amount > 0){ if(this.slots[0] == null){ int toSet = this.amount > 64 ? 64 : this.amount; @@ -87,7 +87,7 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I int xp = this.buttonAmounts[buttonID] == -999 ? this.getPlayerXP(player)/ItemSolidifiedExperience.SOLID_XP_AMOUNT : this.buttonAmounts[buttonID]; if(this.amount < Short.MAX_VALUE-xp && this.getPlayerXP(player) >= ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp){ this.addPlayerXP(player, -(ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp)); - if(!worldObj.isRemote){ + if(!this.worldObj.isRemote){ this.amount += xp; } } @@ -116,11 +116,11 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I * @param amount The Amount */ private void addPlayerXP(EntityPlayer player, int amount){ - int experience = getPlayerXP(player)+amount; + int experience = this.getPlayerXP(player)+amount; player.experienceTotal = experience; int level = 0; - while(getExperienceForLevel(level) <= experience){ + while(this.getExperienceForLevel(level) <= experience){ level++; } player.experienceLevel = level-1; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index 43e17e607..372c81316 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -37,11 +37,11 @@ public class FluidStateMapper extends StateMapperBase implements ItemMeshDefinit @Override protected ModelResourceLocation getModelResourceLocation(IBlockState state){ - return location; + return this.location; } @Override public ModelResourceLocation getModelLocation(ItemStack stack){ - return location; + return this.location; } } From d6bc78fffb4c4f1c1c8b70a7c4da4f41047e2a60 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 2 May 2016 22:16:58 +0200 Subject: [PATCH 058/322] Started work on forge block models. Could still take a while though. --- .../blockstates/blockAtomicReconstructor.json | 10 ----- .../blockstates/blockBlackLotus.json | 5 --- .../blockstates/blockBreaker.json | 10 ----- .../blockstates/blockCanola.json | 12 ----- .../blockstates/blockCanolaPress.json | 5 --- .../blockstates/blockChiseledQuartzSlab.json | 6 --- .../blockstates/blockChiseledQuartzStair.json | 44 ------------------- .../blockstates/blockChiseledQuartzWall.json | 36 --------------- .../blockstates/blockCoalGenerator.json | 20 +++++++-- .../blockstates/blockCoffee.json | 12 ----- .../blockstates/blockCoffeeMachine.json | 8 ---- .../blockstates/blockColoredLamp.json | 20 --------- .../blockstates/blockColoredLampOn.json | 20 --------- .../blockstates/blockCompost.json | 5 --- .../blockstates/blockCrystal.json | 10 ----- .../blockstates/blockDirectionalBreaker.json | 10 ----- .../blockstates/blockDropper.json | 10 ----- .../blockstates/blockEnergizer.json | 15 ++++++- .../blockstates/blockEnervator.json | 15 ++++++- .../blockstates/blockFeeder.json | 5 --- .../blockstates/blockFermentingBarrel.json | 5 --- .../blockstates/blockFireworkBox.json | 5 --- .../blockstates/blockFishingNet.json | 5 --- .../blockstates/blockFlax.json | 12 ----- .../blockstates/blockFluidCollector.json | 10 ----- .../blockstates/blockFluidPlacer.json | 10 ----- .../blockstates/blockFurnaceDouble.json | 36 +++++++++++---- .../blockstates/blockFurnaceSolar.json | 5 --- .../blockstates/blockGiantChest.json | 5 --- .../blockstates/blockGreenhouseGlass.json | 13 +++++- .../blockstates/blockGrinder.json | 20 +++++++-- .../blockstates/blockGrinderDouble.json | 20 +++++++-- .../blockstates/blockHeatCollector.json | 15 ++++++- .../blockstates/blockInputter.json | 13 +++++- .../blockstates/blockInputterAdvanced.json | 13 +++++- .../blockstates/blockItemRepairer.json | 15 ++++++- .../blockstates/blockLampPowerer.json | 10 ----- .../blockstates/blockLaserRelay.json | 10 ----- .../blockLavaFactoryController.json | 15 ++++++- .../blockstates/blockLeafGenerator.json | 13 +++++- .../blockstates/blockMiner.json | 15 ++++++- .../blockstates/blockMisc.json | 14 ------ .../blockstates/blockOilGenerator.json | 20 +++++++-- .../blockstates/blockPhantomBooster.json | 5 --- .../blockstates/blockPhantomBreaker.json | 5 --- .../blockstates/blockPhantomEnergyface.json | 5 --- .../blockstates/blockPhantomLiquiface.json | 5 --- .../blockstates/blockPhantomPlacer.json | 5 --- .../blockstates/blockPhantomface.json | 5 --- .../blockstates/blockPillarQuartzSlab.json | 6 --- .../blockstates/blockPillarQuartzStair.json | 44 ------------------- .../blockstates/blockPillarQuartzWall.json | 36 --------------- .../blockstates/blockPlacer.json | 10 ----- .../blockstates/blockQuartzSlab.json | 6 --- .../blockstates/blockQuartzStair.json | 44 ------------------- .../blockstates/blockQuartzWall.json | 36 --------------- .../blockstates/blockRangedCollector.json | 5 --- .../blockstates/blockRice.json | 12 ----- .../blockstates/blockSmileyCloud.json | 12 ----- .../blockTestifiBucksGreenFence.json | 36 --------------- .../blockTestifiBucksGreenSlab.json | 6 --- .../blockTestifiBucksGreenStairs.json | 44 ------------------- .../blockTestifiBucksGreenWall.json | 5 --- .../blockTestifiBucksWhiteFence.json | 36 --------------- .../blockTestifiBucksWhiteSlab.json | 6 --- .../blockTestifiBucksWhiteStairs.json | 44 ------------------- .../blockTestifiBucksWhiteWall.json | 5 --- .../blockstates/blockTreasureChest.json | 8 ---- .../blockstates/blockWild.json | 8 ---- .../blockstates/blockXPSolidifier.json | 28 +++++++++--- .../block/blockAtomicReconstructor.json | 12 ----- .../models/block/blockBlackLotus.json | 6 --- .../models/block/blockBreaker.json | 12 ----- .../models/block/blockCanolaPress.json | 12 ----- .../models/block/blockCanolaStage1.json | 6 --- .../models/block/blockCanolaStage2.json | 6 --- .../models/block/blockCanolaStage3.json | 6 --- .../models/block/blockCanolaStage4.json | 6 --- .../block/blockChiseledQuartzSlabBottom.json | 8 ---- .../block/blockChiseledQuartzSlabTop.json | 8 ---- .../block/blockChiseledQuartzStairs.json | 8 ---- .../block/blockChiseledQuartzStairsInner.json | 8 ---- .../block/blockChiseledQuartzStairsOuter.json | 8 ---- .../blockChiseledQuartzWallInventory.json | 6 --- .../block/blockChiseledQuartzWallNorth.json | 6 --- .../blockChiseledQuartzWallNorthEast.json | 6 --- ...kChiseledQuartzWallNorthEastSouthWest.json | 6 --- .../blockChiseledQuartzWallNorthSouth.json | 6 --- ...lockChiseledQuartzWallNorthSouthAbove.json | 6 --- ...blockChiseledQuartzWallNorthSouthEast.json | 6 --- ...kChiseledQuartzWallNorthSouthEastWest.json | 6 --- .../block/blockChiseledQuartzWallPost.json | 6 --- .../models/block/blockCoalGenerator.json | 12 ----- .../models/block/blockCoffeeStage1.json | 6 --- .../models/block/blockCoffeeStage2.json | 6 --- .../models/block/blockCoffeeStage3.json | 6 --- .../models/block/blockCoffeeStage4.json | 6 --- .../models/block/blockCoffeeStage5.json | 6 --- .../models/block/blockCoffeeStage6.json | 6 --- .../models/block/blockColoredLampBlack.json | 6 --- .../models/block/blockColoredLampBlackOn.json | 6 --- .../models/block/blockColoredLampBlue.json | 6 --- .../models/block/blockColoredLampBlueOn.json | 6 --- .../models/block/blockColoredLampBrown.json | 6 --- .../models/block/blockColoredLampBrownOn.json | 6 --- .../models/block/blockColoredLampCyan.json | 6 --- .../models/block/blockColoredLampCyanOn.json | 6 --- .../models/block/blockColoredLampGray.json | 6 --- .../models/block/blockColoredLampGrayOn.json | 6 --- .../models/block/blockColoredLampGreen.json | 6 --- .../models/block/blockColoredLampGreenOn.json | 6 --- .../block/blockColoredLampLightBlue.json | 6 --- .../block/blockColoredLampLightBlueOn.json | 6 --- .../block/blockColoredLampLightGray.json | 6 --- .../block/blockColoredLampLightGrayOn.json | 6 --- .../models/block/blockColoredLampLime.json | 6 --- .../models/block/blockColoredLampLimeOn.json | 6 --- .../models/block/blockColoredLampMagenta.json | 6 --- .../block/blockColoredLampMagentaOn.json | 6 --- .../models/block/blockColoredLampOrange.json | 6 --- .../block/blockColoredLampOrangeOn.json | 6 --- .../models/block/blockColoredLampPink.json | 6 --- .../models/block/blockColoredLampPinkOn.json | 6 --- .../models/block/blockColoredLampPurple.json | 6 --- .../block/blockColoredLampPurpleOn.json | 6 --- .../models/block/blockColoredLampRed.json | 6 --- .../models/block/blockColoredLampRedOn.json | 6 --- .../models/block/blockColoredLampWhite.json | 6 --- .../models/block/blockColoredLampWhiteOn.json | 6 --- .../models/block/blockColoredLampYellow.json | 6 --- .../block/blockColoredLampYellowOn.json | 6 --- .../models/block/blockCrystalBlack.json | 6 --- .../models/block/blockCrystalBlue.json | 6 --- .../models/block/blockCrystalGreen.json | 6 --- .../models/block/blockCrystalLightBlue.json | 6 --- .../models/block/blockCrystalRed.json | 6 --- .../models/block/blockCrystalWhite.json | 6 --- .../models/block/blockDirectionalBreaker.json | 12 ----- .../models/block/blockDropper.json | 12 ----- .../models/block/blockEnergizer.json | 12 ----- .../models/block/blockEnervator.json | 12 ----- .../models/block/blockFeeder.json | 12 ----- .../models/block/blockFermentingBarrel.json | 12 ----- .../models/block/blockFireworkBox.json | 12 ----- .../models/block/blockFlaxStage1.json | 6 --- .../models/block/blockFlaxStage2.json | 6 --- .../models/block/blockFlaxStage3.json | 6 --- .../models/block/blockFlaxStage4.json | 6 --- .../models/block/blockFlaxStage5.json | 6 --- .../models/block/blockFlaxStage6.json | 6 --- .../models/block/blockFluidCollector.json | 12 ----- .../models/block/blockFluidPlacer.json | 12 ----- .../models/block/blockFurnaceDouble.json | 12 ----- .../models/block/blockFurnaceDoubleOn.json | 12 ----- .../models/block/blockGiantChest.json | 12 ----- .../models/block/blockGreenhouseGlass.json | 6 --- .../models/block/blockGrinder.json | 12 ----- .../models/block/blockGrinderDouble.json | 12 ----- .../models/block/blockGrinderDoubleOn.json | 12 ----- .../models/block/blockGrinderOn.json | 12 ----- .../models/block/blockHeatCollector.json | 12 ----- .../models/block/blockInputter.json | 6 --- .../models/block/blockInputterAdvanced.json | 6 --- .../models/block/blockItemRepairer.json | 12 ----- .../models/block/blockLampPowerer.json | 12 ----- .../block/blockLavaFactoryController.json | 12 ----- .../models/block/blockLeafGenerator.json | 12 ----- .../models/block/blockMiner.json | 12 ----- .../models/block/blockMiscBlackQuartz.json | 6 --- .../block/blockMiscBlackQuartzChiseled.json | 6 --- .../block/blockMiscBlackQuartzPillar.json | 6 --- .../models/block/blockMiscCharcoal.json | 6 --- .../models/block/blockMiscEnderCasing.json | 6 --- .../models/block/blockMiscEnderpearl.json | 6 --- .../models/block/blockMiscIronCasing.json | 6 --- .../block/blockMiscLavaFactoryCase.json | 6 --- .../models/block/blockMiscOreBlackQuartz.json | 6 --- .../models/block/blockMiscWoodCasing.json | 6 --- .../models/block/blockOilGenerator.json | 12 ----- .../models/block/blockPhantomBreaker.json | 6 --- .../models/block/blockPhantomEnergyface.json | 6 --- .../models/block/blockPhantomLiquiface.json | 6 --- .../models/block/blockPhantomPlacer.json | 6 --- .../models/block/blockPhantomface.json | 6 --- .../block/blockPillarQuartzSlabBottom.json | 8 ---- .../block/blockPillarQuartzSlabTop.json | 8 ---- .../models/block/blockPillarQuartzStairs.json | 8 ---- .../block/blockPillarQuartzStairsInner.json | 8 ---- .../block/blockPillarQuartzStairsOuter.json | 8 ---- .../block/blockPillarQuartzWallInventory.json | 6 --- .../block/blockPillarQuartzWallNorth.json | 6 --- .../block/blockPillarQuartzWallNorthEast.json | 6 --- .../blockPillarQuartzWallNorthSouth.json | 6 --- .../blockPillarQuartzWallNorthSouthAbove.json | 6 --- .../blockPillarQuartzWallNorthSouthEast.json | 6 --- ...ockPillarQuartzWallNorthSouthEastWest.json | 6 --- .../block/blockPillarQuartzWallPost.json | 6 --- .../models/block/blockPlacer.json | 12 ----- .../models/block/blockQuartzSlabBottom.json | 8 ---- .../models/block/blockQuartzSlabTop.json | 8 ---- .../models/block/blockQuartzStairs.json | 8 ---- .../models/block/blockQuartzStairsInner.json | 8 ---- .../models/block/blockQuartzStairsOuter.json | 8 ---- .../block/blockQuartzWallInventory.json | 6 --- .../models/block/blockQuartzWallNorth.json | 6 --- .../block/blockQuartzWallNorthEast.json | 6 --- .../block/blockQuartzWallNorthSouth.json | 6 --- .../block/blockQuartzWallNorthSouthAbove.json | 6 --- .../block/blockQuartzWallNorthSouthEast.json | 6 --- .../blockQuartzWallNorthSouthEastWest.json | 6 --- .../models/block/blockQuartzWallPost.json | 6 --- .../models/block/blockRangedCollector.json | 6 --- .../models/block/blockRiceStage1.json | 6 --- .../models/block/blockRiceStage2.json | 6 --- .../models/block/blockRiceStage3.json | 6 --- .../models/block/blockRiceStage4.json | 6 --- .../models/block/blockRiceStage5.json | 6 --- .../models/block/blockRiceStage6.json | 6 --- .../blockTestifiBucksGreenFenceInventory.json | 6 --- .../blockTestifiBucksGreenFenceNorth.json | 6 --- .../blockTestifiBucksGreenFenceNorthEast.json | 6 --- ...blockTestifiBucksGreenFenceNorthSouth.json | 6 --- ...TestifiBucksGreenFenceNorthSouthAbove.json | 6 --- ...kTestifiBucksGreenFenceNorthSouthEast.json | 6 --- ...tifiBucksGreenFenceNorthSouthEastWest.json | 6 --- .../blockTestifiBucksGreenFencePost.json | 6 --- .../blockTestifiBucksGreenSlabBottom.json | 8 ---- .../block/blockTestifiBucksGreenSlabTop.json | 8 ---- .../block/blockTestifiBucksGreenStairs.json | 8 ---- .../blockTestifiBucksGreenStairsInner.json | 8 ---- .../blockTestifiBucksGreenStairsOuter.json | 8 ---- .../block/blockTestifiBucksGreenWall.json | 6 --- .../blockTestifiBucksWhiteFenceInventory.json | 6 --- .../blockTestifiBucksWhiteFenceNorth.json | 6 --- .../blockTestifiBucksWhiteFenceNorthEast.json | 6 --- ...blockTestifiBucksWhiteFenceNorthSouth.json | 6 --- ...TestifiBucksWhiteFenceNorthSouthAbove.json | 6 --- ...kTestifiBucksWhiteFenceNorthSouthEast.json | 6 --- ...tifiBucksWhiteFenceNorthSouthEastWest.json | 6 --- .../blockTestifiBucksWhiteFencePost.json | 6 --- .../blockTestifiBucksWhiteSlabBottom.json | 8 ---- .../block/blockTestifiBucksWhiteSlabTop.json | 8 ---- .../block/blockTestifiBucksWhiteStairs.json | 8 ---- .../blockTestifiBucksWhiteStairsInner.json | 8 ---- .../blockTestifiBucksWhiteStairsOuter.json | 8 ---- .../block/blockTestifiBucksWhiteWall.json | 6 --- .../models/block/blockTreasureChest.json | 12 ----- .../models/block/blockXPSolidifier.json | 12 ----- .../models/item/blockAtomicReconstructor.json | 10 ----- .../models/item/blockBlackLotus.json | 18 -------- .../models/item/blockBreaker.json | 10 ----- .../models/item/blockCanola.json | 18 -------- .../models/item/blockCanolaPress.json | 10 ----- .../models/item/blockChiseledQuartzSlab.json | 10 ----- .../models/item/blockChiseledQuartzStair.json | 13 ------ .../models/item/blockChiseledQuartzWall.json | 10 ----- .../models/item/blockCoalGenerator.json | 10 ----- .../models/item/blockCoffee.json | 18 -------- .../models/item/blockCoffeeMachine.json | 10 ----- .../models/item/blockColoredLampBlack.json | 10 ----- .../models/item/blockColoredLampBlue.json | 10 ----- .../models/item/blockColoredLampBrown.json | 10 ----- .../models/item/blockColoredLampCyan.json | 10 ----- .../models/item/blockColoredLampGray.json | 10 ----- .../models/item/blockColoredLampGreen.json | 10 ----- .../item/blockColoredLampLightBlue.json | 10 ----- .../item/blockColoredLampLightGray.json | 10 ----- .../models/item/blockColoredLampLime.json | 10 ----- .../models/item/blockColoredLampMagenta.json | 10 ----- .../models/item/blockColoredLampOnBlack.json | 10 ----- .../models/item/blockColoredLampOnBlue.json | 10 ----- .../models/item/blockColoredLampOnBrown.json | 10 ----- .../models/item/blockColoredLampOnCyan.json | 10 ----- .../models/item/blockColoredLampOnGray.json | 10 ----- .../models/item/blockColoredLampOnGreen.json | 10 ----- .../item/blockColoredLampOnLightBlue.json | 10 ----- .../item/blockColoredLampOnLightGray.json | 10 ----- .../models/item/blockColoredLampOnLime.json | 10 ----- .../item/blockColoredLampOnMagenta.json | 10 ----- .../models/item/blockColoredLampOnOrange.json | 10 ----- .../models/item/blockColoredLampOnPink.json | 10 ----- .../models/item/blockColoredLampOnPurple.json | 10 ----- .../models/item/blockColoredLampOnRed.json | 10 ----- .../models/item/blockColoredLampOnWhite.json | 10 ----- .../models/item/blockColoredLampOnYellow.json | 10 ----- .../models/item/blockColoredLampOrange.json | 10 ----- .../models/item/blockColoredLampPink.json | 10 ----- .../models/item/blockColoredLampPurple.json | 10 ----- .../models/item/blockColoredLampRed.json | 10 ----- .../models/item/blockColoredLampWhite.json | 10 ----- .../models/item/blockColoredLampYellow.json | 10 ----- .../models/item/blockCompost.json | 10 ----- .../models/item/blockCrystalBlack.json | 10 ----- .../models/item/blockCrystalBlue.json | 10 ----- .../models/item/blockCrystalGreen.json | 10 ----- .../models/item/blockCrystalLightBlue.json | 10 ----- .../models/item/blockCrystalRed.json | 10 ----- .../models/item/blockCrystalWhite.json | 10 ----- .../models/item/blockDirectionalBreaker.json | 10 ----- .../models/item/blockDropper.json | 10 ----- .../models/item/blockEnergizer.json | 10 ----- .../models/item/blockEnervator.json | 10 ----- .../models/item/blockFeeder.json | 10 ----- .../models/item/blockFermentingBarrel.json | 10 ----- .../models/item/blockFireworkBox.json | 10 ----- .../models/item/blockFishingNet.json | 15 ------- .../models/item/blockFlax.json | 18 -------- .../models/item/blockFluidCollector.json | 10 ----- .../models/item/blockFluidPlacer.json | 10 ----- .../models/item/blockFurnaceDouble.json | 10 ----- .../models/item/blockFurnaceSolar.json | 15 ------- .../models/item/blockGiantChest.json | 10 ----- .../models/item/blockGreenhouseGlass.json | 10 ----- .../models/item/blockGrinder.json | 10 ----- .../models/item/blockGrinderDouble.json | 10 ----- .../models/item/blockHeatCollector.json | 10 ----- .../models/item/blockInputter.json | 10 ----- .../models/item/blockInputterAdvanced.json | 10 ----- .../models/item/blockItemRepairer.json | 10 ----- .../models/item/blockLampPowerer.json | 10 ----- .../models/item/blockLaserRelay.json | 10 ----- .../item/blockLavaFactoryController.json | 10 ----- .../models/item/blockLeafGenerator.json | 10 ----- .../models/item/blockMiner.json | 10 ----- .../models/item/blockMiscBlackQuartz.json | 10 ----- .../item/blockMiscBlackQuartzChiseled.json | 10 ----- .../item/blockMiscBlackQuartzPillar.json | 10 ----- .../models/item/blockMiscCharcoal.json | 10 ----- .../models/item/blockMiscEnderCasing.json | 10 ----- .../models/item/blockMiscEnderpearl.json | 10 ----- .../models/item/blockMiscIronCasing.json | 10 ----- .../models/item/blockMiscLavaFactoryCase.json | 10 ----- .../models/item/blockMiscOreBlackQuartz.json | 10 ----- .../models/item/blockMiscWoodCasing.json | 10 ----- .../models/item/blockOilGenerator.json | 10 ----- .../models/item/blockPhantomBooster.json | 10 ----- .../models/item/blockPhantomBreaker.json | 10 ----- .../models/item/blockPhantomEnergyface.json | 10 ----- .../models/item/blockPhantomLiquiface.json | 10 ----- .../models/item/blockPhantomPlacer.json | 10 ----- .../models/item/blockPhantomface.json | 10 ----- .../models/item/blockPillarQuartzSlab.json | 10 ----- .../models/item/blockPillarQuartzStair.json | 13 ------ .../models/item/blockPillarQuartzWall.json | 10 ----- .../models/item/blockPlacer.json | 10 ----- .../models/item/blockQuartzSlab.json | 10 ----- .../models/item/blockQuartzStair.json | 13 ------ .../models/item/blockQuartzWall.json | 10 ----- .../models/item/blockRangedCollector.json | 10 ----- .../models/item/blockRice.json | 18 -------- .../models/item/blockSmileyCloud.json | 10 ----- .../item/blockTestifiBucksGreenFence.json | 10 ----- .../item/blockTestifiBucksGreenSlab.json | 10 ----- .../item/blockTestifiBucksGreenStairs.json | 13 ------ .../item/blockTestifiBucksGreenWall.json | 10 ----- .../item/blockTestifiBucksWhiteFence.json | 10 ----- .../item/blockTestifiBucksWhiteSlab.json | 10 ----- .../item/blockTestifiBucksWhiteStairs.json | 13 ------ .../item/blockTestifiBucksWhiteWall.json | 10 ----- .../models/item/blockTreasureChest.json | 10 ----- .../models/item/blockWildCanola.json | 18 -------- .../models/item/blockWildCoffee.json | 18 -------- .../models/item/blockWildFlax.json | 18 -------- .../models/item/blockWildRice.json | 18 -------- .../models/item/blockXPSolidifier.json | 10 ----- 365 files changed, 240 insertions(+), 3369 deletions(-) delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockMisc.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockRice.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockWild.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockAtomicReconstructor.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockBlackLotus.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCanolaPress.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage1.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage2.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage3.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage4.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabBottom.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabTop.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsInner.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsOuter.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEastSouthWest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthAbove.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEastWest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCoalGenerator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage1.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage2.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage3.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage4.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage5.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage6.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlack.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlackOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlueOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrown.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrownOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyan.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyanOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGray.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGrayOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreen.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreenOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlueOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGray.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGrayOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLime.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLimeOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagenta.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagentaOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrange.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrangeOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPink.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPinkOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurple.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurpleOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRed.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRedOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhite.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhiteOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellow.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellowOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlack.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCrystalGreen.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCrystalLightBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCrystalRed.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockCrystalWhite.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockDirectionalBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockDropper.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockEnergizer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockEnervator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFeeder.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFermentingBarrel.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFireworkBox.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage1.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage2.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage3.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage4.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage5.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage6.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFluidCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFluidPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDouble.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDoubleOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockGiantChest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockGreenhouseGlass.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockGrinder.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockGrinderDouble.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockGrinderDoubleOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockGrinderOn.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockHeatCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockInputter.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockInputterAdvanced.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockItemRepairer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockLampPowerer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockLavaFactoryController.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockLeafGenerator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiner.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartz.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzChiseled.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzPillar.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscCharcoal.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderCasing.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderpearl.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscIronCasing.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscLavaFactoryCase.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscOreBlackQuartz.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockMiscWoodCasing.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockOilGenerator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPhantomBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPhantomEnergyface.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPhantomLiquiface.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPhantomPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPhantomface.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabBottom.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabTop.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsInner.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsOuter.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthAbove.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEastWest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabBottom.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabTop.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsInner.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsOuter.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthAbove.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEastWest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockRangedCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockRiceStage1.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockRiceStage2.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockRiceStage3.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockRiceStage4.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockRiceStage5.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockRiceStage6.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthAbove.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEastWest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabBottom.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabTop.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsInner.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsOuter.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouth.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthAbove.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEast.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEastWest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabBottom.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabTop.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsInner.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsOuter.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTreasureChest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockXPSolidifier.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockAtomicReconstructor.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockBlackLotus.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCanola.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCanolaPress.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzStair.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCoalGenerator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCoffee.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCoffeeMachine.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlack.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBrown.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampCyan.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGray.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGreen.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightGray.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLime.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampMagenta.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlack.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBrown.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnCyan.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGray.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGreen.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightGray.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLime.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnMagenta.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnOrange.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPink.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPurple.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnRed.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnWhite.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnYellow.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOrange.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPink.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPurple.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampRed.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampWhite.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockColoredLampYellow.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCompost.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlack.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCrystalGreen.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCrystalLightBlue.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCrystalRed.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockCrystalWhite.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockDirectionalBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockDropper.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockEnergizer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockEnervator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFeeder.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFermentingBarrel.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFireworkBox.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFishingNet.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFlax.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFluidCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFluidPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFurnaceDouble.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockFurnaceSolar.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockGiantChest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockGreenhouseGlass.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockGrinder.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockGrinderDouble.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockHeatCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockInputter.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockInputterAdvanced.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockItemRepairer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockLampPowerer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockLaserRelay.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockLavaFactoryController.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockLeafGenerator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiner.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartz.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzChiseled.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzPillar.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscCharcoal.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderCasing.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderpearl.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscIronCasing.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscLavaFactoryCase.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscOreBlackQuartz.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockMiscWoodCasing.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockOilGenerator.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPhantomBooster.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPhantomBreaker.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPhantomEnergyface.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPhantomLiquiface.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPhantomPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPhantomface.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzStair.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPlacer.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockQuartzSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockQuartzStair.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockRangedCollector.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockRice.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockSmileyCloud.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteSlab.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteStairs.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteWall.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTreasureChest.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockWildCanola.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockWildCoffee.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockWildFlax.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockWildRice.json delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockXPSolidifier.json diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json b/src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json deleted file mode 100644 index 661455b79..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockAtomicReconstructor", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockAtomicReconstructor", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockAtomicReconstructor", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockAtomicReconstructor", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockAtomicReconstructor", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockAtomicReconstructor", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json b/src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json deleted file mode 100644 index 5f66277c0..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockBlackLotus" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json b/src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json deleted file mode 100644 index 396b125a6..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockBreaker", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockBreaker", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockBreaker", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockBreaker", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockBreaker", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockBreaker", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json deleted file mode 100644 index 2e1a8012b..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "age=0": { "model": "actuallyadditions:blockCanolaStage1" }, - "age=1": { "model": "actuallyadditions:blockCanolaStage1" }, - "age=2": { "model": "actuallyadditions:blockCanolaStage2" }, - "age=3": { "model": "actuallyadditions:blockCanolaStage2" }, - "age=4": { "model": "actuallyadditions:blockCanolaStage2" }, - "age=5": { "model": "actuallyadditions:blockCanolaStage3" }, - "age=6": { "model": "actuallyadditions:blockCanolaStage3" }, - "age=7": { "model": "actuallyadditions:blockCanolaStage4" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json deleted file mode 100644 index 81b6bb56e..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockCanolaPress" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json deleted file mode 100644 index 47f319371..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockChiseledQuartzSlabBottom" }, - "meta=1": { "model": "actuallyadditions:blockChiseledQuartzSlabTop" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json deleted file mode 100644 index 059ecea9b..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs" }, - "facing=west,half=bottom,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter" }, - "facing=west,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter" }, - "facing=north,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner" }, - "facing=west,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner" }, - "facing=north,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "actuallyadditions:blockChiseledQuartzStairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "actuallyadditions:blockChiseledQuartzStairsOuter", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "actuallyadditions:blockChiseledQuartzStairsInner", "x": 180, "uvlock": true } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json deleted file mode 100644 index a52a6b713..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallPost" }, - "east=false,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorth" }, - "east=true,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouth" }, - "east=true,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouth", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEastWest" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallPost" }, - "east=false,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorth" }, - "east=true,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthAbove" }, - "east=true,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthAbove", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockChiseledQuartzWallNorthSouthEastWest" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json index 629168a6e..10559a6c3 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json @@ -1,6 +1,20 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockCoalGenerator", + "bottom": "actuallyadditions:blocks/blockCoalGeneratorBottom", + "top": "actuallyadditions:blocks/blockCoalGeneratorTop" + }, + "transform": "forge:default-block" + }, "variants": { - "meta=0": { "model": "actuallyadditions:blockCoalGenerator" }, - "meta=1": { "model": "actuallyadditions:blockCoalGenerator" } + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": {} + } } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json deleted file mode 100644 index 337a81e62..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "age=0": { "model": "actuallyadditions:blockCoffeeStage1" }, - "age=1": { "model": "actuallyadditions:blockCoffeeStage2" }, - "age=2": { "model": "actuallyadditions:blockCoffeeStage2" }, - "age=3": { "model": "actuallyadditions:blockCoffeeStage3" }, - "age=4": { "model": "actuallyadditions:blockCoffeeStage4" }, - "age=5": { "model": "actuallyadditions:blockCoffeeStage4" }, - "age=6": { "model": "actuallyadditions:blockCoffeeStage5" }, - "age=7": { "model": "actuallyadditions:blockCoffeeStage6" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json deleted file mode 100644 index a511e2211..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "meta=1": { "model": "actuallyadditions:blockCoffeeMachine", "y": 0 }, - "meta=0": { "model": "actuallyadditions:blockCoffeeMachine", "y": 180 }, - "meta=3": { "model": "actuallyadditions:blockCoffeeMachine", "y": 270 }, - "meta=2": { "model": "actuallyadditions:blockCoffeeMachine", "y": 90 } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json b/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json deleted file mode 100644 index 243dff666..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockColoredLampWhite" }, - "meta=1": { "model": "actuallyadditions:blockColoredLampOrange" }, - "meta=2": { "model": "actuallyadditions:blockColoredLampMagenta" }, - "meta=3": { "model": "actuallyadditions:blockColoredLampLightBlue" }, - "meta=4": { "model": "actuallyadditions:blockColoredLampYellow" }, - "meta=5": { "model": "actuallyadditions:blockColoredLampLime" }, - "meta=6": { "model": "actuallyadditions:blockColoredLampPink" }, - "meta=7": { "model": "actuallyadditions:blockColoredLampGray" }, - "meta=8": { "model": "actuallyadditions:blockColoredLampLightGray" }, - "meta=9": { "model": "actuallyadditions:blockColoredLampCyan" }, - "meta=10": { "model": "actuallyadditions:blockColoredLampPurple" }, - "meta=11": { "model": "actuallyadditions:blockColoredLampBlue" }, - "meta=12": { "model": "actuallyadditions:blockColoredLampBrown" }, - "meta=13": { "model": "actuallyadditions:blockColoredLampGreen" }, - "meta=14": { "model": "actuallyadditions:blockColoredLampRed" }, - "meta=15": { "model": "actuallyadditions:blockColoredLampBlack" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json b/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json deleted file mode 100644 index d798a5dd6..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockColoredLampWhiteOn" }, - "meta=1": { "model": "actuallyadditions:blockColoredLampOrangeOn" }, - "meta=2": { "model": "actuallyadditions:blockColoredLampMagentaOn" }, - "meta=3": { "model": "actuallyadditions:blockColoredLampLightBlueOn" }, - "meta=4": { "model": "actuallyadditions:blockColoredLampYellowOn" }, - "meta=5": { "model": "actuallyadditions:blockColoredLampLimeOn" }, - "meta=6": { "model": "actuallyadditions:blockColoredLampPinkOn" }, - "meta=7": { "model": "actuallyadditions:blockColoredLampGrayOn" }, - "meta=8": { "model": "actuallyadditions:blockColoredLampLightGrayOn" }, - "meta=9": { "model": "actuallyadditions:blockColoredLampCyanOn" }, - "meta=10": { "model": "actuallyadditions:blockColoredLampPurpleOn" }, - "meta=11": { "model": "actuallyadditions:blockColoredLampBlueOn" }, - "meta=12": { "model": "actuallyadditions:blockColoredLampBrownOn" }, - "meta=13": { "model": "actuallyadditions:blockColoredLampGreenOn" }, - "meta=14": { "model": "actuallyadditions:blockColoredLampRedOn" }, - "meta=15": { "model": "actuallyadditions:blockColoredLampBlackOn" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json deleted file mode 100644 index 9c31ecfa9..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockCompost"} - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json deleted file mode 100644 index c08e793eb..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockCrystalRed" }, - "meta=1": { "model": "actuallyadditions:blockCrystalBlue" }, - "meta=2": { "model": "actuallyadditions:blockCrystalLightBlue" }, - "meta=3": { "model": "actuallyadditions:blockCrystalBlack" }, - "meta=4": { "model": "actuallyadditions:blockCrystalGreen" }, - "meta=5": { "model": "actuallyadditions:blockCrystalWhite" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json b/src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json deleted file mode 100644 index 56bb9e166..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockDirectionalBreaker", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockDirectionalBreaker", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockDirectionalBreaker", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockDirectionalBreaker", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockDirectionalBreaker", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockDirectionalBreaker", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json b/src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json deleted file mode 100644 index fe8697b5b..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockDropper", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockDropper", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockDropper", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockDropper", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockDropper", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockDropper", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockEnergizer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockEnergizer.json index 37a15905b..bda07cd88 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockEnergizer.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockEnergizer.json @@ -1,5 +1,16 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockEnergizerSide", + "bottom": "actuallyadditions:blocks/blockEnergizer", + "top": "actuallyadditions:blocks/blockEnergizerTop" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockEnergizer" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockEnervator.json b/src/main/resources/assets/actuallyadditions/blockstates/blockEnervator.json index e8bae04d1..db9336579 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockEnervator.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockEnervator.json @@ -1,5 +1,16 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockEnervatorSide", + "bottom": "actuallyadditions:blocks/blockEnervator", + "top": "actuallyadditions:blocks/blockEnervatorTop" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockEnervator" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json deleted file mode 100644 index aa07fa7dc..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockFeeder" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json deleted file mode 100644 index 3f6c9ff84..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockFermentingBarrel" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json deleted file mode 100644 index 3e27a417c..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockFireworkBox" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json deleted file mode 100644 index bb9ce51ee..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockFishingNet"} - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json deleted file mode 100644 index 649965b40..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "age=0": { "model": "actuallyadditions:blockFlaxStage1" }, - "age=1": { "model": "actuallyadditions:blockFlaxStage2" }, - "age=2": { "model": "actuallyadditions:blockFlaxStage2" }, - "age=3": { "model": "actuallyadditions:blockFlaxStage3" }, - "age=4": { "model": "actuallyadditions:blockFlaxStage4" }, - "age=5": { "model": "actuallyadditions:blockFlaxStage4" }, - "age=6": { "model": "actuallyadditions:blockFlaxStage5" }, - "age=7": { "model": "actuallyadditions:blockFlaxStage6" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json deleted file mode 100644 index b6b6a8108..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockFluidCollector", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockFluidCollector", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockFluidCollector", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockFluidCollector", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockFluidCollector", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockFluidCollector", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json deleted file mode 100644 index de0a72aba..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockFluidPlacer", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockFluidPlacer", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockFluidPlacer", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockFluidPlacer", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockFluidPlacer", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockFluidPlacer", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceDouble.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceDouble.json index bd12b0819..4d04cfcb0 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceDouble.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceDouble.json @@ -1,12 +1,30 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockFurnaceDouble", + "down": "#particle", + "up": "actuallyadditions:blocks/blockFurnaceDoubleTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockFurnaceDoubleFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, "variants": { - "meta=0": { "model": "actuallyadditions:blockFurnaceDouble", "y": 0 }, - "meta=1": { "model": "actuallyadditions:blockFurnaceDouble", "y": 180 }, - "meta=2": { "model": "actuallyadditions:blockFurnaceDouble", "y": -90 }, - "meta=3": { "model": "actuallyadditions:blockFurnaceDouble", "y": 90 }, - "meta=4": { "model": "actuallyadditions:blockFurnaceDoubleOn", "y": 0 }, - "meta=5": { "model": "actuallyadditions:blockFurnaceDoubleOn", "y": 180 }, - "meta=6": { "model": "actuallyadditions:blockFurnaceDoubleOn", "y": -90 }, - "meta=7": { "model": "actuallyadditions:blockFurnaceDoubleOn", "y": 90 } + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "y" : 0 }, + "1": { "y" : 180 }, + "2": { "y" : 270 }, + "3": { "y" : 90 }, + "4": { "y" : 0, "textures": { "north": "actuallyadditions:blocks/blockFurnaceDoubleOn" } }, + "5": { "y" : 180, "textures": { "north": "actuallyadditions:blocks/blockFurnaceDoubleOn" } }, + "6": { "y" : 270, "textures": { "north": "actuallyadditions:blocks/blockFurnaceDoubleOn" } }, + "7": { "y" : 90, "textures": { "north": "actuallyadditions:blocks/blockFurnaceDoubleOn" } } + } } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json deleted file mode 100644 index 5ce3fe382..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockFurnaceSolar" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json b/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json deleted file mode 100644 index 00ab60b35..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockGiantChest" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockGreenhouseGlass.json b/src/main/resources/assets/actuallyadditions/blockstates/blockGreenhouseGlass.json index efe19b072..94c51c62f 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockGreenhouseGlass.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockGreenhouseGlass.json @@ -1,5 +1,14 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockGreenhouseGlass" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockGreenhouseGlass" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockGrinder.json b/src/main/resources/assets/actuallyadditions/blockstates/blockGrinder.json index 1d8694186..cefd418bb 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockGrinder.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockGrinder.json @@ -1,6 +1,20 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockGrinder", + "bottom": "actuallyadditions:blocks/blockGrinderBottom", + "top": "actuallyadditions:blocks/blockGrinderTop" + }, + "transform": "forge:default-block" + }, "variants": { - "meta=0": { "model": "actuallyadditions:blockGrinder" }, - "meta=1": { "model": "actuallyadditions:blockGrinderOn" } + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": { "textures": { "top": "actuallyadditions:blocks/blockGrinderOn" } } + } } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockGrinderDouble.json b/src/main/resources/assets/actuallyadditions/blockstates/blockGrinderDouble.json index 1611b66d6..577b80f5a 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockGrinderDouble.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockGrinderDouble.json @@ -1,6 +1,20 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockGrinderDouble", + "bottom": "actuallyadditions:blocks/blockGrinderBottom", + "top": "actuallyadditions:blocks/blockGrinderTop" + }, + "transform": "forge:default-block" + }, "variants": { - "meta=0": { "model": "actuallyadditions:blockGrinderDouble" }, - "meta=1": { "model": "actuallyadditions:blockGrinderDoubleOn" } + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": { "textures": { "top": "actuallyadditions:blocks/blockGrinderOn" } } + } } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json b/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json index ba42dd650..42f8b7f52 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json @@ -1,5 +1,16 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockHeatCollectorSide", + "bottom": "actuallyadditions:blocks/blockHeatCollector", + "top": "actuallyadditions:blocks/blockHeatCollectorTop" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockHeatCollector" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockInputter.json b/src/main/resources/assets/actuallyadditions/blockstates/blockInputter.json index f61d3273e..00312e0c1 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockInputter.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockInputter.json @@ -1,5 +1,14 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockInputter" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockInputter" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockInputterAdvanced.json b/src/main/resources/assets/actuallyadditions/blockstates/blockInputterAdvanced.json index e886cf707..9ac462bee 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockInputterAdvanced.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockInputterAdvanced.json @@ -1,5 +1,14 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockInputterAdvanced" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockInputterAdvanced" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockItemRepairer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockItemRepairer.json index e5eb85b3d..5c24da2f2 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockItemRepairer.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockItemRepairer.json @@ -1,5 +1,16 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockItemRepairer", + "bottom": "actuallyadditions:blocks/blockItemRepairerBottom", + "top": "actuallyadditions:blocks/blockItemRepairerTop" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockItemRepairer" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json deleted file mode 100644 index 6d850ae98..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockLampPowerer", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockLampPowerer", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockLampPowerer", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockLampPowerer", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockLampPowerer", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockLampPowerer", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json deleted file mode 100644 index d5417dfcb..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockLaserRelay", "x": 180 }, - "meta=1": { "model": "actuallyadditions:blockLaserRelay"}, - "meta=2": { "model": "actuallyadditions:blockLaserRelay", "x": 90 }, - "meta=3": { "model": "actuallyadditions:blockLaserRelay", "x": 270 }, - "meta=4": { "model": "actuallyadditions:blockLaserRelay", "x": 90, "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockLaserRelay", "x": 90, "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLavaFactoryController.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLavaFactoryController.json index 4b1b03844..321021e7e 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockLavaFactoryController.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLavaFactoryController.json @@ -1,5 +1,16 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockLavaFactoryController", + "bottom": "#side", + "top": "actuallyadditions:blocks/blockLavaFactoryControllerTop" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockLavaFactoryController" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLeafGenerator.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLeafGenerator.json index 437f4a868..f2f3b0e96 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockLeafGenerator.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLeafGenerator.json @@ -1,5 +1,14 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockLeafGenerator" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockLeafGenerator" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockMiner.json b/src/main/resources/assets/actuallyadditions/blockstates/blockMiner.json index 58ca07bcb..63930db2a 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockMiner.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockMiner.json @@ -1,5 +1,16 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockMiner", + "bottom": "actuallyadditions:blocks/blockMinerFront", + "top": "actuallyadditions:blocks/blockMinerTop" + }, + "transform": "forge:default-block" + }, "variants": { - "normal": { "model": "actuallyadditions:blockMiner" } + "normal": [{}], + "inventory": [{}] } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockMisc.json b/src/main/resources/assets/actuallyadditions/blockstates/blockMisc.json deleted file mode 100644 index 20d2f94a2..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockMisc.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockMiscBlackQuartzPillar" }, - "meta=1": { "model": "actuallyadditions:blockMiscBlackQuartzChiseled" }, - "meta=2": { "model": "actuallyadditions:blockMiscBlackQuartz" }, - "meta=3": { "model": "actuallyadditions:blockMiscOreBlackQuartz" }, - "meta=4": { "model": "actuallyadditions:blockMiscWoodCasing" }, - "meta=5": { "model": "actuallyadditions:blockMiscCharcoal" }, - "meta=6": { "model": "actuallyadditions:blockMiscEnderpearl" }, - "meta=7": { "model": "actuallyadditions:blockMiscLavaFactoryCase" }, - "meta=8": { "model": "actuallyadditions:blockMiscEnderCasing" }, - "meta=9": { "model": "actuallyadditions:blockMiscIronCasing" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json b/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json index 80d532bf9..bbf865d4b 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json @@ -1,6 +1,20 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockOilGenerator", + "bottom": "actuallyadditions:blocks/blockOilGeneratorBottom", + "top": "actuallyadditions:blocks/blockOilGeneratorTop" + }, + "transform": "forge:default-block" + }, "variants": { - "meta=0": { "model": "actuallyadditions:blockOilGenerator" }, - "meta=1": { "model": "actuallyadditions:blockOilGenerator" } + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": {} + } } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json deleted file mode 100644 index a7ba983ed..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockPhantomBooster"} - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json deleted file mode 100644 index 06951250e..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockPhantomBreaker" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json deleted file mode 100644 index 8de3a8d69..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockPhantomEnergyface" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json deleted file mode 100644 index 897bc9bab..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockPhantomLiquiface" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json deleted file mode 100644 index f3820bf15..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockPhantomPlacer" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json deleted file mode 100644 index f4a049588..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockPhantomface" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json deleted file mode 100644 index e6fadc3d4..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockPillarQuartzSlabBottom" }, - "meta=1": { "model": "actuallyadditions:blockPillarQuartzSlabTop" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json deleted file mode 100644 index 90fe870ec..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs" }, - "facing=west,half=bottom,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter" }, - "facing=west,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter" }, - "facing=north,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner" }, - "facing=west,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner" }, - "facing=north,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "actuallyadditions:blockPillarQuartzStairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "actuallyadditions:blockPillarQuartzStairsOuter", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "actuallyadditions:blockPillarQuartzStairsInner", "x": 180, "uvlock": true } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json deleted file mode 100644 index 53375efd9..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallPost" }, - "east=false,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorth" }, - "east=true,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouth" }, - "east=true,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouth", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEastWest" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallPost" }, - "east=false,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorth" }, - "east=true,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthAbove" }, - "east=true,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthAbove", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockPillarQuartzWallNorthSouthEastWest" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json deleted file mode 100644 index 7e296e649..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockPlacer", "x": 90 }, - "meta=1": { "model": "actuallyadditions:blockPlacer", "x": -90 }, - "meta=2": { "model": "actuallyadditions:blockPlacer", "y": 0 }, - "meta=3": { "model": "actuallyadditions:blockPlacer", "y": 180 }, - "meta=4": { "model": "actuallyadditions:blockPlacer", "y": 270 }, - "meta=5": { "model": "actuallyadditions:blockPlacer", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json deleted file mode 100644 index ec18e935b..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockQuartzSlabBottom" }, - "meta=1": { "model": "actuallyadditions:blockQuartzSlabTop" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json deleted file mode 100644 index bd2db7cda..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "actuallyadditions:blockQuartzStairs" }, - "facing=west,half=bottom,shape=straight": { "model": "actuallyadditions:blockQuartzStairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "actuallyadditions:blockQuartzStairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "actuallyadditions:blockQuartzStairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter" }, - "facing=west,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter" }, - "facing=north,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner" }, - "facing=west,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner" }, - "facing=north,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "actuallyadditions:blockQuartzStairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "actuallyadditions:blockQuartzStairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "actuallyadditions:blockQuartzStairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "actuallyadditions:blockQuartzStairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "actuallyadditions:blockQuartzStairsOuter", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "actuallyadditions:blockQuartzStairsInner", "x": 180, "uvlock": true } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json deleted file mode 100644 index 36eed4bdd..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallPost" }, - "east=false,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallNorth" }, - "east=true,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallNorthEast" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallNorthSouth" }, - "east=true,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouth", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEastWest" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallPost" }, - "east=false,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallNorth" }, - "east=true,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallNorthEast" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallNorthSouthAbove" }, - "east=true,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthAbove", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockQuartzWallNorthSouthEastWest" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json b/src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json deleted file mode 100644 index 52e736d3f..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockRangedCollector" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockRice.json b/src/main/resources/assets/actuallyadditions/blockstates/blockRice.json deleted file mode 100644 index a4195413a..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockRice.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "age=0": { "model": "actuallyadditions:blockRiceStage1" }, - "age=1": { "model": "actuallyadditions:blockRiceStage2" }, - "age=2": { "model": "actuallyadditions:blockRiceStage2" }, - "age=3": { "model": "actuallyadditions:blockRiceStage3" }, - "age=4": { "model": "actuallyadditions:blockRiceStage4" }, - "age=5": { "model": "actuallyadditions:blockRiceStage4" }, - "age=6": { "model": "actuallyadditions:blockRiceStage5" }, - "age=7": { "model": "actuallyadditions:blockRiceStage6" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json b/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json deleted file mode 100644 index 200fa9ee3..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockSmileyCloud", "y": 0 }, - "meta=1": { "model": "actuallyadditions:blockSmileyCloud", "y": 180 }, - "meta=2": { "model": "actuallyadditions:blockSmileyCloud", "y": -90 }, - "meta=3": { "model": "actuallyadditions:blockSmileyCloud", "y": 90 }, - "meta=4": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": 0 }, - "meta=5": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": 180 }, - "meta=6": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": -90 }, - "meta=7": { "model": "actuallyadditions:blockSmileyCloudFluffy", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json deleted file mode 100644 index be640a579..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFencePost" }, - "east=false,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth" }, - "east=true,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouth" }, - "east=true,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouth", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEastWest" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFencePost" }, - "east=false,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth" }, - "east=true,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthAbove" }, - "east=true,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthAbove", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksGreenFenceNorthSouthEastWest" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json deleted file mode 100644 index 7a6348718..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockTestifiBucksGreenSlabBottom" }, - "meta=1": { "model": "actuallyadditions:blockTestifiBucksGreenSlabTop" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json deleted file mode 100644 index 97b65d1aa..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs" }, - "facing=west,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter" }, - "facing=west,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter" }, - "facing=north,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner" }, - "facing=west,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner" }, - "facing=north,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksGreenStairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsOuter", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksGreenStairsInner", "x": 180, "uvlock": true } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json deleted file mode 100644 index a586e7ad0..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockTestifiBucksGreenWall" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json deleted file mode 100644 index 4cf3b6c82..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "variants": { - "east=false,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFencePost" }, - "east=false,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth" }, - "east=true,north=false,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast" }, - "east=true,north=false,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouth" }, - "east=true,north=false,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouth", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast" }, - "east=true,north=false,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=false,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEastWest" }, - "east=false,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFencePost" }, - "east=false,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth" }, - "east=true,north=false,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth", "y": 180, "uvlock": true }, - "east=false,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorth", "y": 270, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast" }, - "east=true,north=false,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast", "y": 90, "uvlock": true }, - "east=false,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast", "y": 180, "uvlock": true }, - "east=false,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthEast", "y": 270, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthAbove" }, - "east=true,north=false,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthAbove", "y": 90, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=false": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast" }, - "east=true,north=false,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast", "y": 90, "uvlock": true }, - "east=false,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast", "y": 180, "uvlock": true }, - "east=true,north=true,south=false,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEast", "y": 270, "uvlock": true }, - "east=true,north=true,south=true,up=true,west=true": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceNorthSouthEastWest" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json deleted file mode 100644 index b499d5a6a..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockTestifiBucksWhiteSlabBottom" }, - "meta=1": { "model": "actuallyadditions:blockTestifiBucksWhiteSlabTop" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json deleted file mode 100644 index d15addf59..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs" }, - "facing=west,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter" }, - "facing=west,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter" }, - "facing=north,half=bottom,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner" }, - "facing=west,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner" }, - "facing=north,half=bottom,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "y": 180, "uvlock": true }, - "facing=east,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "actuallyadditions:blockTestifiBucksWhiteStairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsOuter", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "actuallyadditions:blockTestifiBucksWhiteStairsInner", "x": 180, "uvlock": true } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json deleted file mode 100644 index 940c4a6f0..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "actuallyadditions:blockTestifiBucksWhiteWall" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json deleted file mode 100644 index bc6bcfa6e..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockTreasureChest", "y": 0 }, - "meta=1": { "model": "actuallyadditions:blockTreasureChest", "y": 180 }, - "meta=2": { "model": "actuallyadditions:blockTreasureChest", "y": -90 }, - "meta=3": { "model": "actuallyadditions:blockTreasureChest", "y": 90 } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockWild.json b/src/main/resources/assets/actuallyadditions/blockstates/blockWild.json deleted file mode 100644 index 5f05e40d5..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockWild.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "meta=0": { "model": "actuallyadditions:blockCanolaStage4" }, - "meta=1": { "model": "actuallyadditions:blockFlaxStage6" }, - "meta=2": { "model": "actuallyadditions:blockRiceStage6" }, - "meta=3": { "model": "actuallyadditions:blockCoffeeStage6" } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockXPSolidifier.json b/src/main/resources/assets/actuallyadditions/blockstates/blockXPSolidifier.json index 2f4234c7a..b1b9326cd 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockXPSolidifier.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockXPSolidifier.json @@ -1,8 +1,26 @@ { + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockXPSolidifier", + "down": "#particle", + "up": "actuallyadditions:blocks/blockXPSolidifierTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockXPSolidifierFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, "variants": { - "meta=0": { "model": "actuallyadditions:blockXPSolidifier", "y": 0 }, - "meta=1": { "model": "actuallyadditions:blockXPSolidifier", "y": 180 }, - "meta=2": { "model": "actuallyadditions:blockXPSolidifier", "y": -90 }, - "meta=3": { "model": "actuallyadditions:blockXPSolidifier", "y": 90 } + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "y" : 0 }, + "1": { "y" : 180 }, + "2": { "y" : 270 }, + "3": { "y" : 90 } + } } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockAtomicReconstructor.json b/src/main/resources/assets/actuallyadditions/models/block/blockAtomicReconstructor.json deleted file mode 100644 index fc39cc403..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockAtomicReconstructor.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockAtomicReconstructor", - "down": "actuallyadditions:blocks/blockAtomicReconstructorTop", - "up": "actuallyadditions:blocks/blockAtomicReconstructorTop", - "north": "actuallyadditions:blocks/blockAtomicReconstructorFront", - "east": "actuallyadditions:blocks/blockAtomicReconstructor", - "south": "actuallyadditions:blocks/blockAtomicReconstructor", - "west": "actuallyadditions:blocks/blockAtomicReconstructor" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockBlackLotus.json b/src/main/resources/assets/actuallyadditions/models/block/blockBlackLotus.json deleted file mode 100644 index 2cd8f388a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockBlackLotus.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockBlackLotus" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockBreaker.json b/src/main/resources/assets/actuallyadditions/models/block/blockBreaker.json deleted file mode 100644 index 893606b7a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockBreaker.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockBreaker", - "down": "actuallyadditions:blocks/blockBreakerTop", - "up": "actuallyadditions:blocks/blockBreakerTop", - "north": "actuallyadditions:blocks/blockBreakerFront", - "east": "actuallyadditions:blocks/blockBreaker", - "south": "actuallyadditions:blocks/blockBreaker", - "west": "actuallyadditions:blocks/blockBreaker" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaPress.json b/src/main/resources/assets/actuallyadditions/models/block/blockCanolaPress.json deleted file mode 100644 index a2a0b20fc..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaPress.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockCanolaPress", - "down": "actuallyadditions:blocks/blockCanolaPressTop", - "up": "actuallyadditions:blocks/blockCanolaPressTop", - "north": "actuallyadditions:blocks/blockCanolaPress", - "east": "actuallyadditions:blocks/blockCanolaPress", - "south": "actuallyadditions:blocks/blockCanolaPress", - "west": "actuallyadditions:blocks/blockCanolaPress" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage1.json b/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage1.json deleted file mode 100644 index 701445f89..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCanolaStage1" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage2.json b/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage2.json deleted file mode 100644 index d369d5d30..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCanolaStage2" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage3.json b/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage3.json deleted file mode 100644 index e2a41155c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCanolaStage3" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage4.json b/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage4.json deleted file mode 100644 index e53ff1a48..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCanolaStage4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCanolaStage4" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabBottom.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabBottom.json deleted file mode 100644 index b4a7eaf35..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabBottom.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabTop.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabTop.json deleted file mode 100644 index ddf83e692..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzSlabTop.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairs.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairs.json deleted file mode 100644 index 0fbfe8c44..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsInner.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsInner.json deleted file mode 100644 index 612463832..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsInner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsOuter.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsOuter.json deleted file mode 100644 index 828f36336..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzStairsOuter.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json deleted file mode 100644 index 6bd5ceffd..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_inventory", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorth.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorth.json deleted file mode 100644 index 84e67485f..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_n", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEast.json deleted file mode 100644 index 6fa69c0be..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ne", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEastSouthWest.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEastSouthWest.json deleted file mode 100644 index d9c658e20..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthEastSouthWest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouth.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouth.json deleted file mode 100644 index ba012904e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthAbove.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthAbove.json deleted file mode 100644 index efbea0d33..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthAbove.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns_above", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEast.json deleted file mode 100644 index 332d8f22a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nse", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEastWest.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEastWest.json deleted file mode 100644 index d9c658e20..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallNorthSouthEastWest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json deleted file mode 100644 index 47dbbfc69..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_post", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCoalGenerator.json b/src/main/resources/assets/actuallyadditions/models/block/blockCoalGenerator.json deleted file mode 100644 index c25db6ec0..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCoalGenerator.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockCoalGenerator", - "down": "actuallyadditions:blocks/blockCoalGeneratorBottom", - "up": "actuallyadditions:blocks/blockCoalGeneratorTop", - "north": "actuallyadditions:blocks/blockCoalGenerator", - "east": "actuallyadditions:blocks/blockCoalGenerator", - "south": "actuallyadditions:blocks/blockCoalGenerator", - "west": "actuallyadditions:blocks/blockCoalGenerator" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage1.json b/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage1.json deleted file mode 100644 index 418a1ae50..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCoffeeStage1" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage2.json b/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage2.json deleted file mode 100644 index 0c406180e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCoffeeStage2" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage3.json b/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage3.json deleted file mode 100644 index 217d6a18c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCoffeeStage3" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage4.json b/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage4.json deleted file mode 100644 index 4ce34a28c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCoffeeStage4" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage5.json b/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage5.json deleted file mode 100644 index aa93e5649..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage5.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCoffeeStage5" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage6.json b/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage6.json deleted file mode 100644 index c3754df6c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCoffeeStage6.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockCoffeeStage6" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlack.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlack.json deleted file mode 100644 index b58a07632..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlack.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampBlack" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlackOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlackOn.json deleted file mode 100644 index 3f389fa3e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlackOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnBlack" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlue.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlue.json deleted file mode 100644 index f7340b8aa..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlue.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampBlue" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlueOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlueOn.json deleted file mode 100644 index d6be052d4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBlueOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnBlue" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrown.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrown.json deleted file mode 100644 index be1970d85..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrown.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampBrown" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrownOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrownOn.json deleted file mode 100644 index 9a9eaaa59..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampBrownOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnBrown" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyan.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyan.json deleted file mode 100644 index 06e8bd035..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyan.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampCyan" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyanOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyanOn.json deleted file mode 100644 index 73872bd4a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampCyanOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnCyan" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGray.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGray.json deleted file mode 100644 index 8d50ff038..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGray.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampGray" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGrayOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGrayOn.json deleted file mode 100644 index 366e9f866..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGrayOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnGray" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreen.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreen.json deleted file mode 100644 index b4458a516..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreen.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampGreen" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreenOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreenOn.json deleted file mode 100644 index 97ef2a9be..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampGreenOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnGreen" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlue.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlue.json deleted file mode 100644 index 879a1db86..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlue.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampLightBlue" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlueOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlueOn.json deleted file mode 100644 index 5efb5a904..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightBlueOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnLightBlue" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGray.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGray.json deleted file mode 100644 index 5a5f401c6..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGray.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampLightGray" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGrayOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGrayOn.json deleted file mode 100644 index d9a17201d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLightGrayOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnLightGray" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLime.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLime.json deleted file mode 100644 index df04b90e5..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLime.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampLime" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLimeOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLimeOn.json deleted file mode 100644 index 963a9b4f2..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampLimeOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnLime" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagenta.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagenta.json deleted file mode 100644 index 200bdbf98..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagenta.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampMagenta" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagentaOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagentaOn.json deleted file mode 100644 index 9971c4b0c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampMagentaOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnMagenta" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrange.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrange.json deleted file mode 100644 index 13041fc16..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrange.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOrange" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrangeOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrangeOn.json deleted file mode 100644 index 90ba5c811..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampOrangeOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnOrange" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPink.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPink.json deleted file mode 100644 index b4c9148cd..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPink.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampPink" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPinkOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPinkOn.json deleted file mode 100644 index c4e998ce2..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPinkOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnPink" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurple.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurple.json deleted file mode 100644 index 610b96d42..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurple.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampPurple" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurpleOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurpleOn.json deleted file mode 100644 index 018618f74..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampPurpleOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnPurple" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRed.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRed.json deleted file mode 100644 index b17078a13..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRed.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampRed" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRedOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRedOn.json deleted file mode 100644 index 13bca6d0d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampRedOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnRed" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhite.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhite.json deleted file mode 100644 index 35ee994b2..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhite.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampWhite" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhiteOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhiteOn.json deleted file mode 100644 index 565ed6b5e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampWhiteOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnWhite" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellow.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellow.json deleted file mode 100644 index dcc68f867..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellow.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampYellow" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellowOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellowOn.json deleted file mode 100644 index 5f8c85c54..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockColoredLampYellowOn.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockColoredLampOnYellow" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlack.json deleted file mode 100644 index 454d2d55b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlack.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockCrystalBlack" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlue.json deleted file mode 100644 index 51a0f7f6d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalBlue.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockCrystalBlue" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/block/blockCrystalGreen.json deleted file mode 100644 index 4c5a94584..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalGreen.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockCrystalGreen" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/block/blockCrystalLightBlue.json deleted file mode 100644 index 3fb518176..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalLightBlue.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockCrystalLightBlue" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/block/blockCrystalRed.json deleted file mode 100644 index e4279898b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalRed.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockCrystalRed" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/block/blockCrystalWhite.json deleted file mode 100644 index 041e81265..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockCrystalWhite.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockCrystalWhite" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockDirectionalBreaker.json b/src/main/resources/assets/actuallyadditions/models/block/blockDirectionalBreaker.json deleted file mode 100644 index 6bba02c3a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockDirectionalBreaker.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockDirectionalBreaker", - "down": "actuallyadditions:blocks/blockDirectionalBreakerTop", - "up": "actuallyadditions:blocks/blockDirectionalBreakerTop", - "north": "actuallyadditions:blocks/blockDirectionalBreakerFront", - "east": "actuallyadditions:blocks/blockDirectionalBreaker", - "south": "actuallyadditions:blocks/blockDirectionalBreaker", - "west": "actuallyadditions:blocks/blockDirectionalBreaker" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockDropper.json b/src/main/resources/assets/actuallyadditions/models/block/blockDropper.json deleted file mode 100644 index 7d34fb454..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockDropper.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockDropper", - "down": "actuallyadditions:blocks/blockDropperTop", - "up": "actuallyadditions:blocks/blockDropperTop", - "north": "actuallyadditions:blocks/blockDropperFront", - "east": "actuallyadditions:blocks/blockDropper", - "south": "actuallyadditions:blocks/blockDropper", - "west": "actuallyadditions:blocks/blockDropper" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockEnergizer.json b/src/main/resources/assets/actuallyadditions/models/block/blockEnergizer.json deleted file mode 100644 index 82542d8ee..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockEnergizer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockEnergizer", - "down": "actuallyadditions:blocks/blockEnergizer", - "up": "actuallyadditions:blocks/blockEnergizerTop", - "north": "actuallyadditions:blocks/blockEnergizerSide", - "east": "actuallyadditions:blocks/blockEnergizerSide", - "south": "actuallyadditions:blocks/blockEnergizerSide", - "west": "actuallyadditions:blocks/blockEnergizerSide" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockEnervator.json b/src/main/resources/assets/actuallyadditions/models/block/blockEnervator.json deleted file mode 100644 index 51c2005b9..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockEnervator.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockEnervator", - "down": "actuallyadditions:blocks/blockEnervator", - "up": "actuallyadditions:blocks/blockEnervatorTop", - "north": "actuallyadditions:blocks/blockEnervatorSide", - "east": "actuallyadditions:blocks/blockEnervatorSide", - "south": "actuallyadditions:blocks/blockEnervatorSide", - "west": "actuallyadditions:blocks/blockEnervatorSide" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFeeder.json b/src/main/resources/assets/actuallyadditions/models/block/blockFeeder.json deleted file mode 100644 index 086701edd..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFeeder.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockFeeder", - "down": "actuallyadditions:blocks/blockFeederTop", - "up": "actuallyadditions:blocks/blockFeederTop", - "north": "actuallyadditions:blocks/blockFeeder", - "east": "actuallyadditions:blocks/blockFeeder", - "south": "actuallyadditions:blocks/blockFeeder", - "west": "actuallyadditions:blocks/blockFeeder" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFermentingBarrel.json b/src/main/resources/assets/actuallyadditions/models/block/blockFermentingBarrel.json deleted file mode 100644 index 30cc9d9ac..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFermentingBarrel.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockFermentingBarrel", - "down": "actuallyadditions:blocks/blockFermentingBarrelTop", - "up": "actuallyadditions:blocks/blockFermentingBarrelTop", - "north": "actuallyadditions:blocks/blockFermentingBarrel", - "east": "actuallyadditions:blocks/blockFermentingBarrel", - "south": "actuallyadditions:blocks/blockFermentingBarrel", - "west": "actuallyadditions:blocks/blockFermentingBarrel" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFireworkBox.json b/src/main/resources/assets/actuallyadditions/models/block/blockFireworkBox.json deleted file mode 100644 index 92d6f0d11..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFireworkBox.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockFireworkBox", - "down": "actuallyadditions:blocks/blockFireworkBox", - "up": "actuallyadditions:blocks/blockFireworkBoxTop", - "north": "actuallyadditions:blocks/blockFireworkBox", - "east": "actuallyadditions:blocks/blockFireworkBox", - "south": "actuallyadditions:blocks/blockFireworkBox", - "west": "actuallyadditions:blocks/blockFireworkBox" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage1.json b/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage1.json deleted file mode 100644 index 47d690d32..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockFlaxStage1" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage2.json b/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage2.json deleted file mode 100644 index 6380ad351..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockFlaxStage2" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage3.json b/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage3.json deleted file mode 100644 index fb00402fd..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockFlaxStage3" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage4.json b/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage4.json deleted file mode 100644 index c51f298c1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockFlaxStage4" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage5.json b/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage5.json deleted file mode 100644 index b3f41a5ce..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage5.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockFlaxStage5" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage6.json b/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage6.json deleted file mode 100644 index 92b7294f1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFlaxStage6.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockFlaxStage6" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFluidCollector.json b/src/main/resources/assets/actuallyadditions/models/block/blockFluidCollector.json deleted file mode 100644 index d5eefafac..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFluidCollector.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockFluidCollector", - "down": "actuallyadditions:blocks/blockFluidCollectorTop", - "up": "actuallyadditions:blocks/blockFluidCollectorTop", - "north": "actuallyadditions:blocks/blockFluidCollectorFront", - "east": "actuallyadditions:blocks/blockFluidCollector", - "south": "actuallyadditions:blocks/blockFluidCollector", - "west": "actuallyadditions:blocks/blockFluidCollector" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFluidPlacer.json b/src/main/resources/assets/actuallyadditions/models/block/blockFluidPlacer.json deleted file mode 100644 index 19a1cd4de..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFluidPlacer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockFluidPlacer", - "down": "actuallyadditions:blocks/blockFluidPlacerTop", - "up": "actuallyadditions:blocks/blockFluidPlacerTop", - "north": "actuallyadditions:blocks/blockFluidPlacerFront", - "east": "actuallyadditions:blocks/blockFluidPlacer", - "south": "actuallyadditions:blocks/blockFluidPlacer", - "west": "actuallyadditions:blocks/blockFluidPlacer" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDouble.json b/src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDouble.json deleted file mode 100644 index 596d67036..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDouble.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockFurnaceDouble", - "down": "actuallyadditions:blocks/blockFurnaceDouble", - "up": "actuallyadditions:blocks/blockFurnaceDoubleTop", - "north": "actuallyadditions:blocks/blockFurnaceDoubleFront", - "east": "actuallyadditions:blocks/blockFurnaceDouble", - "south": "actuallyadditions:blocks/blockFurnaceDouble", - "west": "actuallyadditions:blocks/blockFurnaceDouble" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDoubleOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDoubleOn.json deleted file mode 100644 index 9ecfaccf4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockFurnaceDoubleOn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockFurnaceDouble", - "down": "actuallyadditions:blocks/blockFurnaceDouble", - "up": "actuallyadditions:blocks/blockFurnaceDoubleTop", - "north": "actuallyadditions:blocks/blockFurnaceDoubleOn", - "east": "actuallyadditions:blocks/blockFurnaceDouble", - "south": "actuallyadditions:blocks/blockFurnaceDouble", - "west": "actuallyadditions:blocks/blockFurnaceDouble" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockGiantChest.json b/src/main/resources/assets/actuallyadditions/models/block/blockGiantChest.json deleted file mode 100644 index 9a2f67dd7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockGiantChest.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockGiantChest", - "down": "actuallyadditions:blocks/blockGiantChestBottom", - "up": "actuallyadditions:blocks/blockGiantChestTop", - "north": "actuallyadditions:blocks/blockGiantChest", - "east": "actuallyadditions:blocks/blockGiantChest", - "south": "actuallyadditions:blocks/blockGiantChest", - "west": "actuallyadditions:blocks/blockGiantChest" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockGreenhouseGlass.json b/src/main/resources/assets/actuallyadditions/models/block/blockGreenhouseGlass.json deleted file mode 100644 index d5e181ffe..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockGreenhouseGlass.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockGreenhouseGlass" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockGrinder.json b/src/main/resources/assets/actuallyadditions/models/block/blockGrinder.json deleted file mode 100644 index c6cf965b5..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockGrinder.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockGrinder", - "down": "actuallyadditions:blocks/blockGrinderBottom", - "up": "actuallyadditions:blocks/blockGrinderTop", - "north": "actuallyadditions:blocks/blockGrinder", - "east": "actuallyadditions:blocks/blockGrinder", - "south": "actuallyadditions:blocks/blockGrinder", - "west": "actuallyadditions:blocks/blockGrinder" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockGrinderDouble.json b/src/main/resources/assets/actuallyadditions/models/block/blockGrinderDouble.json deleted file mode 100644 index 7c956d566..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockGrinderDouble.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockGrinderDouble", - "down": "actuallyadditions:blocks/blockGrinderBottom", - "up": "actuallyadditions:blocks/blockGrinderTop", - "north": "actuallyadditions:blocks/blockGrinderDouble", - "east": "actuallyadditions:blocks/blockGrinderDouble", - "south": "actuallyadditions:blocks/blockGrinderDouble", - "west": "actuallyadditions:blocks/blockGrinderDouble" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockGrinderDoubleOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockGrinderDoubleOn.json deleted file mode 100644 index 29a9657d3..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockGrinderDoubleOn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockGrinderDouble", - "down": "actuallyadditions:blocks/blockGrinderBottom", - "up": "actuallyadditions:blocks/blockGrinderOn", - "north": "actuallyadditions:blocks/blockGrinderDouble", - "east": "actuallyadditions:blocks/blockGrinderDouble", - "south": "actuallyadditions:blocks/blockGrinderDouble", - "west": "actuallyadditions:blocks/blockGrinderDouble" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockGrinderOn.json b/src/main/resources/assets/actuallyadditions/models/block/blockGrinderOn.json deleted file mode 100644 index 32ace4441..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockGrinderOn.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockGrinder", - "down": "actuallyadditions:blocks/blockGrinderBottom", - "up": "actuallyadditions:blocks/blockGrinderOn", - "north": "actuallyadditions:blocks/blockGrinder", - "east": "actuallyadditions:blocks/blockGrinder", - "south": "actuallyadditions:blocks/blockGrinder", - "west": "actuallyadditions:blocks/blockGrinder" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockHeatCollector.json b/src/main/resources/assets/actuallyadditions/models/block/blockHeatCollector.json deleted file mode 100644 index 694df70ec..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockHeatCollector.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockHeatCollectorSide", - "down": "actuallyadditions:blocks/blockHeatCollectorBottom", - "up": "actuallyadditions:blocks/blockHeatCollectorTop", - "north": "actuallyadditions:blocks/blockHeatCollectorSide", - "east": "actuallyadditions:blocks/blockHeatCollectorSide", - "south": "actuallyadditions:blocks/blockHeatCollectorSide", - "west": "actuallyadditions:blocks/blockHeatCollectorSide" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockInputter.json b/src/main/resources/assets/actuallyadditions/models/block/blockInputter.json deleted file mode 100644 index 7bc5b2f9a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockInputter.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockInputter" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockInputterAdvanced.json b/src/main/resources/assets/actuallyadditions/models/block/blockInputterAdvanced.json deleted file mode 100644 index 20dc95824..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockInputterAdvanced.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockInputterAdvanced" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockItemRepairer.json b/src/main/resources/assets/actuallyadditions/models/block/blockItemRepairer.json deleted file mode 100644 index bb1be012a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockItemRepairer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockItemRepairer", - "down": "actuallyadditions:blocks/blockItemRepairerBottom", - "up": "actuallyadditions:blocks/blockItemRepairerTop", - "north": "actuallyadditions:blocks/blockItemRepairer", - "east": "actuallyadditions:blocks/blockItemRepairer", - "south": "actuallyadditions:blocks/blockItemRepairer", - "west": "actuallyadditions:blocks/blockItemRepairer" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockLampPowerer.json b/src/main/resources/assets/actuallyadditions/models/block/blockLampPowerer.json deleted file mode 100644 index 430ed6006..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockLampPowerer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockLampPowerer", - "down": "actuallyadditions:blocks/blockLampPowerer", - "up": "actuallyadditions:blocks/blockLampPowerer", - "north": "actuallyadditions:blocks/blockLampPowererFront", - "east": "actuallyadditions:blocks/blockLampPowerer", - "south": "actuallyadditions:blocks/blockLampPowerer", - "west": "actuallyadditions:blocks/blockLampPowerer" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockLavaFactoryController.json b/src/main/resources/assets/actuallyadditions/models/block/blockLavaFactoryController.json deleted file mode 100644 index 9097991cb..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockLavaFactoryController.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockLavaFactoryController", - "down": "actuallyadditions:blocks/blockLavaFactoryController", - "up": "actuallyadditions:blocks/blockLavaFactoryControllerTop", - "north": "actuallyadditions:blocks/blockLavaFactoryController", - "east": "actuallyadditions:blocks/blockLavaFactoryController", - "south": "actuallyadditions:blocks/blockLavaFactoryController", - "west": "actuallyadditions:blocks/blockLavaFactoryController" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockLeafGenerator.json b/src/main/resources/assets/actuallyadditions/models/block/blockLeafGenerator.json deleted file mode 100644 index 56ed86737..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockLeafGenerator.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockLeafGenerator", - "down": "actuallyadditions:blocks/blockLeafGeneratorBottom", - "up": "actuallyadditions:blocks/blockLeafGeneratorTop", - "north": "actuallyadditions:blocks/blockLeafGenerator", - "east": "actuallyadditions:blocks/blockLeafGenerator", - "south": "actuallyadditions:blocks/blockLeafGenerator", - "west": "actuallyadditions:blocks/blockLeafGenerator" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiner.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiner.json deleted file mode 100644 index 2872bf56a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiner.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockMiner", - "down": "actuallyadditions:blocks/blockMinerFront", - "up": "actuallyadditions:blocks/blockMinerTop", - "north": "actuallyadditions:blocks/blockMiner", - "east": "actuallyadditions:blocks/blockMiner", - "south": "actuallyadditions:blocks/blockMiner", - "west": "actuallyadditions:blocks/blockMiner" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartz.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartz.json deleted file mode 100644 index 9f80a8b37..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartz.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzChiseled.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzChiseled.json deleted file mode 100644 index 239abd6a4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzChiseled.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzPillar.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzPillar.json deleted file mode 100644 index a393fdfd1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscBlackQuartzPillar.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscCharcoal.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscCharcoal.json deleted file mode 100644 index e7b2c34bc..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscCharcoal.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscCharcoal" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderCasing.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderCasing.json deleted file mode 100644 index 2b00aaaaf..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderCasing.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscEnderCasing" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderpearl.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderpearl.json deleted file mode 100644 index ecf04eb87..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscEnderpearl.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscEnderpearl" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscIronCasing.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscIronCasing.json deleted file mode 100644 index fbc4d7b2f..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscIronCasing.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscIronCasing" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscLavaFactoryCase.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscLavaFactoryCase.json deleted file mode 100644 index a1db96568..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscLavaFactoryCase.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscLavaFactoryCase" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscOreBlackQuartz.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscOreBlackQuartz.json deleted file mode 100644 index a622e44fa..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscOreBlackQuartz.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscOreBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockMiscWoodCasing.json b/src/main/resources/assets/actuallyadditions/models/block/blockMiscWoodCasing.json deleted file mode 100644 index 176cf159b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockMiscWoodCasing.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockMiscWoodCasing" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockOilGenerator.json b/src/main/resources/assets/actuallyadditions/models/block/blockOilGenerator.json deleted file mode 100644 index 46923c44c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockOilGenerator.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockOilGenerator", - "down": "actuallyadditions:blocks/blockOilGeneratorBottom", - "up": "actuallyadditions:blocks/blockOilGeneratorTop", - "north": "actuallyadditions:blocks/blockOilGenerator", - "east": "actuallyadditions:blocks/blockOilGenerator", - "south": "actuallyadditions:blocks/blockOilGenerator", - "west": "actuallyadditions:blocks/blockOilGenerator" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomBreaker.json b/src/main/resources/assets/actuallyadditions/models/block/blockPhantomBreaker.json deleted file mode 100644 index 2f6b1a6b6..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomBreaker.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockPhantomBreaker" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomEnergyface.json b/src/main/resources/assets/actuallyadditions/models/block/blockPhantomEnergyface.json deleted file mode 100644 index 28f93699d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomEnergyface.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockPhantomEnergyface" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomLiquiface.json b/src/main/resources/assets/actuallyadditions/models/block/blockPhantomLiquiface.json deleted file mode 100644 index 94c4530e4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomLiquiface.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockPhantomLiquiface" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomPlacer.json b/src/main/resources/assets/actuallyadditions/models/block/blockPhantomPlacer.json deleted file mode 100644 index 35eab12dd..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomPlacer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockPhantomPlacer" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomface.json b/src/main/resources/assets/actuallyadditions/models/block/blockPhantomface.json deleted file mode 100644 index 71b522ba9..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPhantomface.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockPhantomface" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabBottom.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabBottom.json deleted file mode 100644 index 415d0574b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabBottom.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabTop.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabTop.json deleted file mode 100644 index d52c000ef..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzSlabTop.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairs.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairs.json deleted file mode 100644 index 07163fad5..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsInner.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsInner.json deleted file mode 100644 index 6a1759043..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsInner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsOuter.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsOuter.json deleted file mode 100644 index 90bbad865..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzStairsOuter.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "top": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", - "side": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json deleted file mode 100644 index 8e69ec192..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_inventory", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorth.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorth.json deleted file mode 100644 index 742554c85..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_n", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthEast.json deleted file mode 100644 index db512c7d9..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ne", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouth.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouth.json deleted file mode 100644 index f17ac45b7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthAbove.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthAbove.json deleted file mode 100644 index a2ea2f739..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthAbove.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns_above", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEast.json deleted file mode 100644 index e10c5ad81..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nse", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEastWest.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEastWest.json deleted file mode 100644 index 56dc3196a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallNorthSouthEastWest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json deleted file mode 100644 index 05317206d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_post", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPlacer.json b/src/main/resources/assets/actuallyadditions/models/block/blockPlacer.json deleted file mode 100644 index 882cdec95..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockPlacer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockPlacer", - "down": "actuallyadditions:blocks/blockPlacerTop", - "up": "actuallyadditions:blocks/blockPlacerTop", - "north": "actuallyadditions:blocks/blockPlacerFront", - "east": "actuallyadditions:blocks/blockPlacer", - "south": "actuallyadditions:blocks/blockPlacer", - "west": "actuallyadditions:blocks/blockPlacer" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabBottom.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabBottom.json deleted file mode 100644 index 717a87efa..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabBottom.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartz", - "top": "actuallyadditions:blocks/blockMiscBlackQuartz", - "side": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabTop.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabTop.json deleted file mode 100644 index 430db9102..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzSlabTop.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartz", - "top": "actuallyadditions:blocks/blockMiscBlackQuartz", - "side": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairs.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairs.json deleted file mode 100644 index c081a302e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartz", - "top": "actuallyadditions:blocks/blockMiscBlackQuartz", - "side": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsInner.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsInner.json deleted file mode 100644 index 3c8e7df37..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsInner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartz", - "top": "actuallyadditions:blocks/blockMiscBlackQuartz", - "side": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsOuter.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsOuter.json deleted file mode 100644 index 72e09ad90..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzStairsOuter.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockMiscBlackQuartz", - "top": "actuallyadditions:blocks/blockMiscBlackQuartz", - "side": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json deleted file mode 100644 index e4aaa41bb..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_inventory", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorth.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorth.json deleted file mode 100644 index b83186dd7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_n", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthEast.json deleted file mode 100644 index 3ac0fbd99..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ne", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouth.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouth.json deleted file mode 100644 index 5dbd6b513..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthAbove.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthAbove.json deleted file mode 100644 index 000276842..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthAbove.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns_above", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEast.json deleted file mode 100644 index 1d5a986ab..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nse", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEastWest.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEastWest.json deleted file mode 100644 index 557e78d48..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallNorthSouthEastWest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json deleted file mode 100644 index a531634ea..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_post", - "textures": { - "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockRangedCollector.json b/src/main/resources/assets/actuallyadditions/models/block/blockRangedCollector.json deleted file mode 100644 index e3d4dfa63..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockRangedCollector.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockRangedCollector" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage1.json b/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage1.json deleted file mode 100644 index 8e49402c6..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockRiceStage1" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage2.json b/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage2.json deleted file mode 100644 index 505ad42ef..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockRiceStage2" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage3.json b/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage3.json deleted file mode 100644 index e3d655adb..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockRiceStage3" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage4.json b/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage4.json deleted file mode 100644 index b18a4e8c1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockRiceStage4" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage5.json b/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage5.json deleted file mode 100644 index 85f9d0c35..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage5.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockRiceStage5" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage6.json b/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage6.json deleted file mode 100644 index b9bc34d0a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockRiceStage6.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "actuallyadditions:blocks/blockRiceStage6" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json deleted file mode 100644 index 824957db3..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_inventory", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorth.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorth.json deleted file mode 100644 index 8b4fb26d0..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_n", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthEast.json deleted file mode 100644 index e4997d19c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ne", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouth.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouth.json deleted file mode 100644 index a55a8ca94..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthAbove.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthAbove.json deleted file mode 100644 index 3e7fd28e2..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthAbove.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns_above", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEast.json deleted file mode 100644 index 5be16b169..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nse", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEastWest.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEastWest.json deleted file mode 100644 index ea710119d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceNorthSouthEastWest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json deleted file mode 100644 index 4932d58c6..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_post", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabBottom.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabBottom.json deleted file mode 100644 index d25414b47..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabBottom.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "top": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "side": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabTop.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabTop.json deleted file mode 100644 index 4d4bf4417..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenSlabTop.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "top": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "side": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairs.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairs.json deleted file mode 100644 index f06aa8039..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "top": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "side": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsInner.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsInner.json deleted file mode 100644 index 34b5b94e7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsInner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "top": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "side": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsOuter.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsOuter.json deleted file mode 100644 index 96ce69aa6..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenStairsOuter.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "top": "actuallyadditions:blocks/blockTestifiBucksGreenWall", - "side": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenWall.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenWall.json deleted file mode 100644 index 0d7d410ff..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenWall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockTestifiBucksGreenWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json deleted file mode 100644 index 0a5bfad64..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_inventory", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorth.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorth.json deleted file mode 100644 index 49f70eb52..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_n", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthEast.json deleted file mode 100644 index d5762b020..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ne", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouth.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouth.json deleted file mode 100644 index 9679dae9d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouth.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthAbove.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthAbove.json deleted file mode 100644 index bf166b510..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthAbove.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_ns_above", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEast.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEast.json deleted file mode 100644 index 96659843c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEast.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nse", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEastWest.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEastWest.json deleted file mode 100644 index 1223badcf..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceNorthSouthEastWest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_nsew", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json deleted file mode 100644 index 18244230d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/wall_post", - "textures": { - "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabBottom.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabBottom.json deleted file mode 100644 index b25b04fd4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabBottom.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/half_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "top": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "side": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabTop.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabTop.json deleted file mode 100644 index 941ae9448..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteSlabTop.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/upper_slab", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "top": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "side": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairs.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairs.json deleted file mode 100644 index cda06026f..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "top": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "side": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsInner.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsInner.json deleted file mode 100644 index ebd3ee1df..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsInner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/inner_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "top": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "side": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsOuter.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsOuter.json deleted file mode 100644 index e3d36bcdf..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteStairsOuter.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/outer_stairs", - "textures": { - "bottom": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "top": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", - "side": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteWall.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteWall.json deleted file mode 100644 index 1875b9000..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteWall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTreasureChest.json b/src/main/resources/assets/actuallyadditions/models/block/blockTreasureChest.json deleted file mode 100644 index 98bc9b1d1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockTreasureChest.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockTreasureChest", - "down": "actuallyadditions:blocks/blockTreasureChestBottom", - "up": "actuallyadditions:blocks/blockTreasureChestBottom", - "north": "actuallyadditions:blocks/blockTreasureChestFront", - "east": "actuallyadditions:blocks/blockTreasureChest", - "south": "actuallyadditions:blocks/blockTreasureChest", - "west": "actuallyadditions:blocks/blockTreasureChest" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockXPSolidifier.json b/src/main/resources/assets/actuallyadditions/models/block/blockXPSolidifier.json deleted file mode 100644 index e4b14ae63..000000000 --- a/src/main/resources/assets/actuallyadditions/models/block/blockXPSolidifier.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parent": "block/cube", - "textures": { - "particle": "actuallyadditions:blocks/blockXPSolidifier", - "down": "actuallyadditions:blocks/blockXPSolidifierTop", - "up": "actuallyadditions:blocks/blockXPSolidifierTop", - "north": "actuallyadditions:blocks/blockXPSolidifierFront", - "east": "actuallyadditions:blocks/blockXPSolidifier", - "south": "actuallyadditions:blocks/blockXPSolidifier", - "west": "actuallyadditions:blocks/blockXPSolidifier" - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockAtomicReconstructor.json b/src/main/resources/assets/actuallyadditions/models/item/blockAtomicReconstructor.json deleted file mode 100644 index e545878e7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockAtomicReconstructor.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockAtomicReconstructor", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockBlackLotus.json b/src/main/resources/assets/actuallyadditions/models/item/blockBlackLotus.json deleted file mode 100644 index 448efa27a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockBlackLotus.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockBlackLotus" - }, - "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/actuallyadditions/models/item/blockBreaker.json b/src/main/resources/assets/actuallyadditions/models/item/blockBreaker.json deleted file mode 100644 index 1062c675d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockBreaker.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockBreaker", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCanola.json b/src/main/resources/assets/actuallyadditions/models/item/blockCanola.json deleted file mode 100644 index b04563dbe..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCanola.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockCanolaStage1" - }, - "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/actuallyadditions/models/item/blockCanolaPress.json b/src/main/resources/assets/actuallyadditions/models/item/blockCanolaPress.json deleted file mode 100644 index 938a9c7fe..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCanolaPress.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCanolaPress", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzSlab.json b/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzSlab.json deleted file mode 100644 index 7170d3c54..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzSlab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockChiseledQuartzSlabBottom", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzStair.json b/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzStair.json deleted file mode 100644 index 062500635..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzStair.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockChiseledQuartzStairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json deleted file mode 100644 index 4436078c7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockChiseledQuartzWallInventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCoalGenerator.json b/src/main/resources/assets/actuallyadditions/models/item/blockCoalGenerator.json deleted file mode 100644 index aa2c5b92b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCoalGenerator.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCoalGenerator", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCoffee.json b/src/main/resources/assets/actuallyadditions/models/item/blockCoffee.json deleted file mode 100644 index 37a181523..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCoffee.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockCoffeeStage1" - }, - "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/actuallyadditions/models/item/blockCoffeeMachine.json b/src/main/resources/assets/actuallyadditions/models/item/blockCoffeeMachine.json deleted file mode 100644 index 7afa59601..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCoffeeMachine.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCoffeeMachine", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlack.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlack.json deleted file mode 100644 index 5be359866..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlack.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampBlack", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlue.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlue.json deleted file mode 100644 index 958223edf..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBlue.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampBlue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBrown.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBrown.json deleted file mode 100644 index 9d37f0f76..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampBrown.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampBrown", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampCyan.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampCyan.json deleted file mode 100644 index d373eedf1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampCyan.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampCyan", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGray.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGray.json deleted file mode 100644 index 5eba54608..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGray.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampGray", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGreen.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGreen.json deleted file mode 100644 index 076706160..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampGreen.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampGreen", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightBlue.json deleted file mode 100644 index f42814555..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightBlue.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampLightBlue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightGray.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightGray.json deleted file mode 100644 index 993687c00..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLightGray.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampLightGray", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLime.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLime.json deleted file mode 100644 index 8ef419c6a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampLime.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampLime", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampMagenta.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampMagenta.json deleted file mode 100644 index 3eda300af..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampMagenta.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampMagenta", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlack.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlack.json deleted file mode 100644 index 6a7c7f02a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlack.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampBlackOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlue.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlue.json deleted file mode 100644 index 5b0982dec..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBlue.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampBlueOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBrown.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBrown.json deleted file mode 100644 index f2dedc045..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnBrown.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampBrownOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnCyan.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnCyan.json deleted file mode 100644 index 69b37a498..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnCyan.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampCyanOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGray.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGray.json deleted file mode 100644 index 61bd6f1ec..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGray.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampGrayOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGreen.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGreen.json deleted file mode 100644 index f9c60d055..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnGreen.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampGreenOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightBlue.json deleted file mode 100644 index d59eba11b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightBlue.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampLightBlueOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightGray.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightGray.json deleted file mode 100644 index bd587fe0a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLightGray.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampLightGrayOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLime.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLime.json deleted file mode 100644 index 1d834b89c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnLime.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampLimeOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnMagenta.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnMagenta.json deleted file mode 100644 index 5516a153e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnMagenta.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampMagentaOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnOrange.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnOrange.json deleted file mode 100644 index 6b2e9eff8..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnOrange.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampOrangeOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPink.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPink.json deleted file mode 100644 index 560285709..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPink.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampPinkOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPurple.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPurple.json deleted file mode 100644 index 6d2245850..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnPurple.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampPurpleOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnRed.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnRed.json deleted file mode 100644 index ac2177757..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnRed.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampRedOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnWhite.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnWhite.json deleted file mode 100644 index 70f0afd56..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnWhite.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampWhiteOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnYellow.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnYellow.json deleted file mode 100644 index a09562909..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOnYellow.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampYellowOn", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOrange.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOrange.json deleted file mode 100644 index ae7be2a4b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampOrange.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampOrange", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPink.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPink.json deleted file mode 100644 index 59f04fa4b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPink.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampPink", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPurple.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPurple.json deleted file mode 100644 index ac0e31648..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampPurple.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampPurple", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampRed.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampRed.json deleted file mode 100644 index 6970acda8..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampRed.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampRed", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampWhite.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampWhite.json deleted file mode 100644 index 4467915d8..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampWhite.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampWhite", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampYellow.json b/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampYellow.json deleted file mode 100644 index ed7c96c03..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockColoredLampYellow.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockColoredLampYellow", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCompost.json b/src/main/resources/assets/actuallyadditions/models/item/blockCompost.json deleted file mode 100644 index 48378bad5..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCompost.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCompost", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlack.json deleted file mode 100644 index 202cadb3c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlack.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCrystalBlack", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlue.json deleted file mode 100644 index 31adfb56e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalBlue.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCrystalBlue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/blockCrystalGreen.json deleted file mode 100644 index 6237d6dad..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalGreen.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCrystalGreen", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/blockCrystalLightBlue.json deleted file mode 100644 index 278da0baa..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalLightBlue.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCrystalLightBlue", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/blockCrystalRed.json deleted file mode 100644 index a035b7348..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalRed.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCrystalRed", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/blockCrystalWhite.json deleted file mode 100644 index 2b04b06b4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockCrystalWhite.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockCrystalWhite", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockDirectionalBreaker.json b/src/main/resources/assets/actuallyadditions/models/item/blockDirectionalBreaker.json deleted file mode 100644 index 193b3216f..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockDirectionalBreaker.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockDirectionalBreaker", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockDropper.json b/src/main/resources/assets/actuallyadditions/models/item/blockDropper.json deleted file mode 100644 index f13edae78..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockDropper.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockDropper", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockEnergizer.json b/src/main/resources/assets/actuallyadditions/models/item/blockEnergizer.json deleted file mode 100644 index 3194c6643..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockEnergizer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockEnergizer", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockEnervator.json b/src/main/resources/assets/actuallyadditions/models/item/blockEnervator.json deleted file mode 100644 index b6a0649e1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockEnervator.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockEnervator", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFeeder.json b/src/main/resources/assets/actuallyadditions/models/item/blockFeeder.json deleted file mode 100644 index dc79d942c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFeeder.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFeeder", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFermentingBarrel.json b/src/main/resources/assets/actuallyadditions/models/item/blockFermentingBarrel.json deleted file mode 100644 index 56972a14f..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFermentingBarrel.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFermentingBarrel", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFireworkBox.json b/src/main/resources/assets/actuallyadditions/models/item/blockFireworkBox.json deleted file mode 100644 index 0de756c02..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFireworkBox.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFireworkBox", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFishingNet.json b/src/main/resources/assets/actuallyadditions/models/item/blockFishingNet.json deleted file mode 100644 index 8dd27a76a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFishingNet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFishingNet", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [0, 0, 0 ], - "translation": [0, 4, 2 ], - "scale": [1.2, 1.2, 1.2] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFlax.json b/src/main/resources/assets/actuallyadditions/models/item/blockFlax.json deleted file mode 100644 index 42effaf85..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFlax.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockFlaxStage1" - }, - "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/actuallyadditions/models/item/blockFluidCollector.json b/src/main/resources/assets/actuallyadditions/models/item/blockFluidCollector.json deleted file mode 100644 index c5b34ac75..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFluidCollector.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFluidCollector", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFluidPlacer.json b/src/main/resources/assets/actuallyadditions/models/item/blockFluidPlacer.json deleted file mode 100644 index 83b6b5832..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFluidPlacer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFluidPlacer", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFurnaceDouble.json b/src/main/resources/assets/actuallyadditions/models/item/blockFurnaceDouble.json deleted file mode 100644 index 1c7332972..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFurnaceDouble.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFurnaceDouble", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockFurnaceSolar.json b/src/main/resources/assets/actuallyadditions/models/item/blockFurnaceSolar.json deleted file mode 100644 index 4490e4593..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockFurnaceSolar.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockFurnaceSolar", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "firstperson": { - "rotation": [0, 0, 0 ], - "translation": [0, 4, 2 ], - "scale": [1.2, 1.2, 1.2] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockGiantChest.json b/src/main/resources/assets/actuallyadditions/models/item/blockGiantChest.json deleted file mode 100644 index 01c08a12c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockGiantChest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockGiantChest", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockGreenhouseGlass.json b/src/main/resources/assets/actuallyadditions/models/item/blockGreenhouseGlass.json deleted file mode 100644 index 2e826075f..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockGreenhouseGlass.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockGreenhouseGlass", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockGrinder.json b/src/main/resources/assets/actuallyadditions/models/item/blockGrinder.json deleted file mode 100644 index f3ad2c432..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockGrinder.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockGrinder", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockGrinderDouble.json b/src/main/resources/assets/actuallyadditions/models/item/blockGrinderDouble.json deleted file mode 100644 index 28f414787..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockGrinderDouble.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockGrinderDouble", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockHeatCollector.json b/src/main/resources/assets/actuallyadditions/models/item/blockHeatCollector.json deleted file mode 100644 index 1de6350d3..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockHeatCollector.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockHeatCollector", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockInputter.json b/src/main/resources/assets/actuallyadditions/models/item/blockInputter.json deleted file mode 100644 index 3b1bbc2b4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockInputter.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockInputter", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockInputterAdvanced.json b/src/main/resources/assets/actuallyadditions/models/item/blockInputterAdvanced.json deleted file mode 100644 index 1bbd8209b..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockInputterAdvanced.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockInputterAdvanced", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockItemRepairer.json b/src/main/resources/assets/actuallyadditions/models/item/blockItemRepairer.json deleted file mode 100644 index 7b1d319f8..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockItemRepairer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockItemRepairer", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockLampPowerer.json b/src/main/resources/assets/actuallyadditions/models/item/blockLampPowerer.json deleted file mode 100644 index 8f487c814..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockLampPowerer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockLampPowerer", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockLaserRelay.json b/src/main/resources/assets/actuallyadditions/models/item/blockLaserRelay.json deleted file mode 100644 index 914b5d169..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockLaserRelay.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockLaserRelay", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockLavaFactoryController.json b/src/main/resources/assets/actuallyadditions/models/item/blockLavaFactoryController.json deleted file mode 100644 index c172cd72e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockLavaFactoryController.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockLavaFactoryController", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockLeafGenerator.json b/src/main/resources/assets/actuallyadditions/models/item/blockLeafGenerator.json deleted file mode 100644 index 6ffffa7f9..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockLeafGenerator.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockLeafGenerator", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiner.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiner.json deleted file mode 100644 index 8a27fb3d7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiner.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiner", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartz.json deleted file mode 100644 index 9ce42ed6c..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartz.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscBlackQuartz", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzChiseled.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzChiseled.json deleted file mode 100644 index c4e3ea9c2..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzChiseled.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscBlackQuartzChiseled", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzPillar.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzPillar.json deleted file mode 100644 index 3594855f7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscBlackQuartzPillar.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscBlackQuartzPillar", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscCharcoal.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscCharcoal.json deleted file mode 100644 index db375243d..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscCharcoal.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscCharcoal", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderCasing.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderCasing.json deleted file mode 100644 index d3df49bfc..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderCasing.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscEnderCasing", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderpearl.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderpearl.json deleted file mode 100644 index ad2d80cfb..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscEnderpearl.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscEnderpearl", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscIronCasing.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscIronCasing.json deleted file mode 100644 index 4fb8d60ba..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscIronCasing.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscIronCasing", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscLavaFactoryCase.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscLavaFactoryCase.json deleted file mode 100644 index ea47a42bf..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscLavaFactoryCase.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscLavaFactoryCase", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscOreBlackQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscOreBlackQuartz.json deleted file mode 100644 index e38c15ff1..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscOreBlackQuartz.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscOreBlackQuartz", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockMiscWoodCasing.json b/src/main/resources/assets/actuallyadditions/models/item/blockMiscWoodCasing.json deleted file mode 100644 index f5dc8b9fd..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockMiscWoodCasing.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockMiscWoodCasing", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockOilGenerator.json b/src/main/resources/assets/actuallyadditions/models/item/blockOilGenerator.json deleted file mode 100644 index 02299a829..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockOilGenerator.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockOilGenerator", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomBooster.json b/src/main/resources/assets/actuallyadditions/models/item/blockPhantomBooster.json deleted file mode 100644 index 705390fc8..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomBooster.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPhantomBooster", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomBreaker.json b/src/main/resources/assets/actuallyadditions/models/item/blockPhantomBreaker.json deleted file mode 100644 index 151d4b516..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomBreaker.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPhantomBreaker", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomEnergyface.json b/src/main/resources/assets/actuallyadditions/models/item/blockPhantomEnergyface.json deleted file mode 100644 index 9b1dd5ae4..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomEnergyface.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPhantomEnergyface", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomLiquiface.json b/src/main/resources/assets/actuallyadditions/models/item/blockPhantomLiquiface.json deleted file mode 100644 index 3c723cb29..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomLiquiface.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPhantomLiquiface", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomPlacer.json b/src/main/resources/assets/actuallyadditions/models/item/blockPhantomPlacer.json deleted file mode 100644 index 9264444be..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomPlacer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPhantomPlacer", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomface.json b/src/main/resources/assets/actuallyadditions/models/item/blockPhantomface.json deleted file mode 100644 index ee53fe295..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPhantomface.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPhantomface", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzSlab.json b/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzSlab.json deleted file mode 100644 index 00e998edc..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzSlab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPillarQuartzSlabBottom", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzStair.json b/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzStair.json deleted file mode 100644 index 6dc54675a..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzStair.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPillarQuartzStairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json deleted file mode 100644 index d71f42a72..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPillarQuartzWallInventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPlacer.json b/src/main/resources/assets/actuallyadditions/models/item/blockPlacer.json deleted file mode 100644 index 6154ccbec..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockPlacer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockPlacer", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockQuartzSlab.json b/src/main/resources/assets/actuallyadditions/models/item/blockQuartzSlab.json deleted file mode 100644 index fb84a03ab..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockQuartzSlab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockQuartzSlabBottom", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockQuartzStair.json b/src/main/resources/assets/actuallyadditions/models/item/blockQuartzStair.json deleted file mode 100644 index bf66153e9..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockQuartzStair.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockQuartzStairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json deleted file mode 100644 index 1766d401f..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockQuartzWallInventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockRangedCollector.json b/src/main/resources/assets/actuallyadditions/models/item/blockRangedCollector.json deleted file mode 100644 index d69bc18c8..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockRangedCollector.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockRangedCollector", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockRice.json b/src/main/resources/assets/actuallyadditions/models/item/blockRice.json deleted file mode 100644 index fec824365..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockRice.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockRiceStage1" - }, - "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/actuallyadditions/models/item/blockSmileyCloud.json b/src/main/resources/assets/actuallyadditions/models/item/blockSmileyCloud.json deleted file mode 100644 index e60244b81..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockSmileyCloud.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockSmileyCloud", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json deleted file mode 100644 index c10464080..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksGreenFenceInventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenSlab.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenSlab.json deleted file mode 100644 index 9dab993f8..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenSlab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksGreenSlabBottom", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenStairs.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenStairs.json deleted file mode 100644 index a9fb38819..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenStairs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksGreenStairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenWall.json deleted file mode 100644 index acc151c04..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenWall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksGreenWall", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json deleted file mode 100644 index 2a487daf3..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksWhiteFenceInventory", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteSlab.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteSlab.json deleted file mode 100644 index f323b337e..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteSlab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksWhiteSlabBottom", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteStairs.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteStairs.json deleted file mode 100644 index 37460dfd7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteStairs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksWhiteStairs", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - }, - "gui": { - "rotation": [ 0, 180, 0 ] - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteWall.json deleted file mode 100644 index 3dac81292..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteWall.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTestifiBucksWhiteWall", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTreasureChest.json b/src/main/resources/assets/actuallyadditions/models/item/blockTreasureChest.json deleted file mode 100644 index 86c743016..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockTreasureChest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockTreasureChest", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockWildCanola.json b/src/main/resources/assets/actuallyadditions/models/item/blockWildCanola.json deleted file mode 100644 index b04563dbe..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockWildCanola.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockCanolaStage1" - }, - "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/actuallyadditions/models/item/blockWildCoffee.json b/src/main/resources/assets/actuallyadditions/models/item/blockWildCoffee.json deleted file mode 100644 index 37a181523..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockWildCoffee.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockCoffeeStage1" - }, - "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/actuallyadditions/models/item/blockWildFlax.json b/src/main/resources/assets/actuallyadditions/models/item/blockWildFlax.json deleted file mode 100644 index 42effaf85..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockWildFlax.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockFlaxStage1" - }, - "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/actuallyadditions/models/item/blockWildRice.json b/src/main/resources/assets/actuallyadditions/models/item/blockWildRice.json deleted file mode 100644 index fec824365..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockWildRice.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "builtin/generated", - "textures": { - "layer0": "actuallyadditions:blocks/blockRiceStage1" - }, - "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/actuallyadditions/models/item/blockXPSolidifier.json b/src/main/resources/assets/actuallyadditions/models/item/blockXPSolidifier.json deleted file mode 100644 index 25c5378a7..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/blockXPSolidifier.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "actuallyadditions:block/blockXPSolidifier", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} \ No newline at end of file From 6e18866c795df2916afc0fc44645546f073b35e8 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 3 May 2016 08:45:01 +0200 Subject: [PATCH 059/322] Fixed equipment slot in energizer and enervator being off --- .../mod/inventory/ContainerEnergizer.java | 24 ++++++++++--------- .../mod/inventory/ContainerEnervator.java | 21 ++++++++-------- .../mod/items/base/ItemArmorAA.java | 3 ++- .../misc/special/ThreadSpecialFetcher.java | 2 +- .../mod/update/ThreadUpdateChecker.java | 2 +- .../blockstates/blockHeatCollector.json | 2 +- 6 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index d98edf938..08942436b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -18,6 +18,7 @@ import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -27,9 +28,10 @@ import net.minecraftforge.fml.relauncher.SideOnly; @InventoryContainer public class ContainerEnergizer extends Container{ + public static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[] {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; private TileEntityEnergizer energizer; - public ContainerEnergizer(EntityPlayer player, TileEntityBase tile){ + public ContainerEnergizer(final EntityPlayer player, TileEntityBase tile){ this.energizer = (TileEntityEnergizer)tile; InventoryPlayer inventory = player.inventory; @@ -44,24 +46,24 @@ public class ContainerEnergizer extends Container{ for(int i = 0; i < 9; i++){ this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 155)); } - final EntityPlayer finalPlayer = player; - for(int i = 0; i < 4; ++i){ - final int finalI = i; - this.addSlotToContainer(new Slot(inventory, inventory.getSizeInventory()-1-i, 102, 19+i*18){ - @Override - public boolean isItemValid(ItemStack stack){ - return stack != null && stack.getItem().isValidArmor(stack, ContainerEnervator.ARMOR_SLOTS[finalI], finalPlayer); - } + for(int k = 0; k < 4; ++k){ + final EntityEquipmentSlot slot = VALID_EQUIPMENT_SLOTS[k]; + this.addSlotToContainer(new Slot(player.inventory, 36+(3-k), 102, 19+k*18){ @Override public int getSlotStackLimit(){ return 1; } + @Override + public boolean isItemValid(ItemStack stack){ + return stack != null && stack.getItem().isValidArmor(stack, slot, player); + } + @Override @SideOnly(Side.CLIENT) public String getSlotTexture(){ - return ItemArmor.EMPTY_SLOT_NAMES[finalI]; + return ItemArmor.EMPTY_SLOT_NAMES[slot.getIndex()]; } }); } @@ -74,7 +76,7 @@ public class ContainerEnergizer extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 5774aed05..3a2b66098 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -28,10 +28,9 @@ import net.minecraftforge.fml.relauncher.SideOnly; @InventoryContainer public class ContainerEnervator extends Container{ - public static final EntityEquipmentSlot[] ARMOR_SLOTS = new EntityEquipmentSlot[]{EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; private TileEntityEnervator enervator; - public ContainerEnervator(EntityPlayer player, TileEntityBase tile){ + public ContainerEnervator(final EntityPlayer player, TileEntityBase tile){ this.enervator = (TileEntityEnervator)tile; InventoryPlayer inventory = player.inventory; @@ -46,24 +45,24 @@ public class ContainerEnervator extends Container{ for(int i = 0; i < 9; i++){ this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 155)); } - final EntityPlayer finalPlayer = player; - for(int i = 0; i < 4; ++i){ - final int finalI = i; - this.addSlotToContainer(new Slot(inventory, inventory.getSizeInventory()-1-i, 102, 19+i*18){ - @Override - public boolean isItemValid(ItemStack stack){ - return stack != null && stack.getItem().isValidArmor(stack, ARMOR_SLOTS[finalI], finalPlayer); - } + for(int k = 0; k < 4; ++k){ + final EntityEquipmentSlot slot = ContainerEnergizer.VALID_EQUIPMENT_SLOTS[k]; + this.addSlotToContainer(new Slot(player.inventory, 36+(3-k), 102, 19+k*18){ @Override public int getSlotStackLimit(){ return 1; } + @Override + public boolean isItemValid(ItemStack stack){ + return stack != null && stack.getItem().isValidArmor(stack, slot, player); + } + @Override @SideOnly(Side.CLIENT) public String getSlotTexture(){ - return ItemArmor.EMPTY_SLOT_NAMES[finalI]; + return ItemArmor.EMPTY_SLOT_NAMES[slot.getIndex()]; } }); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 41e9e8727..6954f0df1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnergizer; import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnervator; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -30,7 +31,7 @@ public class ItemArmorAA extends ItemArmor{ } public ItemArmorAA(String name, ArmorMaterial material, int type, ItemStack repairItem, EnumRarity rarity){ - super(material, 0, ContainerEnervator.ARMOR_SLOTS[type]); + super(material, 0, ContainerEnergizer.VALID_EQUIPMENT_SLOTS[type]); this.repairItem = repairItem; this.name = name; this.rarity = rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java index bdc869c50..6fce22f5c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java @@ -19,7 +19,7 @@ import java.util.Properties; public class ThreadSpecialFetcher extends Thread{ public ThreadSpecialFetcher(){ - this.setName(ModUtil.MOD_ID+" Special Fetcher"); + this.setName(ModUtil.NAME+" Special Fetcher"); this.setDaemon(true); this.start(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java index 9535467f1..3f75021c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java @@ -20,7 +20,7 @@ import java.util.Properties; public class ThreadUpdateChecker extends Thread{ public ThreadUpdateChecker(){ - this.setName(ModUtil.MOD_ID+" Update Checker"); + this.setName(ModUtil.NAME+" Update Checker"); this.setDaemon(true); this.start(); } diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json b/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json index 42f8b7f52..fb8dc627c 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockHeatCollector.json @@ -4,7 +4,7 @@ "model": "minecraft:cube_bottom_top", "textures": { "side": "actuallyadditions:blocks/blockHeatCollectorSide", - "bottom": "actuallyadditions:blocks/blockHeatCollector", + "bottom": "actuallyadditions:blocks/blockHeatCollectorBottom", "top": "actuallyadditions:blocks/blockHeatCollectorTop" }, "transform": "forge:default-block" From 15c65216cdaf839b13015ff02ff69d6d1ebbf032 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 3 May 2016 18:29:02 +0200 Subject: [PATCH 060/322] Some more model work --- .../mod/blocks/BlockColoredLamp.java | 7 ++--- .../mod/blocks/BlockCrystal.java | 5 ++-- .../mod/blocks/BlockMisc.java | 7 ++--- .../mod/blocks/BlockWildPlant.java | 7 ++--- .../mod/blocks/base/BlockBase.java | 3 +- .../mod/blocks/base/BlockBushBase.java | 3 +- .../mod/blocks/base/BlockContainerBase.java | 3 +- .../mod/blocks/base/BlockPlant.java | 3 +- .../mod/blocks/base/BlockStair.java | 3 +- .../mod/items/ItemAllToolAA.java | 8 +++--- .../mod/items/ItemCrystal.java | 5 ++-- .../mod/items/ItemDrill.java | 5 ++-- .../actuallyadditions/mod/items/ItemDust.java | 3 +- .../mod/items/ItemFoods.java | 5 ++-- .../actuallyadditions/mod/items/ItemJams.java | 3 +- .../actuallyadditions/mod/items/ItemMisc.java | 5 ++-- .../mod/items/ItemPotionRing.java | 3 +- .../mod/items/base/ItemArmorAA.java | 3 +- .../mod/items/base/ItemBase.java | 3 +- .../mod/items/base/ItemBucketAA.java | 3 +- .../mod/items/base/ItemEnergy.java | 3 +- .../mod/items/base/ItemFoodBase.java | 3 +- .../mod/items/base/ItemHoeAA.java | 3 +- .../mod/items/base/ItemSeed.java | 3 +- .../mod/items/base/ItemSwordAA.java | 3 +- .../mod/items/base/ItemToolAA.java | 5 ++-- .../mod/proxy/ClientProxy.java | 8 +++--- .../actuallyadditions/mod/proxy/IProxy.java | 3 +- .../mod/proxy/ServerProxy.java | 4 ++- .../tile/TileEntityAtomicReconstructor.java | 1 - .../mod/tile/TileEntityFluidCollector.java | 6 ++-- .../blockstates/blockBreaker.json | 28 +++++++++++++++++++ .../blockstates/blockDirectionalBreaker.json | 28 +++++++++++++++++++ .../blockstates/blockDropper.json | 28 +++++++++++++++++++ .../blockstates/blockFluidCollector.json | 28 +++++++++++++++++++ .../blockstates/blockFluidPlacer.json | 28 +++++++++++++++++++ .../blockstates/blockPlacer.json | 28 +++++++++++++++++++ .../blockstates/blockRangedCollector.json | 14 ++++++++++ .../blockstates/blockmisc.json | 23 +++++++++++++++ 39 files changed, 277 insertions(+), 57 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockmisc.json diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 4ef3ad9d8..913c54c9c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -22,6 +22,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -124,13 +125,9 @@ public class BlockColoredLamp extends BlockBase{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[allLampTypes.length]; for(int i = 0; i < allLampTypes.length; i++){ - String name = this.getBaseName()+allLampTypes[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); } - ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index fea22ae8f..72142abc1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -20,6 +20,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -64,9 +65,9 @@ public class BlockCrystal extends BlockBase{ protected void registerRendering(){ ResourceLocation[] resLocs = new ResourceLocation[allCrystals.length]; for(int i = 0; i < allCrystals.length; i++){ - String name = this.getBaseName()+allCrystals[i].name; + String name = this.getRegistryName()+allCrystals[i].name; resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index 931386013..041d56c53 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -20,6 +20,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -62,13 +63,9 @@ public class BlockMisc extends BlockBase{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[allMiscBlocks.length]; for(int i = 0; i < allMiscBlocks.length; i++){ - String name = this.getBaseName()+allMiscBlocks[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); } - ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 663e19c85..ccdfd082a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -24,6 +24,7 @@ import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -94,13 +95,9 @@ public class BlockWildPlant extends BlockBushBase{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[allWildPlants.length]; for(int i = 0; i < allWildPlants.length; i++){ - String name = this.getBaseName()+allWildPlants[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); } - ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 0bb456f98..c37f09f56 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -18,6 +18,7 @@ import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -52,7 +53,7 @@ public class BlockBase extends Block{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index d509bec56..8d1cecb11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -18,6 +18,7 @@ import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -52,7 +53,7 @@ public class BlockBushBase extends BlockBush{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index d08afdb18..69efb8475 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -22,6 +22,7 @@ import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -71,7 +72,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 092db8a7b..39b90257d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.BlockCrops; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -66,7 +67,7 @@ public class BlockPlant extends BlockCrops{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index c8294e7ea..2a4b4c7e9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockStairs; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -55,7 +56,7 @@ public class BlockStair extends BlockStairs{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index b5c84bc3e..3fab69c26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -18,6 +18,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -53,10 +54,9 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ @Override protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, "itemPaxel")); - ActuallyAdditions.proxy.addRenderVariant(this, new ResourceLocation(ModUtil.MOD_ID, "itemPaxel")); - - + ResourceLocation resLoc = new ResourceLocation(ModUtil.MOD_ID, "itemPaxel"); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(resLoc, "inventory")); + ActuallyAdditions.proxy.addRenderVariant(this, resLoc); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 04874bd94..63b5fc788 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.BlockCrystal; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -60,9 +61,9 @@ public class ItemCrystal extends ItemBase{ protected void registerRendering(){ ResourceLocation[] resLocs = new ResourceLocation[BlockCrystal.allCrystals.length]; for(int i = 0; i < BlockCrystal.allCrystals.length; i++){ - String name = this.getBaseName()+BlockCrystal.allCrystals[i].name; + String name = this.getRegistryName()+BlockCrystal.allCrystals[i].name; resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index ecb0dea10..3058c18fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -24,6 +24,7 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -345,9 +346,9 @@ public class ItemDrill extends ItemEnergy{ protected void registerRendering(){ ResourceLocation[] resLocs = new ResourceLocation[16]; for(int i = 0; i < 16; i++){ - String name = this.getBaseName()+TheColoredLampColors.values()[i].name; + String name = this.getRegistryName()+TheColoredLampColors.values()[i].name; resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index a32317527..2bf2c4e04 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; @@ -62,7 +63,7 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allDusts.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), "inventory")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 797f57e27..505e79916 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -104,9 +105,9 @@ public class ItemFoods extends ItemFoodBase{ protected void registerRendering(){ ResourceLocation[] resLocs = new ResourceLocation[allFoods.length]; for(int i = 0; i < allFoods.length; i++){ - String name = this.getBaseName()+allFoods[i].name; + String name = this.getRegistryName()+allFoods[i].name; resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 8a23b4cb1..8c6b53d09 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheJams; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; @@ -102,7 +103,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allJams.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), "inventory")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 61c83adc5..80e88f81d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -61,9 +62,9 @@ public class ItemMisc extends ItemBase{ protected void registerRendering(){ ResourceLocation[] resLocs = new ResourceLocation[allMiscItems.length]; for(int i = 0; i < allMiscItems.length; i++){ - String name = this.getBaseName()+allMiscItems[i].name; + String name = this.getRegistryName()+allMiscItems[i].name; resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, name)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 843e4d49e..cec98f1e3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.ThePotionRings; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; @@ -107,7 +108,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allRings.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), "inventory")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 6954f0df1..34b8e751f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnergizer; import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnervator; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -54,7 +55,7 @@ public class ItemArmorAA extends ItemArmor{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index 528e4cacf..bb54efc9d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -43,6 +44,6 @@ public class ItemBase extends Item{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java index 547a7a409..d2a468e02 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemBucket; @@ -47,7 +48,7 @@ public class ItemBucketAA extends ItemBucket{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 07f3a25cc..4a9ac52bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -14,6 +14,7 @@ import cofh.api.energy.ItemEnergyContainer; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -54,7 +55,7 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index 4b67029a6..1fce35a81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -44,6 +45,6 @@ public class ItemFoodBase extends ItemFood{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index 0f0f2f584..d7db327b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemHoe; @@ -50,7 +51,7 @@ public class ItemHoeAA extends ItemHoe{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 8c152bbc8..452a609f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -61,7 +62,7 @@ public class ItemSeed extends ItemSeeds{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index 962f164e4..892f2cf71 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; @@ -50,7 +51,7 @@ public class ItemSwordAA extends ItemSword{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } protected Class getItemBlock(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index 06cf84444..aa46e8544 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -2,12 +2,11 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.oredict.OreDictionary; import java.util.Set; @@ -49,7 +48,7 @@ public class ItemToolAA extends ItemTool{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ResourceLocation(ModUtil.MOD_ID, this.getBaseName())); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index cb1715f75..053b8a57e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -60,7 +60,7 @@ public class ClientProxy implements IProxy{ public static int bookletCharCount; private static List colorProdividingItemsForRegistering = new ArrayList(); - private static Map modelLocationsForRegistering = new HashMap(); + private static Map modelLocationsForRegistering = new HashMap(); private static Map modelVariantsForRegistering = new HashMap(); private static void countBookletWords(){ @@ -99,8 +99,8 @@ public class ClientProxy implements IProxy{ PersistentClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"Data.dat")); - for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ - ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), new ModelResourceLocation(entry.getValue(), "inventory")); + for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ + ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), entry.getValue()); } for(Map.Entry entry : modelVariantsForRegistering.entrySet()){ ModelBakery.registerItemVariants(entry.getKey(), entry.getValue()); @@ -165,7 +165,7 @@ public class ClientProxy implements IProxy{ } @Override - public void addRenderRegister(ItemStack stack, ResourceLocation location){ + public void addRenderRegister(ItemStack stack, ModelResourceLocation location){ modelLocationsForRegistering.put(stack, location); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index b5eeeabee..3b084f9e9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.proxy; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -25,7 +26,7 @@ public interface IProxy{ void postInit(FMLPostInitializationEvent event); - void addRenderRegister(ItemStack stack, ResourceLocation location); + void addRenderRegister(ItemStack stack, ModelResourceLocation location); void addRenderVariant(Item item, ResourceLocation... location); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index a4a92cfd3..b7c17bdd4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -11,6 +11,8 @@ package de.ellpeck.actuallyadditions.mod.proxy; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -37,7 +39,7 @@ public class ServerProxy implements IProxy{ } @Override - public void addRenderRegister(ItemStack stack, ResourceLocation location){ + public void addRenderRegister(ItemStack stack, ModelResourceLocation location){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 03cc860c4..c214ee763 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -121,7 +121,6 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ if(!ConfigValues.lessSound){ - System.out.println("SOUND!"); this.worldObj.playSound(null, this.getX(), this.getY(), this.getZ(), SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 9994ef410..b5223da8c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -83,8 +83,10 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements } else if(this.isPlacer && PosUtil.getBlock(coordsBlock, this.worldObj).isReplaceable(this.worldObj, coordsBlock)){ if(this.tank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME){ - if(this.tank.getFluid().getFluid().getBlock() != null){ - WorldUtil.useItemAtSide(sideToManipulate, this.worldObj, this.pos, new ItemStack(this.tank.getFluid().getFluid().getBlock())); + //TODO Fix this because apparently getting the item of the water block (for the ItemStack) returns null + Block block = this.tank.getFluid().getFluid().getBlock(); + if(block != null){ + WorldUtil.useItemAtSide(sideToManipulate, this.worldObj, this.pos, new ItemStack(block)); this.tank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); } } diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json b/src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json new file mode 100644 index 000000000..141e4d1a9 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockBreaker.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockBreaker", + "down": "#particle", + "up": "actuallyadditions:blocks/blockBreakerTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockBreakerFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json b/src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json new file mode 100644 index 000000000..17b37d272 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockDirectionalBreaker.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockDirectionalBreaker", + "down": "#particle", + "up": "actuallyadditions:blocks/blockDirectionalBreakerTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockDirectionalBreakerFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json b/src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json new file mode 100644 index 000000000..172868672 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockDropper.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockDropper", + "down": "#particle", + "up": "actuallyadditions:blocks/blockDropperTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockDropperFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json new file mode 100644 index 000000000..56495538f --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFluidCollector.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockFluidCollector", + "down": "#particle", + "up": "actuallyadditions:blocks/blockFluidCollectorTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockFluidCollectorFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json new file mode 100644 index 000000000..7727f4693 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFluidPlacer.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockFluidPlacer", + "down": "#particle", + "up": "actuallyadditions:blocks/blockFluidPlacerTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockFluidPlacerFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json new file mode 100644 index 000000000..39c3138d1 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPlacer.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockPlacer", + "down": "#particle", + "up": "actuallyadditions:blocks/blockPlacerTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockPlacerFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json b/src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json new file mode 100644 index 000000000..ee6cf99ab --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockRangedCollector.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockRangedCollector" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockmisc.json b/src/main/resources/assets/actuallyadditions/blockstates/blockmisc.json new file mode 100644 index 000000000..95c1376c4 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockmisc.json @@ -0,0 +1,23 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscBlackQuartzPillar" } }, + "1": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" } }, + "2": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscBlackQuartz" } }, + "3": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscOreBlackQuartz" } }, + "4": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscWoodCasing" } }, + "5": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscCharcoal" } }, + "6": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscEnderpearl" } }, + "7": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscLavaFactoryCase" } }, + "8": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscEnderCasing" } }, + "9": { "textures" : { "all" : "actuallyadditions:blocks/blockMiscIronCasing" } } + } + } +} \ No newline at end of file From 16c2c22cf726a144c95a043fabbb43206e1c936b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 3 May 2016 21:26:02 +0200 Subject: [PATCH 061/322] Finished models --- .../mod/blocks/BlockCoffeeMachine.java | 2 +- .../mod/blocks/BlockCrystal.java | 8 +-- .../mod/blocks/BlockWallAA.java | 20 ++++--- .../mod/items/ItemCrystal.java | 2 +- .../mod/items/ItemDrill.java | 2 +- .../mod/items/ItemFoods.java | 2 +- .../actuallyadditions/mod/items/ItemMisc.java | 2 +- .../blockstates/blockAtomicReconstructor.json | 28 ++++++++++ .../blockstates/blockBlackLotus.json | 14 +++++ .../blockstates/blockCanola.json | 23 ++++++++ .../blockstates/blockCanolaPress.json | 16 ++++++ .../blockstates/blockChiseledQuartzSlab.json | 20 +++++++ .../blockstates/blockChiseledQuartzStair.json | 54 +++++++++++++++++++ .../blockstates/blockChiseledQuartzWall.json | 19 +++++++ .../blockstates/blockCoffee.json | 23 ++++++++ .../blockstates/blockCoffeeMachine.json | 17 ++++++ .../blockstates/blockColoredLamp.json | 29 ++++++++++ .../blockstates/blockColoredLampOn.json | 29 ++++++++++ .../blockstates/blockCompost.json | 11 ++++ .../blockstates/blockCrystal.json | 19 +++++++ .../blockstates/blockFeeder.json | 16 ++++++ .../blockstates/blockFermentingBarrel.json | 16 ++++++ .../blockstates/blockFireworkBox.json | 16 ++++++ .../blockstates/blockFishingNet.json | 11 ++++ .../blockstates/blockFlax.json | 23 ++++++++ .../blockstates/blockFurnaceSolar.json | 11 ++++ .../blockstates/blockGiantChest.json | 16 ++++++ .../blockstates/blockLampPowerer.json | 28 ++++++++++ .../blockstates/blockLaserRelay.json | 19 +++++++ .../blockstates/blockPhantomBooster.json | 11 ++++ .../blockstates/blockPhantomBreaker.json | 14 +++++ .../blockstates/blockPhantomEnergyface.json | 14 +++++ .../blockstates/blockPhantomLiquiface.json | 14 +++++ .../blockstates/blockPhantomPlacer.json | 14 +++++ .../blockstates/blockPhantomface.json | 14 +++++ .../blockstates/blockPillarQuartzSlab.json | 20 +++++++ .../blockstates/blockPillarQuartzStair.json | 54 +++++++++++++++++++ .../blockstates/blockPillarQuartzWall.json | 19 +++++++ .../blockstates/blockQuartzSlab.json | 20 +++++++ .../blockstates/blockQuartzStair.json | 54 +++++++++++++++++++ .../blockstates/blockQuartzWall.json | 19 +++++++ .../blockstates/blockRice.json | 23 ++++++++ .../blockstates/blockSmileyCloud.json | 17 ++++++ .../blockTestifiBucksGreenFence.json | 19 +++++++ .../blockTestifiBucksGreenSlab.json | 20 +++++++ .../blockTestifiBucksGreenStairs.json | 54 +++++++++++++++++++ .../blockTestifiBucksGreenWall.json | 14 +++++ .../blockTestifiBucksWhiteFence.json | 19 +++++++ .../blockTestifiBucksWhiteSlab.json | 20 +++++++ .../blockTestifiBucksWhiteStairs.json | 54 +++++++++++++++++++ .../blockTestifiBucksWhiteWall.json | 14 +++++ .../blockstates/blockTreasureChest.json | 26 +++++++++ .../blockstates/blockWild.json | 17 ++++++ .../blockChiseledQuartzWallInventory.json | 6 +++ .../block/blockChiseledQuartzWallPost.json | 6 +++ .../block/blockChiseledQuartzWallSide.json | 6 +++ .../block/blockPillarQuartzWallInventory.json | 6 +++ .../block/blockPillarQuartzWallPost.json | 6 +++ .../block/blockPillarQuartzWallSide.json | 6 +++ .../block/blockQuartzWallInventory.json | 6 +++ .../models/block/blockQuartzWallPost.json | 6 +++ .../models/block/blockQuartzWallSide.json | 6 +++ .../blockTestifiBucksGreenFenceInventory.json | 6 +++ .../blockTestifiBucksGreenFencePost.json | 6 +++ .../blockTestifiBucksGreenFenceSide.json | 6 +++ .../blockTestifiBucksWhiteFenceInventory.json | 6 +++ .../blockTestifiBucksWhiteFencePost.json | 6 +++ .../blockTestifiBucksWhiteFenceSide.json | 6 +++ .../models/item/blockChiseledQuartzWall.json | 3 ++ .../models/item/blockPillarQuartzWall.json | 3 ++ .../models/item/blockQuartzWall.json | 3 ++ .../item/blockTestifiBucksGreenFence.json | 3 ++ .../item/blockTestifiBucksWhiteFence.json | 3 ++ 73 files changed, 1146 insertions(+), 19 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockRice.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockWild.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallSide.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallSide.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallSide.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceSide.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceSide.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 5c1aafa9e..08d4f9c75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -34,7 +34,7 @@ import net.minecraft.world.World; public class BlockCoffeeMachine extends BlockContainerBase{ - private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625*2, 1-0.0625, 1-0.0625); + private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625, 1-0.0625*2, 1-0.0625); private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index 72142abc1..59ddb5ecd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -25,7 +24,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -63,13 +61,9 @@ public class BlockCrystal extends BlockBase{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[allCrystals.length]; for(int i = 0; i < allCrystals.length; i++){ - String name = this.getRegistryName()+allCrystals[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); } - ActuallyAdditions.proxy.addRenderVariant(Item.getItemFromBlock(this), resLocs); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 40900050a..e75e7b0c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -34,8 +34,9 @@ import java.util.List; public class BlockWallAA extends BlockBase{ - protected static final AxisAlignedBB[] field_185751_g = new AxisAlignedBB[]{new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; - protected static final AxisAlignedBB[] field_185750_B = new AxisAlignedBB[]{field_185751_g[0].setMaxY(1.5D), field_185751_g[1].setMaxY(1.5D), field_185751_g[2].setMaxY(1.5D), field_185751_g[3].setMaxY(1.5D), field_185751_g[4].setMaxY(1.5D), field_185751_g[5].setMaxY(1.5D), field_185751_g[6].setMaxY(1.5D), field_185751_g[7].setMaxY(1.5D), field_185751_g[8].setMaxY(1.5D), field_185751_g[9].setMaxY(1.5D), field_185751_g[10].setMaxY(1.5D), field_185751_g[11].setMaxY(1.5D), field_185751_g[12].setMaxY(1.5D), field_185751_g[13].setMaxY(1.5D), field_185751_g[14].setMaxY(1.5D), field_185751_g[15].setMaxY(1.5D)}; + protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] {AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)}; + private int meta; public BlockWallAA(String name, Block base){ this(name, base, 0); @@ -53,7 +54,7 @@ public class BlockWallAA extends BlockBase{ this.setDefaultState(this.blockState.getBaseState().withProperty(BlockWall.UP, false).withProperty(BlockWall.NORTH, false).withProperty(BlockWall.EAST, false).withProperty(BlockWall.SOUTH, false).withProperty(BlockWall.WEST, false)); } - private static int figureOutSomeWallStuff(IBlockState state){ + private static int yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(IBlockState state){ int i = 0; if(state.getValue(BlockWall.NORTH)){ @@ -77,7 +78,12 @@ public class BlockWallAA extends BlockBase{ @Override public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos){ - return state.withProperty(BlockWall.UP, !worldIn.isAirBlock(pos.up())).withProperty(BlockWall.NORTH, this.canConnectTo(worldIn, pos.north())).withProperty(BlockWall.EAST, this.canConnectTo(worldIn, pos.east())).withProperty(BlockWall.SOUTH, this.canConnectTo(worldIn, pos.south())).withProperty(BlockWall.WEST, this.canConnectTo(worldIn, pos.west())); + boolean flag = this.canConnectTo(worldIn, pos.north()); + boolean flag1 = this.canConnectTo(worldIn, pos.east()); + boolean flag2 = this.canConnectTo(worldIn, pos.south()); + boolean flag3 = this.canConnectTo(worldIn, pos.west()); + boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3; + return state.withProperty(BlockWall.UP, !flag4 || !worldIn.isAirBlock(pos.up())).withProperty(BlockWall.NORTH, flag).withProperty(BlockWall.EAST, flag1).withProperty(BlockWall.SOUTH, flag2).withProperty(BlockWall.WEST, flag3); } @Override @@ -99,13 +105,13 @@ public class BlockWallAA extends BlockBase{ @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ state = this.getActualState(state, source, pos); - return field_185751_g[figureOutSomeWallStuff(state)]; + return AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(state)]; } @Override - public AxisAlignedBB getSelectedBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ blockState = this.getActualState(blockState, worldIn, pos); - return field_185750_B[figureOutSomeWallStuff(blockState)]; + return CLIP_AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(blockState)]; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 63b5fc788..0ae367752 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -62,7 +62,7 @@ public class ItemCrystal extends ItemBase{ ResourceLocation[] resLocs = new ResourceLocation[BlockCrystal.allCrystals.length]; for(int i = 0; i < BlockCrystal.allCrystals.length; i++){ String name = this.getRegistryName()+BlockCrystal.allCrystals[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 3058c18fd..625788ed8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -347,7 +347,7 @@ public class ItemDrill extends ItemEnergy{ ResourceLocation[] resLocs = new ResourceLocation[16]; for(int i = 0; i < 16; i++){ String name = this.getRegistryName()+TheColoredLampColors.values()[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 505e79916..4acc25e4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -106,7 +106,7 @@ public class ItemFoods extends ItemFoodBase{ ResourceLocation[] resLocs = new ResourceLocation[allFoods.length]; for(int i = 0; i < allFoods.length; i++){ String name = this.getRegistryName()+allFoods[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 80e88f81d..00999d360 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -63,7 +63,7 @@ public class ItemMisc extends ItemBase{ ResourceLocation[] resLocs = new ResourceLocation[allMiscItems.length]; for(int i = 0; i < allMiscItems.length; i++){ String name = this.getRegistryName()+allMiscItems[i].name; - resLocs[i] = new ResourceLocation(ModUtil.MOD_ID, name); + resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } ActuallyAdditions.proxy.addRenderVariant(this, resLocs); diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json b/src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json new file mode 100644 index 000000000..323f41ede --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockAtomicReconstructor.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockAtomicReconstructor", + "down": "#particle", + "up": "actuallyadditions:blocks/blockAtomicReconstructorTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockAtomicReconstructorFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json b/src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json new file mode 100644 index 000000000..746308517 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockBlackLotus.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cross", + "textures": { + "cross": "actuallyadditions:blocks/blockBlackLotus" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json new file mode 100644 index 000000000..292029962 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCanola.json @@ -0,0 +1,23 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:crop", + "textures": { + "crop": "actuallyadditions:blocks/blockCanolaStage1" + } + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "age": { + "0": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage1" } }, + "1": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage2" } }, + "2": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage2" } }, + "3": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage2" } }, + "4": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage3" } }, + "5": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage3" } }, + "6": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage3" } }, + "7": { "textures": { "crop": "actuallyadditions:blocks/blockCanolaStage4" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json new file mode 100644 index 000000000..e6e9fd014 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCanolaPress.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockCanolaPress", + "bottom": "#top", + "top": "actuallyadditions:blocks/blockCanolaPressTop" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json new file mode 100644 index 000000000..61816ef58 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzSlab.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:half_slab", + "textures": { + "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", + "top": "#bottom", + "side": "#bottom" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": { "model": "minecraft:upper_slab" } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json new file mode 100644 index 000000000..e64773e72 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzStair.json @@ -0,0 +1,54 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled", + "top": "#bottom", + "side": "#bottom" + } + }, + "variants": { + "normal": { "model": "minecraft:stairs" }, + "inventory": { "model": "minecraft:stairs" }, + "facing=east,half=bottom,shape=straight": { "model": "minecraft:stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json new file mode 100644 index 000000000..e0fb94fbe --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockChiseledQuartzWall.json @@ -0,0 +1,19 @@ +{ + "multipart": [ + { "when": { "up": "true" }, + "apply": { "model": "actuallyadditions:blockChiseledQuartzWallPost" } + }, + { "when": { "north": "true" }, + "apply": { "model": "actuallyadditions:blockChiseledQuartzWallSide", "uvlock": true } + }, + { "when": { "east": "true" }, + "apply": { "model": "actuallyadditions:blockChiseledQuartzWallSide", "y": 90, "uvlock": true } + }, + { "when": { "south": "true" }, + "apply": { "model": "actuallyadditions:blockChiseledQuartzWallSide", "y": 180, "uvlock": true } + }, + { "when": { "west": "true" }, + "apply": { "model": "actuallyadditions:blockChiseledQuartzWallSide", "y": 270, "uvlock": true } + } + ] +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json new file mode 100644 index 000000000..e5e4e9fe7 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCoffee.json @@ -0,0 +1,23 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:crop", + "textures": { + "crop": "actuallyadditions:blocks/blockCoffeeStage1" + } + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "age": { + "0": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage1" } }, + "1": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage2" } }, + "2": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage2" } }, + "3": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage3" } }, + "4": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage4" } }, + "5": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage4" } }, + "6": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage5" } }, + "7": { "textures": { "crop": "actuallyadditions:blocks/blockCoffeeStage6" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json new file mode 100644 index 000000000..e5a656040 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCoffeeMachine.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockCoffeeMachine", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "y" : 180 }, + "1": { "y" : 0 }, + "2": { "y" : 90 }, + "3": { "y" : 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json b/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json new file mode 100644 index 000000000..141db12a5 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLamp.json @@ -0,0 +1,29 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampWhite" } }, + "1": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOrange" } }, + "2": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampMagenta" } }, + "3": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampLightBlue" } }, + "4": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampYellow" } }, + "5": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampLime" } }, + "6": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampPink" } }, + "7": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampGray" } }, + "8": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampLightGray" } }, + "9": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampCyan" } }, + "10": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampPurple" } }, + "11": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampBlue" } }, + "12": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampBrown" } }, + "13": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampGreen" } }, + "14": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampRed" } }, + "15": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampBlack" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json b/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json new file mode 100644 index 000000000..04f4cd249 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockColoredLampOn.json @@ -0,0 +1,29 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnWhite" } }, + "1": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnOrange" } }, + "2": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnMagenta" } }, + "3": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnLightBlue" } }, + "4": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnYellow" } }, + "5": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnLime" } }, + "6": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnPink" } }, + "7": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnGray" } }, + "8": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnLightGray" } }, + "9": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnCyan" } }, + "10": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnPurple" } }, + "11": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnBlue" } }, + "12": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnBrown" } }, + "13": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnGreen" } }, + "14": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnRed" } }, + "15": { "textures" : { "all" : "actuallyadditions:blocks/blockColoredLampOnBlack" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json new file mode 100644 index 000000000..fa7aee26b --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCompost.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockCompost", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json new file mode 100644 index 000000000..762a9aab9 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCrystal.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalRed" } }, + "1": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalBlue" } }, + "2": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalLightBlue" } }, + "3": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalBlack" } }, + "4": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalGreen" } }, + "5": { "textures" : { "all" : "actuallyadditions:blocks/blockCrystalWhite" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json new file mode 100644 index 000000000..b5991fc59 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFeeder.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockFeeder", + "bottom": "#top", + "top": "actuallyadditions:blocks/blockFeederTop" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json new file mode 100644 index 000000000..31c1e4fe0 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFermentingBarrel.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockFermentingBarrel", + "bottom": "#top", + "top": "actuallyadditions:blocks/blockFermentingBarrelTop" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json new file mode 100644 index 000000000..040c8d451 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFireworkBox.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockFireworkBox", + "bottom": "#side", + "top": "actuallyadditions:blocks/blockFireworkBoxTop" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json new file mode 100644 index 000000000..69132a90d --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFishingNet.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockFishingNet", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json new file mode 100644 index 000000000..7ed1088df --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFlax.json @@ -0,0 +1,23 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:crop", + "textures": { + "crop": "actuallyadditions:blocks/blockFlaxStage1" + } + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "age": { + "0": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage1" } }, + "1": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage2" } }, + "2": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage2" } }, + "3": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage3" } }, + "4": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage4" } }, + "5": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage4" } }, + "6": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage5" } }, + "7": { "textures": { "crop": "actuallyadditions:blocks/blockFlaxStage6" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json b/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json new file mode 100644 index 000000000..ec0aa1e5c --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockFurnaceSolar.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockFurnaceSolar", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json b/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json new file mode 100644 index 000000000..c3a8f16e4 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChest.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockGiantChest", + "bottom": "actuallyadditions:blocks/blockGiantChestBottom", + "top": "actuallyadditions:blocks/blockGiantChestTop" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json new file mode 100644 index 000000000..792cdcd96 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLampPowerer.json @@ -0,0 +1,28 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockLampPowerer", + "down": "#particle", + "up": "#particle", + "south": "#particle", + "north": "actuallyadditions:blocks/blockLampPowererFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x" : 90 }, + "1": { "x" : 270 }, + "2": { "y" : 0 }, + "3": { "y" : 180 }, + "4": { "y" : 270 }, + "5": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json new file mode 100644 index 000000000..3ad16948c --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelay.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockLaserRelay", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x": 180 }, + "1": {}, + "2": { "x": 90 }, + "3": { "x": 270 }, + "4": { "x": 90, "y": 270 }, + "5": { "x": 270, "y": 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json new file mode 100644 index 000000000..a176bd833 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBooster.json @@ -0,0 +1,11 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockPhantomBooster", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json new file mode 100644 index 000000000..575be757f --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomBreaker.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockPhantomBreaker" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json new file mode 100644 index 000000000..96d57a530 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomEnergyface.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockPhantomEnergyface" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json new file mode 100644 index 000000000..bba3caad1 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomLiquiface.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockPhantomLiquiface" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json new file mode 100644 index 000000000..da99bdd00 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomPlacer.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockPhantomPlacer" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json new file mode 100644 index 000000000..82d693611 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomface.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockPhantomface" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json new file mode 100644 index 000000000..6850084a0 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzSlab.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:half_slab", + "textures": { + "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", + "top": "#bottom", + "side": "#bottom" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": { "model": "minecraft:upper_slab" } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json new file mode 100644 index 000000000..a96f642ba --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzStair.json @@ -0,0 +1,54 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "actuallyadditions:blocks/blockMiscBlackQuartzPillar", + "top": "#bottom", + "side": "#bottom" + } + }, + "variants": { + "normal": { "model": "minecraft:stairs" }, + "inventory": { "model": "minecraft:stairs" }, + "facing=east,half=bottom,shape=straight": { "model": "minecraft:stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json new file mode 100644 index 000000000..5b033d2a7 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPillarQuartzWall.json @@ -0,0 +1,19 @@ +{ + "multipart": [ + { "when": { "up": "true" }, + "apply": { "model": "actuallyadditions:blockPillarQuartzWallPost" } + }, + { "when": { "north": "true" }, + "apply": { "model": "actuallyadditions:blockPillarQuartzWallSide", "uvlock": true } + }, + { "when": { "east": "true" }, + "apply": { "model": "actuallyadditions:blockPillarQuartzWallSide", "y": 90, "uvlock": true } + }, + { "when": { "south": "true" }, + "apply": { "model": "actuallyadditions:blockPillarQuartzWallSide", "y": 180, "uvlock": true } + }, + { "when": { "west": "true" }, + "apply": { "model": "actuallyadditions:blockPillarQuartzWallSide", "y": 270, "uvlock": true } + } + ] +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json new file mode 100644 index 000000000..e0c091c27 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzSlab.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:half_slab", + "textures": { + "bottom": "actuallyadditions:blocks/blockMiscBlackQuartz", + "top": "#bottom", + "side": "#bottom" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": { "model": "minecraft:upper_slab" } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json new file mode 100644 index 000000000..f64d8e0b1 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzStair.json @@ -0,0 +1,54 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "actuallyadditions:blocks/blockMiscBlackQuartz", + "top": "#bottom", + "side": "#bottom" + } + }, + "variants": { + "normal": { "model": "minecraft:stairs" }, + "inventory": { "model": "minecraft:stairs" }, + "facing=east,half=bottom,shape=straight": { "model": "minecraft:stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json new file mode 100644 index 000000000..726aa6850 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockQuartzWall.json @@ -0,0 +1,19 @@ +{ + "multipart": [ + { "when": { "up": "true" }, + "apply": { "model": "actuallyadditions:blockQuartzWallPost" } + }, + { "when": { "north": "true" }, + "apply": { "model": "actuallyadditions:blockQuartzWallSide", "uvlock": true } + }, + { "when": { "east": "true" }, + "apply": { "model": "actuallyadditions:blockQuartzWallSide", "y": 90, "uvlock": true } + }, + { "when": { "south": "true" }, + "apply": { "model": "actuallyadditions:blockQuartzWallSide", "y": 180, "uvlock": true } + }, + { "when": { "west": "true" }, + "apply": { "model": "actuallyadditions:blockQuartzWallSide", "y": 270, "uvlock": true } + } + ] +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockRice.json b/src/main/resources/assets/actuallyadditions/blockstates/blockRice.json new file mode 100644 index 000000000..98c31ee72 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockRice.json @@ -0,0 +1,23 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:crop", + "textures": { + "crop": "actuallyadditions:blocks/blockRiceStage1" + } + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "age": { + "0": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage1" } }, + "1": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage2" } }, + "2": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage2" } }, + "3": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage3" } }, + "4": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage4" } }, + "5": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage4" } }, + "6": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage5" } }, + "7": { "textures": { "crop": "actuallyadditions:blocks/blockRiceStage6" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json b/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json new file mode 100644 index 000000000..614e008ba --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockSmileyCloud", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "y" : 0 }, + "1": { "y" : 180 }, + "2": { "y" : 270 }, + "3": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json new file mode 100644 index 000000000..f7415555c --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenFence.json @@ -0,0 +1,19 @@ +{ + "multipart": [ + { "when": { "up": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksGreenFencePost" } + }, + { "when": { "north": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksGreenFenceSide", "uvlock": true } + }, + { "when": { "east": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksGreenFenceSide", "y": 90, "uvlock": true } + }, + { "when": { "south": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksGreenFenceSide", "y": 180, "uvlock": true } + }, + { "when": { "west": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksGreenFenceSide", "y": 270, "uvlock": true } + } + ] +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json new file mode 100644 index 000000000..416fd8e2c --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenSlab.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:half_slab", + "textures": { + "bottom": "actuallyadditions:blocks/blockTestifiBucksGreenWall", + "top": "#bottom", + "side": "#bottom" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": { "model": "minecraft:upper_slab" } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json new file mode 100644 index 000000000..6b94a6e85 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenStairs.json @@ -0,0 +1,54 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "actuallyadditions:blocks/blockTestifiBucksGreenWall", + "top": "#bottom", + "side": "#bottom" + } + }, + "variants": { + "normal": { "model": "minecraft:stairs" }, + "inventory": { "model": "minecraft:stairs" }, + "facing=east,half=bottom,shape=straight": { "model": "minecraft:stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json new file mode 100644 index 000000000..aac2e55e0 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksGreenWall.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockTestifiBucksGreenWall" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json new file mode 100644 index 000000000..53a97c100 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteFence.json @@ -0,0 +1,19 @@ +{ + "multipart": [ + { "when": { "up": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksWhiteFencePost" } + }, + { "when": { "north": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceSide", "uvlock": true } + }, + { "when": { "east": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceSide", "y": 90, "uvlock": true } + }, + { "when": { "south": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceSide", "y": 180, "uvlock": true } + }, + { "when": { "west": "true" }, + "apply": { "model": "actuallyadditions:blockTestifiBucksWhiteFenceSide", "y": 270, "uvlock": true } + } + ] +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json new file mode 100644 index 000000000..243043710 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteSlab.json @@ -0,0 +1,20 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:half_slab", + "textures": { + "bottom": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", + "top": "#bottom", + "side": "#bottom" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": {}, + "1": { "model": "minecraft:upper_slab" } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json new file mode 100644 index 000000000..f6fbe75ba --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteStairs.json @@ -0,0 +1,54 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "bottom": "actuallyadditions:blocks/blockTestifiBucksWhiteWall", + "top": "#bottom", + "side": "#bottom" + } + }, + "variants": { + "normal": { "model": "minecraft:stairs" }, + "inventory": { "model": "minecraft:stairs" }, + "facing=east,half=bottom,shape=straight": { "model": "minecraft:stairs" }, + "facing=west,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=straight": { "model": "minecraft:stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs" }, + "facing=west,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=outer_right": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs" }, + "facing=north,half=bottom,shape=outer_left": { "model": "minecraft:outer_stairs", "y": 180, "uvlock": true }, + "facing=east,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs" }, + "facing=west,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=south,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=north,half=bottom,shape=inner_right": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=east,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 270, "uvlock": true }, + "facing=west,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 90, "uvlock": true }, + "facing=south,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs" }, + "facing=north,half=bottom,shape=inner_left": { "model": "minecraft:inner_stairs", "y": 180, "uvlock": true }, + "facing=east,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=straight": { "model": "minecraft:stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=outer_right": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=outer_left": { "model": "minecraft:outer_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=east,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=west,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true }, + "facing=south,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=north,half=top,shape=inner_right": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=east,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "uvlock": true }, + "facing=west,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 180, "uvlock": true }, + "facing=south,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 90, "uvlock": true }, + "facing=north,half=top,shape=inner_left": { "model": "minecraft:inner_stairs", "x": 180, "y": 270, "uvlock": true } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json new file mode 100644 index 000000000..f1f89c3bc --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTestifiBucksWhiteWall.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json b/src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json new file mode 100644 index 000000000..68fdfa6fe --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockTreasureChest.json @@ -0,0 +1,26 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube", + "textures": { + "particle": "actuallyadditions:blocks/blockTreasureChest", + "down": "actuallyadditions:blocks/blockTreasureChestBottom", + "up": "actuallyadditions:blocks/blockTreasureChestTop", + "south": "#particle", + "north": "actuallyadditions:blocks/blockTreasureChestFront", + "east": "#particle", + "west": "#particle" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "y" : 0 }, + "1": { "y" : 180 }, + "2": { "y" : 270 }, + "3": { "y" : 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockWild.json b/src/main/resources/assets/actuallyadditions/blockstates/blockWild.json new file mode 100644 index 000000000..4755635d0 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockWild.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cross", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "textures" : { "cross" : "actuallyadditions:blocks/blockCanolaStage4" } }, + "1": { "textures" : { "cross" : "actuallyadditions:blocks/blockFlaxStage6" } }, + "2": { "textures" : { "cross" : "actuallyadditions:blocks/blockRiceStage6" } }, + "3": { "textures" : { "cross" : "actuallyadditions:blocks/blockCoffeeStage6" } } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json new file mode 100644 index 000000000..1cb504a30 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallInventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json new file mode 100644 index 000000000..0fcadaea6 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallPost.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_post", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallSide.json b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallSide.json new file mode 100644 index 000000000..48e5c7195 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockChiseledQuartzWallSide.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_side", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartzChiseled" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json new file mode 100644 index 000000000..9968403f8 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallInventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json new file mode 100644 index 000000000..a82929d56 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallPost.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_post", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallSide.json b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallSide.json new file mode 100644 index 000000000..b9d06b9c6 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockPillarQuartzWallSide.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_side", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartzPillar" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json new file mode 100644 index 000000000..c51b0152a --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallInventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json new file mode 100644 index 000000000..9eab47d78 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallPost.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_post", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallSide.json b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallSide.json new file mode 100644 index 000000000..b30814a7e --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockQuartzWallSide.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_side", + "textures": { + "wall": "actuallyadditions:blocks/blockMiscBlackQuartz" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json new file mode 100644 index 000000000..5024ce629 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceInventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json new file mode 100644 index 000000000..5470b62d1 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFencePost.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_post", + "textures": { + "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceSide.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceSide.json new file mode 100644 index 000000000..976609a77 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksGreenFenceSide.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_side", + "textures": { + "wall": "actuallyadditions:blocks/blockTestifiBucksGreenWall" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json new file mode 100644 index 000000000..d6e873ba2 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceInventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json new file mode 100644 index 000000000..7f819af28 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFencePost.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_post", + "textures": { + "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceSide.json b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceSide.json new file mode 100644 index 000000000..453cebf2e --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockTestifiBucksWhiteFenceSide.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_side", + "textures": { + "wall": "actuallyadditions:blocks/blockTestifiBucksWhiteWall" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json new file mode 100644 index 000000000..3b8270803 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/blockChiseledQuartzWall.json @@ -0,0 +1,3 @@ +{ + "parent": "actuallyadditions:block/blockChiseledQuartzWallInventory" +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json new file mode 100644 index 000000000..f8282b53d --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/blockPillarQuartzWall.json @@ -0,0 +1,3 @@ +{ + "parent": "actuallyadditions:block/blockPillarQuartzWallInventory" +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json b/src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json new file mode 100644 index 000000000..22b4b32ed --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/blockQuartzWall.json @@ -0,0 +1,3 @@ +{ + "parent": "actuallyadditions:block/blockQuartzWallInventory" +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json new file mode 100644 index 000000000..d1d956e1f --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksGreenFence.json @@ -0,0 +1,3 @@ +{ + "parent": "actuallyadditions:block/blockTestifiBucksGreenFenceInventory" +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json new file mode 100644 index 000000000..0e11467ab --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/blockTestifiBucksWhiteFence.json @@ -0,0 +1,3 @@ +{ + "parent": "actuallyadditions:block/blockTestifiBucksWhiteFenceInventory" +} \ No newline at end of file From af8356c9efafaed4c23395e29303c433c91df675 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 3 May 2016 21:31:54 +0200 Subject: [PATCH 062/322] Fixed Fluid Placer not being able to place --- .../mod/tile/TileEntityFluidCollector.java | 11 ++++++++--- .../blockstates/blockSmileyCloud.json | 8 ++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index b5223da8c..5c40f980c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -83,11 +84,15 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements } else if(this.isPlacer && PosUtil.getBlock(coordsBlock, this.worldObj).isReplaceable(this.worldObj, coordsBlock)){ if(this.tank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME){ - //TODO Fix this because apparently getting the item of the water block (for the ItemStack) returns null Block block = this.tank.getFluid().getFluid().getBlock(); if(block != null){ - WorldUtil.useItemAtSide(sideToManipulate, this.worldObj, this.pos, new ItemStack(block)); - this.tank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); + BlockPos offsetPos = this.pos.offset(sideToManipulate); + Block blockPresent = PosUtil.getBlock(offsetPos, this.worldObj); + boolean replaceable = blockPresent.isReplaceable(this.worldObj, offsetPos); + if(replaceable){ + PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); + this.tank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); + } } } } diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json b/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json index 614e008ba..1cdb3ecae 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockSmileyCloud.json @@ -8,10 +8,14 @@ "normal": [{}], "inventory": [{}], "meta": { - "0": { "y" : 0 }, + "0": { "y" : 0}, "1": { "y" : 180 }, "2": { "y" : 270 }, - "3": { "y" : 90 } + "3": { "y" : 90 }, + "4": { "y" : 0, "model": "actuallyadditions:blockSmileyCloudFluffy" }, + "5": { "y" : 180, "model": "actuallyadditions:blockSmileyCloudFluffy" }, + "6": { "y" : 270, "model": "actuallyadditions:blockSmileyCloudFluffy" }, + "7": { "y" : 90, "model": "actuallyadditions:blockSmileyCloudFluffy" } } } } \ No newline at end of file From 1aeea1ef6ddd3da7e851e6dfe949ee9acc737d28 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 3 May 2016 21:32:51 +0200 Subject: [PATCH 063/322] Unload the fake player when leaving a world so that it doesn't persist and break stuff --- .../actuallyadditions/mod/event/WorldLoadingEvents.java | 2 ++ .../de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index fe7e47fe2..00459099a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -24,6 +25,7 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onUnload(WorldEvent.Unload event){ WorldData.makeDirty(); + FakePlayerUtil.unloadFakePlayer(); } @SubscribeEvent diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java index 234f21180..89eed29d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java @@ -39,4 +39,8 @@ public class FakePlayerUtil{ return null; } } + + public static void unloadFakePlayer(){ + theFakePlayer = null; + } } From f2503ed66da37e4101cdd4537a371c82d4a02a74 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 3 May 2016 21:37:56 +0200 Subject: [PATCH 064/322] r29! --- build.gradle | 2 +- update/changelog.md | 16 ++++++++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 99b55689a..b440cc285 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.9-r28" +version = "1.9-r29" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 46bb3d443..1f0a3012f 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,19 @@ +# 1.9-r29 +* Fixed blocks dropping twice when broken with the drill +* Made drill GUI be openable again (how did I even miss this?) +* Made XP drops from drill dependent on the forge event +* Fixed and re-implemented sounds +* Raised the amount of particles from the laser relay +* Made the knife not give extra attack damage in armor slots +* Fixed a couple of bugs with items that need to be held in hand not working +* Fixed all item models so that they're not held like shields +* Made slab placing a bit more proper +* Fixed most bounding boxes +* Fixed equipment slots in energizer and enervator being off +* Fixed fluid placer not being able to place +* Made fake player not persist into different worlds causing coordinate issues +* Fixed all block models of custom rendered stuff + # 1.9-r28 * Fixed a crash when trying to fill a bucket ##### Because it was pretty much gamebreaking. diff --git a/update/updateVersions.properties b/update/updateVersions.properties index f1e5ce5bd..d4c8e71c5 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,3 +1,3 @@ 1.7.10=21 1.8.9=26 -1.9=28 \ No newline at end of file +1.9=29 \ No newline at end of file From f50c9f32c1f4408108e07590dff91e0d50a0c5cf Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 3 May 2016 22:12:16 +0200 Subject: [PATCH 065/322] fixed mcmod.info being broken --- 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 c54d0a9cf..8d8a54262 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -1,6 +1,6 @@ [ { - "modid": "ActuallyAdditions", + "modid": "actuallyadditions", "name": "Actually Additions", "description": "Do you want Automation? Wireless Transport? Better Machines? A cup o' Coffee? Chests? Better Hoppers? Leaf Blowers? Faster Growth? Plants? Well, Actually Additions has all that and a lot more!", "version": "${version}", From 2352e3be31873090dfed7894cbf5209eec860a55 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 12:19:02 +0200 Subject: [PATCH 066/322] Fixed oredict creating empty entries when searching for names --- .../ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java | 4 ++-- .../ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java | 6 +++--- .../actuallyadditions/api/recipe/LensNoneRecipe.java | 4 ++-- .../actuallyadditions/mod/crafting/ItemCrafting.java | 2 +- .../actuallyadditions/mod/gen/JamVillagerTradeHandler.java | 2 +- .../actuallyadditions/mod/recipe/CrusherRecipeRegistry.java | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 54d956681..0e27aa6fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -71,7 +71,7 @@ public class ActuallyAdditionsAPI{ * @param outputTwoChance The chance of the second output (0 won't occur at all, 100 will all the time) */ public static void addCrusherRecipe(String input, String outputOne, int outputOneAmount, String outputTwo, int outputTwoAmount, int outputTwoChance){ - if(!OreDictionary.getOres(input).isEmpty() && !OreDictionary.getOres(outputOne).isEmpty() && (outputTwo == null || outputTwo.isEmpty() || !OreDictionary.getOres(outputTwo).isEmpty())){ + if(!OreDictionary.getOres(input, false).isEmpty() && !OreDictionary.getOres(outputOne, false).isEmpty() && (outputTwo == null || outputTwo.isEmpty() || !OreDictionary.getOres(outputTwo, false).isEmpty())){ crusherRecipes.add(new CrusherRecipe(input, outputOne, outputOneAmount, outputTwo, outputTwoAmount, outputTwoChance)); } } @@ -109,7 +109,7 @@ public class ActuallyAdditionsAPI{ * @param outputOneAmount The amount of the first output */ public static void addCrusherRecipe(ItemStack input, String outputOne, int outputOneAmount){ - if(!OreDictionary.getOres(outputOne).isEmpty()){ + if(!OreDictionary.getOres(outputOne, false).isEmpty()){ crusherRecipes.add(new CrusherRecipe(input, outputOne, outputOneAmount)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java index 31c326130..7a6c04d8b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java @@ -60,7 +60,7 @@ public class CrusherRecipe{ return null; } - List stacks = OreDictionary.getOres(this.outputOne); + List stacks = OreDictionary.getOres(this.outputOne, false); if(stacks != null && !stacks.isEmpty()){ List stacksCopy = new ArrayList(); for(ItemStack stack : stacks){ @@ -84,7 +84,7 @@ public class CrusherRecipe{ return null; } - List stacks = OreDictionary.getOres(this.outputTwo); + List stacks = OreDictionary.getOres(this.outputTwo, false); if(stacks != null && !stacks.isEmpty()){ List stacksCopy = new ArrayList(); for(ItemStack stack : stacks){ @@ -108,7 +108,7 @@ public class CrusherRecipe{ return null; } - List stacks = OreDictionary.getOres(this.input); + List stacks = OreDictionary.getOres(this.input, false); if(stacks != null && !stacks.isEmpty()){ List stacksCopy = new ArrayList(); for(ItemStack stack : stacks){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensNoneRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensNoneRecipe.java index 12d7b8aa1..45bb5e923 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensNoneRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensNoneRecipe.java @@ -46,7 +46,7 @@ public class LensNoneRecipe{ return null; } - List stacks = OreDictionary.getOres(this.output); + List stacks = OreDictionary.getOres(this.output, false); if(stacks != null && !stacks.isEmpty()){ List stacksCopy = new ArrayList(); for(ItemStack stack : stacks){ @@ -70,7 +70,7 @@ public class LensNoneRecipe{ return null; } - List stacks = OreDictionary.getOres(this.input); + List stacks = OreDictionary.getOres(this.input, false); if(stacks != null && !stacks.isEmpty()){ List stacksCopy = new ArrayList(); for(ItemStack stack : stacks){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 41de7dbc4..56734059b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -392,7 +392,7 @@ public class ItemCrafting{ } //Resonant Rice - if(ConfigCrafting.RESONANT_RICE.isEnabled() && !OreDictionary.getOres("nuggetEnderium").isEmpty()){ + if(ConfigCrafting.RESONANT_RICE.isEnabled() && !OreDictionary.getOres("nuggetEnderium", false).isEmpty()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemResonantRice), new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), "nuggetEnderium", Items.GUNPOWDER)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index cd748a82c..a576cd9e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -41,7 +41,7 @@ public class JamVillagerTradeHandler{ } public void addWants(String oredictName, int minSize, int maxSize){ - ArrayList stacks = (ArrayList)OreDictionary.getOres(oredictName); + ArrayList stacks = (ArrayList)OreDictionary.getOres(oredictName, false); this.trades.add(new Trade(stacks, minSize, maxSize)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index 77497cb10..1c26d7e77 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -38,7 +38,7 @@ public class CrusherRecipeRegistry{ String output = theCase.resultPreString+ore.substring(theCase.theCase.length()); if(!hasOreRecipe(ore)){ - if(!OreDictionary.getOres(output).isEmpty() && !OreDictionary.getOres(ore).isEmpty()){ + if(!OreDictionary.getOres(output, false).isEmpty() && !OreDictionary.getOres(ore, false).isEmpty()){ ActuallyAdditionsAPI.addCrusherRecipe(ore, output, theCase.resultAmount); } else{ From ea8d8a5f886eb823a98131e771bb5ac5e2c20ada Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 12:41:28 +0200 Subject: [PATCH 067/322] Update forge --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b440cc285..1130097ca 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.9-12.16.0.1865-1.9" + version = "1.9-12.16.1.1887" runDir = "idea" mappings = "snapshot_20160420" From 4b0ef298da97509369bd1795d53b4c22bcfa07d2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 12:59:36 +0200 Subject: [PATCH 068/322] Fixed laser relays making no particles when the less particles setting is on --- .../actuallyadditions/mod/tile/TileEntityLaserRelay.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index b00503c36..3a1541e35 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -82,7 +82,7 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ - PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 1 : Util.RANDOM.nextInt(6)+1, 0.6F, COLOR, 1F); + PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 2 : Util.RANDOM.nextInt(6)+1, 0.6F, COLOR, 1F); } } } From a8365724f85dff338baa8119db61f99aff3509b5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 13:15:30 +0200 Subject: [PATCH 069/322] Made harvestdropevents be posted when mining blocks automatically --- .../mod/tile/TileEntityBreaker.java | 22 +++++++------ .../tile/TileEntityDirectionalBreaker.java | 23 ++++++++------ .../mod/tile/TileEntityMiner.java | 31 ++++++++++++------- .../actuallyadditions/mod/util/WorldUtil.java | 7 +++-- 4 files changed, 50 insertions(+), 33 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 994c3c966..7d60c7266 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockAir; @@ -21,8 +22,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.event.ForgeEventFactory; -import java.util.ArrayList; +import java.util.List; public class TileEntityBreaker extends TileEntityInventoryBase implements IRedstoneToggle{ @@ -83,16 +85,18 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); IBlockState stateToBreak = this.worldObj.getBlockState(coordsBlock); if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(stateToBreak, this.worldObj, coordsBlock) > -1.0F){ - ArrayList drops = new ArrayList(); - drops.addAll(blockToBreak.getDrops(this.worldObj, coordsBlock, stateToBreak, 0)); + List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, stateToBreak, 0); + float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); - if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); + if(Util.RANDOM.nextFloat() <= chance){ + if(WorldUtil.addToInventory(this, drops, false, true)){ + if(!ConfigValues.lessBlockBreakingEffects){ + this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); + } + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + WorldUtil.addToInventory(this, drops, true, true); + this.markDirty(); } - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); - WorldUtil.addToInventory(this, drops, true, true); - this.markDirty(); } } else if(this.isPlacer){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 4569821dd..cd5231da5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -14,6 +14,7 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockAir; @@ -21,10 +22,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; +import java.util.List; public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle{ @@ -86,17 +89,19 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem if(coordsBlock != null){ Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(this.worldObj.getBlockState(coordsBlock), this.worldObj, this.pos) > -1.0F){ - ArrayList drops = new ArrayList(); - drops.addAll(blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0)); + List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0); + float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); - if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); + if(Util.RANDOM.nextFloat() <= chance){ + if(WorldUtil.addToInventory(this, drops, false, true)){ + if(!ConfigValues.lessBlockBreakingEffects){ + this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); + } + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); + WorldUtil.addToInventory(this, drops, true, true); + this.storage.extractEnergy(ENERGY_USE, false); + this.markDirty(); } - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); - WorldUtil.addToInventory(this, drops, true, true); - this.storage.extractEnergy(ENERGY_USE, false); - this.markDirty(); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 5b0a1fc86..ad8ea4dcc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; @@ -25,6 +26,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; @@ -32,6 +36,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; +import java.util.List; public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyReceiver, IButtonReactor, IEnergySaver, IEnergyDisplay{ @@ -98,20 +103,22 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR int meta = PosUtil.getMetadata(pos, this.worldObj); if(block != null && !block.isAir(this.worldObj.getBlockState(pos), this.worldObj, pos)){ if(block.getHarvestLevel(this.worldObj.getBlockState(pos)) <= 3F && block.getBlockHardness(this.worldObj.getBlockState(pos), this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ - ArrayList drops = new ArrayList(); - drops.addAll(block.getDrops(this.worldObj, pos, this.worldObj.getBlockState(pos), 0)); + List drops = block.getDrops(this.worldObj, pos, this.worldObj.getBlockState(pos), 0); + float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, pos, this.worldObj.getBlockState(pos), 0, 1, false, null); - if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); + if(Util.RANDOM.nextFloat() <= chance){ + if(WorldUtil.addToInventory(this, drops, false, true)){ + if(!ConfigValues.lessBlockBreakingEffects){ + this.worldObj.playAuxSFX(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); + } + this.worldObj.setBlockToAir(pos); + + WorldUtil.addToInventory(this, drops, true, true); + this.markDirty(); + + this.storage.extractEnergy(actualUse, false); + this.shootParticles(pos.getX(), pos.getY(), pos.getZ()); } - this.worldObj.setBlockToAir(pos); - - WorldUtil.addToInventory(this, drops, true, true); - this.markDirty(); - - this.storage.extractEnergy(actualUse, false); - this.shootParticles(pos.getX(), pos.getY(), pos.getZ()); } return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 906cba5dc..a1fb2f1df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -42,6 +42,7 @@ import net.minecraftforge.common.IPlantable; import net.minecraftforge.fluids.*; import java.util.ArrayList; +import java.util.List; public class WorldUtil{ @@ -249,11 +250,11 @@ public class WorldUtil{ return blocks; } - public static boolean addToInventory(IInventory inventory, ArrayList stacks, boolean actuallyDo, boolean shouldAlwaysWork){ + public static boolean addToInventory(IInventory inventory, List stacks, boolean actuallyDo, boolean shouldAlwaysWork){ return addToInventory(inventory, stacks, EnumFacing.UP, actuallyDo, shouldAlwaysWork); } - public static boolean addToInventory(IInventory inventory, ArrayList stacks, EnumFacing side, boolean actuallyDo, boolean shouldAlwaysWork){ + public static boolean addToInventory(IInventory inventory, List stacks, EnumFacing side, boolean actuallyDo, boolean shouldAlwaysWork){ return addToInventory(inventory, 0, inventory.getSizeInventory(), stacks, side, actuallyDo, shouldAlwaysWork); } @@ -266,7 +267,7 @@ public class WorldUtil{ * @param actuallyDo Do it or just test if it works? * @return Does it work? */ - public static boolean addToInventory(IInventory inventory, int start, int end, ArrayList stacks, EnumFacing side, boolean actuallyDo, boolean shouldAlwaysWork){ + public static boolean addToInventory(IInventory inventory, int start, int end, List stacks, EnumFacing side, boolean actuallyDo, boolean shouldAlwaysWork){ //Copy the slots if just testing to later load them again ItemStack[] backupSlots = null; if(!actuallyDo){ From 0b9101398a599107b5fd3c57dfb9e111452fbdad Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 16:36:34 +0200 Subject: [PATCH 070/322] Rename itemPotionRIng.json to itemPotionRing.json --- .../models/item/{itemPotionRIng.json => itemPotionRing.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/assets/actuallyadditions/models/item/{itemPotionRIng.json => itemPotionRing.json} (100%) diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPotionRIng.json b/src/main/resources/assets/actuallyadditions/models/item/itemPotionRing.json similarity index 100% rename from src/main/resources/assets/actuallyadditions/models/item/itemPotionRIng.json rename to src/main/resources/assets/actuallyadditions/models/item/itemPotionRing.json From 78bfbc6208a3ed1d303a7d1c4be3afdd7d1df229 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 16:36:43 +0200 Subject: [PATCH 071/322] Rename itemCrystalLightBLue.json to itemCrystalLightBlue.json --- .../item/{itemCrystalLightBLue.json => itemCrystalLightBlue.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/assets/actuallyadditions/models/item/{itemCrystalLightBLue.json => itemCrystalLightBlue.json} (100%) diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemCrystalLightBLue.json b/src/main/resources/assets/actuallyadditions/models/item/itemCrystalLightBlue.json similarity index 100% rename from src/main/resources/assets/actuallyadditions/models/item/itemCrystalLightBLue.json rename to src/main/resources/assets/actuallyadditions/models/item/itemCrystalLightBlue.json From ca91ef4d24057ef7792a59707788e4a3c7b5ac73 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 17:47:54 +0200 Subject: [PATCH 072/322] Added the ender star which is a new crafting ingredient --- .../mod/booklet/InitBooklet.java | 2 ++ .../mod/config/values/ConfigCrafting.java | 3 ++- .../mod/crafting/ItemCrafting.java | 5 +++-- .../mod/crafting/MiscCrafting.java | 9 +++++++++ .../mod/items/metalists/TheMiscItems.java | 3 ++- .../assets/actuallyadditions/lang/en_US.lang | 6 +++++- .../models/item/itemMiscEnderStar.json | 6 ++++++ .../textures/items/itemMiscEnderStar.png | Bin 0 -> 342 bytes 8 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMiscEnderStar.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscEnderStar.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 5cdd81c78..eebe6afe4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; @@ -77,6 +78,7 @@ public class InitBooklet{ lampPages.add(new PageCrafting(lampPages.size()+1, recipe).setNoText()); } new BookletChapter("lamps", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockColoredLampOn, 1, TheColoredLampColors.GREEN.ordinal()), lampPages.toArray(new BookletPage[lampPages.size()])); + new BookletChapter("enderStar", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal()), new PageCrafting(1, ItemCrafting.recipeEnderStar)); new BookletChapter("treasureChest", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTreasureChest), new PagePicture(1, "pageTreasureChest", 150).setStack(new ItemStack(InitBlocks.blockTreasureChest)), new PageTextOnly(2)).setSpecial(); new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStack(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index 8c6e3cf21..ba9e0f094 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -153,7 +153,8 @@ public enum ConfigCrafting{ DRILL_CORE("Drill Core", ConfigCategories.ITEMS_CRAFTING), ATOMIC_RECONSTRUCTOR("Atomic Reconstructor", ConfigCategories.BLOCKS_CRAFTING), MINER("Miner", ConfigCategories.BLOCKS_CRAFTING), - FIREWORK_BOX("Firework Box", ConfigCategories.BLOCKS_CRAFTING); + FIREWORK_BOX("Firework Box", ConfigCategories.BLOCKS_CRAFTING), + ENDER_STAR("Ender Star", ConfigCategories.ITEMS_CRAFTING); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 56734059b..d4837ab80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -80,6 +80,7 @@ public class ItemCrafting{ public static IRecipe recipeBlackDye; public static IRecipe recipeLens; public static IRecipe recipeCrateKeeper; + public static IRecipe recipeEnderStar; public static void init(){ @@ -362,7 +363,7 @@ public class ItemCrafting{ "WNW", "WDW", "WNW", 'W', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal()), 'N', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), - 'D', new ItemStack(Items.NETHER_STAR))); + 'D', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal()))); recipeWings = RecipeUtil.lastIRecipe(); } @@ -528,7 +529,7 @@ public class ItemCrafting{ public static void addRingRecipeWithStack(ItemStack mainStack, int meta){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), new ItemStack(Items.NETHER_WART), new ItemStack(Items.POTIONITEM), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal())); recipesPotionRings.add(RecipeUtil.lastIRecipe()); - GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(Items.NETHER_STAR), new ItemStack(Items.NETHER_STAR)); + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal())); recipesPotionRings.add(RecipeUtil.lastIRecipe()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index c3c351e14..fb86597fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -78,6 +78,15 @@ public class MiscCrafting{ 'F', new ItemStack(Items.FLINT))); ItemCrafting.recipeKnifeBlade = RecipeUtil.lastIRecipe(); } + + //Ender Star + if(ConfigCrafting.ENDER_STAR.isEnabled()){ + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal()), + new ItemStack(Items.NETHER_STAR), + new ItemStack(Items.DRAGON_BREATH), + new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); + ItemCrafting.recipeEnderStar = RecipeUtil.lastIRecipe(); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java index 609effc57..4f7e5317d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java @@ -32,7 +32,8 @@ public enum TheMiscItems{ BAT_WING("BatWing", EnumRarity.RARE), DRILL_CORE("DrillCore", EnumRarity.UNCOMMON), BLACK_DYE("BlackDye", EnumRarity.EPIC), - LENS("Lens", EnumRarity.UNCOMMON); + LENS("Lens", EnumRarity.UNCOMMON), + ENDER_STAR("EnderStar", EnumRarity.EPIC); public final String name; public final EnumRarity rarity; diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index d8eb4d172..125725104 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -407,6 +407,7 @@ item.actuallyadditions.itemPaxelCrystalBlack.name=Void Crystal AIOT item.actuallyadditions.itemPaxelCrystalWhite.name=Enori Crystal AIOT item.actuallyadditions.itemPaxelCrystalGreen.name=Emeradic Crystal AIOT item.actuallyadditions.itemFoodBacon.name=Bacon +item.actuallyadditions.itemMiscEnderStar.name=Ender Star #Tooltips tooltip.actuallyadditions.onSuffix.desc=On @@ -767,4 +768,7 @@ booklet.actuallyadditions.chapter.fireworkBox.text.1=The Firework Box i booklet.actuallyadditions.chapter.fireworkBox.text.2=When right-clicking it with a Redstone Torch in hand, it will change between a mode where it gets deactivated by Redstone and a mode where it responds to pulses. booklet.actuallyadditions.chapter.rf.name=RF (Redstone Flux) -booklet.actuallyadditions.chapter.rf.text.1=For anyone who hasn't used much of a mod that uses RF yet, here's a quick explanation. Redstone Flux, or RF for short, is a power system used by many mods. The basic concept is is that lots of machines generate or use it every game tick. That's what RF/t means. To connect a power generating (thus, outputting) machine to one that needs (thus, receives) power, just place it next to it. What's a fourth wall? \ No newline at end of file +booklet.actuallyadditions.chapter.rf.text.1=For anyone who hasn't used much of a mod that uses RF yet, here's a quick explanation. Redstone Flux, or RF for short, is a power system used by many mods. The basic concept is is that lots of machines generate or use it every game tick. That's what RF/t means. To connect a power generating (thus, outputting) machine to one that needs (thus, receives) power, just place it next to it. What's a fourth wall? + +booklet.actuallyadditions.chapter.enderStar.name=Ender Star +booklet.actuallyadditions.chapter.enderStar.text.1=The Ender Star can be obtained by both killing a wither and going to the end to collect Dragon's Breath. The latter is obtained by using a bottle on the purple particles that the dragon spits out. The Ender Star is used for multiple crafting recipes. \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMiscEnderStar.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscEnderStar.json new file mode 100644 index 000000000..5f7b02daa --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscEnderStar.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemMiscEnderStar" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscEnderStar.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscEnderStar.png new file mode 100644 index 0000000000000000000000000000000000000000..7da40518b0b442c28796f25ae5713cb10953da7a GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ#Ar}708}bEPk~cBjluBfn&zLohtH4K$AydbL@8|mk+JEJ>Tx=LJ z_0IYIi;tY~*Z$z;4io2ubL-Zx{k8wFx@;apV4UMMo+8E*3U7N7)>tF3jbfsw8)S=it(r33g4DtkW-R go;oO?bAo}PPhj!l{p)$_fL>zoboFyt=akR{0KTMd=Kufz literal 0 HcmV?d00001 From 5b9f668d14bca023c7e52b43260d27a4a5773540 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 4 May 2016 22:40:58 +0200 Subject: [PATCH 073/322] Made double furnace and double crusher use the double amount of energy if both items are smelting --- .../mod/booklet/InitBooklet.java | 2 +- .../mod/tile/TileEntityFurnaceDouble.java | 6 ++---- .../mod/tile/TileEntityGrinder.java | 15 +++++---------- .../assets/actuallyadditions/lang/en_US.lang | 2 +- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index eebe6afe4..2b15c2743 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -103,7 +103,7 @@ public class InitBooklet{ new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE).addTextReplacement("", ConfigIntValues.LASER_RELAY_LOSS.getValue()), new PagePicture(2, "pageLaserRelay", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeLaserWrench).setNoText()).setImportant(); new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial(); new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); - new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", TileEntityGrinder.getEnergyUse(false)).addTextReplacement("", TileEntityGrinder.getEnergyUse(true)), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); + new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); new BookletChapter("furnaceDouble", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFurnaceDouble), new PageCrafting(1, BlockCrafting.recipeFurnace).addTextReplacement("", TileEntityFurnaceDouble.ENERGY_USE).setPageStacksWildcard()); new BookletChapter("lavaFactory", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLavaFactoryController), new PageTextOnly(1).addTextReplacement("", TileEntityLavaFactoryController.ENERGY_USE), new PagePicture(2, "pageLavaFactory", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLavaFactory).setNoText(), new PageCrafting(4, BlockCrafting.recipeCasing).setNoText()); new BookletChapter("energizer", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockEnergizer), new PageCrafting(1, BlockCrafting.recipeEnergizer), new PageCrafting(2, BlockCrafting.recipeEnervator)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index ac2bd5b2e..95bae6e95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -72,6 +72,7 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements this.finishBurning(SLOT_INPUT_1, SLOT_OUTPUT_1); this.firstSmeltTime = 0; } + this.storage.extractEnergy(ENERGY_USE, false); } } else{ @@ -85,16 +86,13 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements this.finishBurning(SLOT_INPUT_2, SLOT_OUTPUT_2); this.secondSmeltTime = 0; } + this.storage.extractEnergy(ENERGY_USE, false); } } else{ this.secondSmeltTime = 0; } - if(this.storage.getEnergyStored() >= ENERGY_USE && (this.firstSmeltTime > 0 || this.secondSmeltTime > 0)){ - this.storage.extractEnergy(ENERGY_USE, false); - } - if(flag != (this.firstSmeltTime > 0 || this.secondSmeltTime > 0)){ this.markDirty(); int meta = PosUtil.getMetadata(this.pos, this.worldObj); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 91b268ff5..4746197c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -35,6 +35,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg public static final int SLOT_INPUT_2 = 3; public static final int SLOT_OUTPUT_2_1 = 4; public static final int SLOT_OUTPUT_2_2 = 5; + public static final int ENERGY_USE = 40; public EnergyStorage storage = new EnergyStorage(60000); public int firstCrushTime; public int secondCrushTime; @@ -52,10 +53,6 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg this.isDouble = false; } - public static int getEnergyUse(boolean isDouble){ - return isDouble ? 60 : 40; - } - @Override public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ return this.storage.receiveEnergy(maxReceive, simulate); @@ -108,7 +105,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg boolean shouldPlaySound = false; if(canCrushOnFirst){ - if(this.storage.getEnergyStored() >= getEnergyUse(this.isDouble)){ + if(this.storage.getEnergyStored() >= ENERGY_USE){ if(this.firstCrushTime%30 == 0){ shouldPlaySound = true; } @@ -117,6 +114,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg this.finishCrushing(SLOT_INPUT_1, SLOT_OUTPUT_1_1, SLOT_OUTPUT_1_2); this.firstCrushTime = 0; } + this.storage.extractEnergy(ENERGY_USE, false); } } else{ @@ -125,7 +123,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg if(this.isDouble){ if(canCrushOnSecond){ - if(this.storage.getEnergyStored() >= getEnergyUse(this.isDouble)){ + if(this.storage.getEnergyStored() >= ENERGY_USE){ if(this.secondCrushTime%30 == 0){ shouldPlaySound = true; } @@ -134,6 +132,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg this.finishCrushing(SLOT_INPUT_2, SLOT_OUTPUT_2_1, SLOT_OUTPUT_2_2); this.secondCrushTime = 0; } + this.storage.extractEnergy(ENERGY_USE, false); } } else{ @@ -141,10 +140,6 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } } - if(this.storage.getEnergyStored() >= getEnergyUse(this.isDouble) && (this.firstCrushTime > 0 || this.secondCrushTime > 0)){ - this.storage.extractEnergy(getEnergyUse(this.isDouble), false); - } - if(flag != (this.firstCrushTime > 0 || this.secondCrushTime > 0)){ this.markDirty(); int meta = PosUtil.getMetadata(this.pos, this.worldObj); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 125725104..401fd2ebc 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -647,7 +647,7 @@ booklet.actuallyadditions.chapter.coffeeMachine.text.6=Milk is an impor booklet.actuallyadditions.chapter.coffeeMachine.text.7=The fact that you're reading this means that you either have HarvestCraft installed, or that you're looking at the lang file. This does the same thing as Milk, but for veggie guys. booklet.actuallyadditions.chapter.crusher.name=Crusher and Double Crusher -booklet.actuallyadditions.chapter.crusher.text.1=The Crusher turns every ore, ingot and gem into its corresponding dust using RF/t. When you put in Ores however, they will yield 2 pieces of dust. The Double Crusher basically does the same, however it can crush two ores at a time and uses RF/t. On the following pages, you can see some additional useful recipes for inside the crusher. He's my crush +booklet.actuallyadditions.chapter.crusher.text.1=The Crusher turns every ore, ingot and gem into its corresponding dust using RF/t. When you put in Ores however, they will yield 2 pieces of dust. The Double Crusher basically does the same, however it can crush two ores at a time. On the following pages, you can see some additional useful recipes for inside the crusher. He's my crush booklet.actuallyadditions.chapter.furnaceDouble.name=Double Furnace booklet.actuallyadditions.chapter.furnaceDouble.text.1=The Double Furnace works like a furnace, however, it uses RF/t and can smelt two items at a time. From 74c16757f837ffa85eeeea74aa8117812ebfdd84 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 00:06:02 +0200 Subject: [PATCH 074/322] Some fixes --- .../mod/blocks/BlockAtomicReconstructor.java | 10 ++- .../mod/items/lens/LensColor.java | 4 +- .../mod/items/lens/LensDisruption.java | 71 +++++++++++++++++++ .../mod/items/lens/Lenses.java | 1 + .../tile/TileEntityAtomicReconstructor.java | 5 +- 5 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index e7eaaf5cb..b90d3110b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -25,7 +25,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; @@ -68,12 +70,18 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud TileEntityAtomicReconstructor reconstructor = (TileEntityAtomicReconstructor)world.getTileEntity(pos); if(reconstructor != null){ if(heldItem != null){ - if(heldItem.getItem() instanceof ILensItem && reconstructor.getStackInSlot(0) == null){ + Item item = heldItem.getItem(); + if(item instanceof ILensItem && reconstructor.getStackInSlot(0) == null){ ItemStack toPut = heldItem.copy(); toPut.stackSize = 1; reconstructor.setInventorySlotContents(0, toPut); player.inventory.decrStackSize(player.inventory.currentItem, 1); } + //Shush, don't tell anyone! + else if(item == Items.RECORD_11){ + reconstructor.counter++; + reconstructor.markDirty(); + } } else{ if(reconstructor.getStackInSlot(0) != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 8e81d4ed2..3d23f2748 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -41,7 +41,7 @@ public class LensColor extends Lens{ InitBlocks.blockColoredLampOn }; //Thanks to xdjackiexd for this, as I couldn't be bothered - private static final float[][] possibleColorLensColors = { + private static final float[][] POSSIBLE_COLORS = { {158F, 43F, 39F}, //Red {234F, 126F, 53F}, //Orange {194F, 181F, 28F}, //Yellow @@ -99,7 +99,7 @@ public class LensColor extends Lens{ @Override public float[] getColor(){ - float[] colors = possibleColorLensColors[Util.RANDOM.nextInt(possibleColorLensColors.length)]; + float[] colors = POSSIBLE_COLORS[Util.RANDOM.nextInt(POSSIBLE_COLORS.length)]; return new float[]{colors[0]/255F, colors[1]/255F, colors[2]/255F}; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java new file mode 100644 index 000000000..62da1ae6d --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java @@ -0,0 +1,71 @@ +package de.ellpeck.actuallyadditions.mod.items.lens; + +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import de.ellpeck.actuallyadditions.api.lens.Lens; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; + +import java.util.ArrayList; + +public class LensDisruption extends Lens{ + + @Override + public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ + int energyUse = 150000; + if(tile.getEnergy() >= energyUse && hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock)){ + int range = 2; + ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); + for(EntityItem item : items){ + ItemStack stack = item.getEntityItem(); + if(!item.isDead && stack != null){ + if(!stack.hasTagCompound() || !stack.getTagCompound().getBoolean(ModUtil.MOD_ID+"DisruptedAlready")){ + ItemStack newStack = null; + + while(newStack == null || newStack.getItem() == null){ + if(Util.RANDOM.nextBoolean()){ + newStack = new ItemStack(Item.REGISTRY.getRandomObject(Util.RANDOM)); + } + else{ + newStack = new ItemStack(Block.REGISTRY.getRandomObject(Util.RANDOM)); + } + } + newStack.stackSize = stack.stackSize; + + if(!newStack.hasTagCompound()){ + newStack.setTagCompound(new NBTTagCompound()); + } + newStack.getTagCompound().setBoolean(ModUtil.MOD_ID+"DisruptedAlready", true); + + item.setDead(); + + EntityItem newItem = new EntityItem(tile.getWorldObject(), item.posX, item.posY, item.posZ, newStack); + tile.getWorldObject().spawnEntityInWorld(newItem); + + tile.extractEnergy(energyUse); + } + } + } + return true; + } + return false; + } + + @Override + public float[] getColor(){ + return new float[]{246F/255F, 255F/255F, 183F/255F}; + } + + @Override + public int getDistance(){ + return 3; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java index f09d0c45d..fd2a8169f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java @@ -18,4 +18,5 @@ public class Lenses{ public static final Lens LENS_DETONATION = new LensDetonation(); public static final Lens LENS_DEATH = new LensDeath(); public static final Lens LENS_COLOR = new LensColor(); + public static final Lens LENS_DISRUPTION = new LensDisruption(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index c214ee763..6af2afbec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -39,6 +39,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private int currentTime; private boolean activateOnceWithSignal; private int oldEnergy; + public int counter; public TileEntityAtomicReconstructor(){ super(1, "reconstructor"); @@ -48,6 +49,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); compound.setInteger("CurrentTime", this.currentTime); + compound.setInteger("Counter", this.counter); this.storage.writeToNBT(compound); } @@ -60,6 +62,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple public void readSyncableNBT(NBTTagCompound compound, boolean sync){ super.readSyncableNBT(compound, sync); this.currentTime = compound.getInteger("CurrentTime"); + this.counter = compound.getInteger("Counter"); this.storage.readFromNBT(compound); } @@ -116,7 +119,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return ((ILensItem)this.slots[0].getItem()).getLens(); } } - return Lenses.LENS_NONE; + return this.counter >= 500 ? Lenses.LENS_DISRUPTION : Lenses.LENS_NONE; } private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ From 5f3e8fc748b4e7834a2fde56b466dbf7489d6e50 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 10:01:15 +0200 Subject: [PATCH 075/322] Added a default extra whitelist config option for the Item Repairer Closes #85 --- .../mod/config/ConfigValues.java | 7 ++++-- .../mod/items/ItemDrill.java | 2 +- .../mod/tile/TileEntityItemRepairer.java | 22 ++++++++++++++++++- .../actuallyadditions/mod/util/ModUtil.java | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index 36608a319..7f56d2ac0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -25,7 +25,7 @@ public class ConfigValues{ public static String[] mashedFoodCraftingExceptions; public static String[] paxelExtraMiningWhitelist; - public static String[] drillExtraminingWhitelist; + public static String[] drillExtraMiningWhitelist; public static int[] oreGenDimensionBlacklist; public static int[] plantDimensionBlacklist; @@ -33,6 +33,8 @@ public class ConfigValues{ public static String[] minerExtraWhitelist; public static String[] minerBlacklist; + public static String[] repairerExtraWhitelist; + public static boolean lessSound; public static boolean lessParticles; public static boolean lessBlockBreakingEffects; @@ -52,11 +54,12 @@ public class ConfigValues{ crusherRecipeExceptions = config.get(ConfigCategories.OTHER.name, "Crusher Recipe Exceptions", new String[]{"ingotBrick", "ingotBrickNether"}, "The Ingots, Dusts and Ores blacklisted from being auto-registered to be crushed by the Crusher. This list uses OreDictionary Names of the Inputs only.").getStringList(); mashedFoodCraftingExceptions = config.get(ConfigCategories.ITEMS_CRAFTING.name, "Mashed Food Crafting Exceptions", new String[]{"ActuallyAdditions:itemCoffee"}, "The ItemFood, IGrowable and IPlantable Items that can not be used to craft Mashed Food. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); paxelExtraMiningWhitelist = config.get(ConfigCategories.TOOL_VALUES.name, "AIOT Extra Whitelist", new String[]{"TConstruct:GravelOre"}, "By default, the AIOT can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); - drillExtraminingWhitelist = config.get(ConfigCategories.TOOL_VALUES.name, "Drill Extra Whitelist", new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); + drillExtraMiningWhitelist = config.get(ConfigCategories.TOOL_VALUES.name, "Drill Extra Whitelist", new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); oreGenDimensionBlacklist = config.get(ConfigCategories.WORLD_GEN.name, "OreGen Dimension Blacklist", new int[0], "The IDs of the dimensions that Actually Additions OreGen (Black Quartz for example) is banned in").getIntList(); plantDimensionBlacklist = config.get(ConfigCategories.WORLD_GEN.name, "Plant Blacklist", new int[0], "The IDs of the dimensions that Actually Additions Plants (Rice for example) are banned in").getIntList(); minerExtraWhitelist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Extra Whitelist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode.").getStringList(); minerBlacklist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Blacklist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes.").getStringList(); + repairerExtraWhitelist = config.get(ConfigCategories.MACHINE_VALUES.name, "Item Repairer Extra Whitelist", new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable.").getStringList(); lessSound = config.get(ConfigCategories.PERFORMANCE.name, "Less Sound", false, "If blocks in Actually Additions should have less sounds").getBoolean(); lessParticles = config.get(ConfigCategories.PERFORMANCE.name, "Less Particles", false, "If blocks in Actually Additions should have less particles").getBoolean(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 625788ed8..91149e37e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -520,7 +520,7 @@ public class ItemDrill extends ItemEnergy{ private boolean hasExtraWhitelist(Block block){ String name = block.getRegistryName().toString(); if(name != null){ - for(String list : ConfigValues.drillExtraminingWhitelist){ + for(String list : ConfigValues.drillExtraMiningWhitelist){ if(list.equals(name)){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index 580fc3f04..554233eb2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -12,6 +12,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -32,7 +34,25 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I } public static boolean canBeRepaired(ItemStack stack){ - return stack != null && stack.getItem().isRepairable(); + if(stack != null){ + Item item = stack.getItem(); + if(item != null){ + if(item.isRepairable()){ + return true; + } + else{ + String reg = item.getRegistryName().toString(); + if(reg != null){ + for(String strg : ConfigValues.repairerExtraWhitelist){ + if(reg.equals(strg)){ + return true; + } + } + } + } + } + } + return false; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java index 05960ae61..fc92f3d5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java @@ -21,5 +21,5 @@ public class ModUtil{ public static final String MOD_ID = ActuallyAdditionsAPI.MOD_ID; public static final String NAME = "Actually Additions"; - public static final Logger LOGGER = LogManager.getLogger(MOD_ID); + public static final Logger LOGGER = LogManager.getLogger(NAME); } From b3729703b71d1f337c3769283fb243d13b0c104f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 13:22:58 +0200 Subject: [PATCH 076/322] Made directional breaker need energy in pulse mode. Duh. --- .../tile/TileEntityDirectionalBreaker.java | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index cd5231da5..e4788635a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -26,7 +26,6 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import java.util.ArrayList; import java.util.List; public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle{ @@ -62,17 +61,15 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem super.updateEntity(); if(!this.worldObj.isRemote){ if(!this.isRedstonePowered && !this.activateOnceWithSignal){ - if(this.storage.getEnergyStored() >= ENERGY_USE*RANGE){ - if(this.currentTime > 0){ - this.currentTime--; - if(this.currentTime <= 0){ - this.doWork(); - } - } - else{ - this.currentTime = 15; + if(this.currentTime > 0){ + this.currentTime--; + if(this.currentTime <= 0){ + this.doWork(); } } + else{ + this.currentTime = 15; + } } if(this.storage.getEnergyStored() != this.lastEnergy && this.sendUpdateWithInterval()){ @@ -82,25 +79,27 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } private void doWork(){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); + if(this.storage.getEnergyStored() >= ENERGY_USE*RANGE){ + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); - for(int i = 0; i < RANGE; i++){ - BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); - if(coordsBlock != null){ - Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); - if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(this.worldObj.getBlockState(coordsBlock), this.worldObj, this.pos) > -1.0F){ - List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0); - float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); + for(int i = 0; i < RANGE; i++){ + BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); + if(coordsBlock != null){ + Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(this.worldObj.getBlockState(coordsBlock), this.worldObj, this.pos) > -1.0F){ + List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0); + float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); - if(Util.RANDOM.nextFloat() <= chance){ - if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); + if(Util.RANDOM.nextFloat() <= chance){ + if(WorldUtil.addToInventory(this, drops, false, true)){ + if(!ConfigValues.lessBlockBreakingEffects){ + this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); + } + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); + WorldUtil.addToInventory(this, drops, true, true); + this.storage.extractEnergy(ENERGY_USE, false); + this.markDirty(); } - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); - WorldUtil.addToInventory(this, drops, true, true); - this.storage.extractEnergy(ENERGY_USE, false); - this.markDirty(); } } } From 11bc13aefd9028a4a57d5b6ef8dfb43c4eb4cefb Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 13:43:57 +0200 Subject: [PATCH 077/322] Added InvWrapper Capabilities to inventories --- .../mod/tile/TileEntityInventoryBase.java | 26 +++++++++++++++++++ .../mod/tile/TileEntityPhantomItemface.java | 8 +++++- .../mod/tile/TileEntityPhantomface.java | 5 ++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 345b88464..b464c1f81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -20,15 +20,23 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.wrapper.SidedInvWrapper; public abstract class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ public ItemStack slots[]; public String name; + private SidedInvWrapper[] invWrappers = new SidedInvWrapper[6]; public TileEntityInventoryBase(int slots, String name){ this.initializeSlots(slots); this.name = "container."+ModUtil.MOD_ID+"."+name; + + for(int i = 0; i < this.invWrappers.length; i++){ + this.invWrappers[i] = new SidedInvWrapper(this, EnumFacing.values()[i]); + } } public void initializeSlots(int itemAmount){ @@ -203,4 +211,22 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return new TextComponentString(StringUtil.localize(this.getName())); } + @Override + public boolean hasCapability(Capability capability, EnumFacing facing){ + return this.getCapability(capability, facing) != null; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing){ + if(this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ + return (T)this.invWrappers[facing.ordinal()]; + } + else{ + return super.getCapability(capability, facing); + } + } + + public boolean hasInvWrapperCapabilities(){ + return true; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index e7e0dba00..44b407a54 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -16,6 +16,7 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; public class TileEntityPhantomItemface extends TileEntityPhantomface{ @@ -110,7 +111,7 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ @Override public boolean isBoundThingInRange(){ - return super.isBoundThingInRange() && this.worldObj.getTileEntity(this.boundPosition) instanceof IInventory; + return super.isBoundThingInRange() && this.getInventory() != null; } @Override @@ -122,4 +123,9 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return this.isBoundThingInRange() && (this.getSided() == null || this.getSided().canExtractItem(slot, stack, side)); } + + @Override + public T getCapability(Capability capability, EnumFacing facing){ + return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).getCapability(capability, facing) : super.getCapability(capability, facing); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 27ee9acea..1e45ae82a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -179,4 +179,9 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return false; } + + @Override + public boolean hasInvWrapperCapabilities(){ + return false; + } } From f935ea140b52ee9d8c6a4c5eca8dd971246c94b0 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 14:02:44 +0200 Subject: [PATCH 078/322] r30! --- build.gradle | 2 +- update/changelog.md | 13 +++++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 1130097ca..cd541ccb9 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.9-r29" +version = "1.9-r30" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 1f0a3012f..bead185c0 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,16 @@ +# 1.9-r30 +* Fixed mcmod.info being broken +* Fixed OreDictionary creating empty entries when searching for names +* Fixed laser relays making no particles when the less particle setting is on +* Made HarvestDropsEvents be posted when mining blocks automatically +* Rename itemPotionRIng to itemPotionRing so that it has a proper model and texture +* Rename itemCrystalLightBLue to itemCrystalLightBlue so that it has a proper model and texture +* Added the ender start which is a new crafting ingredient +* Made double furnace and double crusher use the double amount of energy when smelting/crushing two items at once +* Added a default extra whitelist config option for the Item Repairer +* Made directional breaker need energy in pulse mode. Duh. +* Added InvWrapper Capabilities so that inventories work with pipes from mods like NeoTech + # 1.9-r29 * Fixed blocks dropping twice when broken with the drill * Made drill GUI be openable again (how did I even miss this?) diff --git a/update/updateVersions.properties b/update/updateVersions.properties index d4c8e71c5..5368b4d47 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,3 +1,3 @@ 1.7.10=21 1.8.9=26 -1.9=29 \ No newline at end of file +1.9=30 \ No newline at end of file From b6ff96b73b36efd00df83721a6e10e2e8d0c54f4 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 14:27:59 +0200 Subject: [PATCH 079/322] Removed some falsified information --- update/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update/changelog.md b/update/changelog.md index bead185c0..cd72dfb45 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -39,7 +39,7 @@ * All of the items, when holding them in your hands, also look like shields right now. I couldn't be bothered to change the JSONs yet, so you'll have to live with it. # 1.8.9-r26 -### This update was done by canitzp. As I started to work on another mod and I'm not really interested in Actually Additions anymore, this will now be a common feature. If something breaks with an update, call him. Not me. Thanks. +### This update was done by canitzp. Thanks for helping me out <3 * Made the knife not repairable * Changed download link for updates to redirect to the proper page * added click area to JEI for easy recipe access From 9a8d38f5da0558004de421bc12f77f3dd84e7681 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 16:58:05 +0200 Subject: [PATCH 080/322] I don't know why this was even here --- .../actuallyadditions/mod/blocks/BlockPhantom.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index 03cbb574e..67a3035d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -41,7 +41,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ public Type type; - public int range; public BlockPhantom(Type type, String name){ super(Material.ROCK, name); @@ -50,13 +49,6 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ this.setHardness(4.5F); this.setResistance(10.0F); this.setSoundType(SoundType.STONE); - - if(type == Type.FACE || type == Type.LIQUIFACE || type == Type.ENERGYFACE){ - this.range = TileEntityPhantomface.RANGE; - } - else if(type == Type.BREAKER || type == Type.PLACER){ - this.range = TileEntityPhantomPlacer.RANGE; - } } @Override From b6a02d81894a1ea56085f9b4f635cba6e5d6c125 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 17:29:39 +0200 Subject: [PATCH 081/322] Added Phantom Redstoneface --- .../mod/blocks/BlockPhantom.java | 35 ++++++++++++- .../mod/blocks/InitBlocks.java | 2 + .../mod/creative/CreativeTab.java | 1 + .../mod/tile/TileEntityBase.java | 1 + .../tile/TileEntityPhantomRedstoneface.java | 49 ++++++++++++++++++ .../mod/tile/TileEntityPhantomface.java | 3 +- .../blockstates/blockPhantomRedstoneface.json | 14 +++++ .../assets/actuallyadditions/lang/en_US.lang | 1 + .../blocks/blockPhantomRedstoneface.png | Bin 0 -> 732 bytes 9 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPhantomRedstoneface.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockPhantomRedstoneface.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index 67a3035d6..6bde56158 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -17,6 +17,8 @@ import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -34,6 +36,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -51,6 +54,33 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ this.setSoundType(SoundType.STONE); } + @Override + public boolean canProvidePower(IBlockState state){ + return this.type == Type.REDSTONEFACE; + } + + @Override + public int getWeakPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ + if(this.type == Type.REDSTONEFACE){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityPhantomRedstoneface){ + return ((TileEntityPhantomRedstoneface)tile).providesWeak[side.ordinal()]; + } + } + return super.getWeakPower(state, world, pos, side); + } + + @Override + public int getStrongPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ + if(this.type == Type.REDSTONEFACE){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityPhantomRedstoneface){ + return ((TileEntityPhantomRedstoneface)tile).providesStrong[side.ordinal()]; + } + } + return super.getStrongPower(state, world, pos, side); + } + @Override public void breakBlock(World world, BlockPos pos, IBlockState state){ if(this.type == Type.PLACER || this.type == Type.BREAKER){ @@ -70,6 +100,8 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ return new TileEntityPhantomLiquiface(); case ENERGYFACE: return new TileEntityPhantomEnergyface(); + case REDSTONEFACE: + return new TileEntityPhantomRedstoneface(); default: return new TileEntityPhantomItemface(); } @@ -127,6 +159,7 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ PLACER, BREAKER, LIQUIFACE, - ENERGYFACE + ENERGYFACE, + REDSTONEFACE } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 03c5e14d1..caa146106 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -56,6 +56,7 @@ public class InitBlocks{ public static Block blockPhantomBreaker; public static Block blockPhantomLiquiface; public static Block blockPhantomEnergyface; + public static Block blockPhantomRedstoneface; public static Block blockFluidPlacer; public static Block blockFluidCollector; @@ -144,6 +145,7 @@ public class InitBlocks{ blockPhantomPlacer = new BlockPhantom(BlockPhantom.Type.PLACER, "blockPhantomPlacer"); blockPhantomLiquiface = new BlockPhantom(BlockPhantom.Type.LIQUIFACE, "blockPhantomLiquiface"); blockPhantomEnergyface = new BlockPhantom(BlockPhantom.Type.ENERGYFACE, "blockPhantomEnergyface"); + blockPhantomRedstoneface = new BlockPhantom(BlockPhantom.Type.REDSTONEFACE, "blockPhantomRedstoneface"); blockPhantomBreaker = new BlockPhantom(BlockPhantom.Type.BREAKER, "blockPhantomBreaker"); blockCoalGenerator = new BlockCoalGenerator("blockCoalGenerator"); blockOilGenerator = new BlockOilGenerator("blockOilGenerator"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index ef8826037..bbe32fa5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -56,6 +56,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockPhantomface); this.add(InitBlocks.blockPhantomEnergyface); this.add(InitBlocks.blockPhantomLiquiface); + this.add(InitBlocks.blockPhantomRedstoneface); this.add(InitBlocks.blockPhantomPlacer); this.add(InitBlocks.blockPhantomBreaker); this.add(InitBlocks.blockInputter); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 33c10e249..fc082c81a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -75,6 +75,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityAtomicReconstructor.class, ModUtil.MOD_ID+":tileEntityAtomicReconstructor"); GameRegistry.registerTileEntity(TileEntityMiner.class, ModUtil.MOD_ID+":tileEntityMiner"); GameRegistry.registerTileEntity(TileEntityFireworkBox.class, ModUtil.MOD_ID+":tileEntityFireworkBox"); + GameRegistry.registerTileEntity(TileEntityPhantomRedstoneface.class, ModUtil.MOD_ID+":tileEntityPhantomRedstoneface"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java new file mode 100644 index 000000000..17004796d --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -0,0 +1,49 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.EnumFacing; + +import java.util.Arrays; + +public class TileEntityPhantomRedstoneface extends TileEntityPhantomface{ + + public int[] providesStrong = new int[EnumFacing.values().length]; + public int[] providesWeak = new int[EnumFacing.values().length]; + + private int[] lastProvidesStrong = new int[this.providesStrong.length]; + private int[] lastProvidesWeak = new int[this.providesWeak.length]; + + public TileEntityPhantomRedstoneface(){ + super("redstoneface"); + } + + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote){ + if(this.isBoundThingInRange()){ + IBlockState boundState = this.worldObj.getBlockState(this.boundPosition); + if(boundState != null){ + Block boundBlock = boundState.getBlock(); + if(boundBlock != null){ + for(int i = 0; i < EnumFacing.values().length; i++){ + EnumFacing facing = EnumFacing.values()[i]; + this.providesWeak[i] = boundBlock.getWeakPower(boundState, this.worldObj, this.boundPosition, facing); + this.providesStrong[i] = boundBlock.getStrongPower(boundState, this.worldObj, this.boundPosition, facing); + } + } + } + } + + if(!Arrays.equals(this.providesStrong, this.lastProvidesStrong) || !Arrays.equals(this.providesWeak, this.lastProvidesWeak)){ + System.arraycopy(this.providesWeak, 0, this.lastProvidesWeak, 0, this.providesWeak.length); + System.arraycopy(this.providesStrong, 0, this.lastProvidesStrong, 0, this.providesStrong.length); + + this.worldObj.notifyNeighborsOfStateChange(this.pos, PosUtil.getBlock(this.pos, this.worldObj)); + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 1e45ae82a..0ac068edf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -95,8 +95,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP this.boundPosBefore = this.boundPosition; this.boundBlockBefore = this.boundPosition == null ? null : PosUtil.getBlock(this.boundPosition, this.worldObj); - IBlockState myState = this.worldObj.getBlockState(this.pos); - this.worldObj.notifyBlockUpdate(this.pos, myState, myState, 3); + this.worldObj.notifyNeighborsOfStateChange(this.pos, PosUtil.getBlock(this.pos, this.worldObj)); this.sendUpdate(); this.markDirty(); diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomRedstoneface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomRedstoneface.json new file mode 100644 index 000000000..9030482ce --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPhantomRedstoneface.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockPhantomRedstoneface" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 401fd2ebc..4f3ac7243 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -73,6 +73,7 @@ tile.actuallyadditions.blockColoredLampCyan.name=Cyan Lamp tile.actuallyadditions.blockColoredLampPurple.name=Purple Lamp tile.actuallyadditions.blockPhantomface.name=Phantomface tile.actuallyadditions.blockPhantomEnergyface.name=Phantom Energyface +tile.actuallyadditions.blockPhantomRedstoneface.name=Phantom Redstoneface tile.actuallyadditions.blockPhantomLiquiface.name=Phantom Liquiface tile.actuallyadditions.blockPhantomPlacer.name=Phantom Placer tile.actuallyadditions.blockPhantomBreaker.name=Phantom Breaker diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockPhantomRedstoneface.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockPhantomRedstoneface.png new file mode 100644 index 0000000000000000000000000000000000000000..31cf7d4d37ff8d7de79f664f058ae8c6885bbb44 GIT binary patch literal 732 zcmV<20wev2P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Ra1sxL( zJ9Nk0>i_@%7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M`I!Q!9R5(vf zlS^xpQ4od?TCb?Ma8(o(FCd7Dpdg~6D6YJVAkjq?6x@iYpio!o1=2{;T6#;gjY%3M zmoBV`B3OlL>#D||qWkfECf^rbyvclX&OCF@%$%^NBiP{;!A`9Vc1AiaosjVD*V=Ar z*YaRHrR~zzNZ9zoL2V@P@~U9hRtLKwU6(HE8_I04Tlt` z7p+=b`VZ1}av^Ln|NZ9yTn`yL8(!RnW0nX_Pxv4pa zu#uqjx?tmxu<@}LpM>Lk5h)NwELVQm#N=ns)~|rdhF}XDTf)Z28o~AI(!VayCh9O% zoOcMD$V%X!O)X*LV=XQ$!E`3@vrmxxT_+LSI}<-BW!#CC@c^XqX21#G&nYE z`N9{!XP-8|T;B>r*!Wl*&3{yj7ktqC1l)yo^kv@I(D*y+Ql;-H69L&s*!b=UkRG0~ zvHT}HtHL{gU|MqjNyd7gy|xQl075o`5H`L`TI(4oJA~Qc>TN*c)~ literal 0 HcmV?d00001 From 6a0d4ca6117f42899a97245eacac040b90600118 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 17:37:12 +0200 Subject: [PATCH 082/322] Redstoneface recipe and doc --- .../actuallyadditions/mod/booklet/InitBooklet.java | 1 + .../mod/config/values/ConfigCrafting.java | 1 + .../actuallyadditions/mod/crafting/BlockCrafting.java | 11 +++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 5 ++++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 2b15c2743..d23c114a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -88,6 +88,7 @@ public class InitBooklet{ new BookletChapter("breaker", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockBreaker), new PageCrafting(1, BlockCrafting.recipeBreaker).setPageStacksWildcard(), new PageCrafting(2, BlockCrafting.recipePlacer).setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeLiquidPlacer).setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLiquidCollector).setPageStacksWildcard()); new BookletChapter("dropper", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockDropper), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeDropper).setNoText()); new BookletChapter("phantomfaces", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomLiquiface), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomface.RANGE), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipePhantomface), new PageCrafting(4, BlockCrafting.recipeLiquiface), new PageCrafting(5, BlockCrafting.recipeEnergyface), new PageCrafting(6, ItemCrafting.recipePhantomConnector).setNoText(), new PageCrafting(7, BlockCrafting.recipePhantomBooster)).setImportant(); + new BookletChapter("phantomRedstoneface", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomRedstoneface), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipePhantomRedstoneface).setNoText()); new BookletChapter("phantomBreaker", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomBreaker), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomPlacer.RANGE), new PageCrafting(2, BlockCrafting.recipePhantomPlacer).setNoText(), new PageCrafting(3, BlockCrafting.recipePhantomBreaker).setNoText()); new BookletChapter("esd", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockInputterAdvanced), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeESD).setNoText(), new PageCrafting(3, BlockCrafting.recipeAdvancedESD).setNoText()).setSpecial(); new BookletChapter("xpSolidifier", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockXPSolidifier), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemSolidifiedExperience)), new PageCrafting(2, BlockCrafting.recipeSolidifier).setNoText()).setSpecial().setIncomplete(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index ba9e0f094..b5aaa8e31 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -98,6 +98,7 @@ public enum ConfigCrafting{ PHANTOM_CONNECTOR("Phantom Connector", ConfigCategories.ITEMS_CRAFTING), PHANTOM_ENERGYFACE("Phantom Energyface", ConfigCategories.BLOCKS_CRAFTING), + PHANTOM_REDSTONEFACE("Phantom Redstoneface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_LIQUIFACE("Phantom Liquiface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_PLACER("Phantom Placer", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_BREAKER("Phantom Breaker", ConfigCategories.BLOCKS_CRAFTING), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index c63a66788..131bffa94 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -81,6 +81,7 @@ public class BlockCrafting{ public static IRecipe recipeAtomicReconstructor; public static IRecipe recipeMiner; public static IRecipe recipeFireworkBox; + public static IRecipe recipePhantomRedstoneface; public static void init(){ @@ -386,6 +387,16 @@ public class BlockCrafting{ recipeEnergyface = RecipeUtil.lastIRecipe(); } + //Phantom Redstoneface + if(ConfigCrafting.PHANTOM_REDSTONEFACE.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockPhantomRedstoneface), + "SRS", "RFR", "SRS", + 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), + 'S', new ItemStack(Items.REDSTONE), + 'F', InitBlocks.blockPhantomface)); + recipePhantomRedstoneface = RecipeUtil.lastIRecipe(); + } + //Phantom Liquiface if(ConfigCrafting.PHANTOM_LIQUIFACE.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockPhantomLiquiface), diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 4f3ac7243..7cfde7be5 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -772,4 +772,7 @@ booklet.actuallyadditions.chapter.rf.name=RF (Redstone Flux) booklet.actuallyadditions.chapter.rf.text.1=For anyone who hasn't used much of a mod that uses RF yet, here's a quick explanation. Redstone Flux, or RF for short, is a power system used by many mods. The basic concept is is that lots of machines generate or use it every game tick. That's what RF/t means. To connect a power generating (thus, outputting) machine to one that needs (thus, receives) power, just place it next to it. What's a fourth wall? booklet.actuallyadditions.chapter.enderStar.name=Ender Star -booklet.actuallyadditions.chapter.enderStar.text.1=The Ender Star can be obtained by both killing a wither and going to the end to collect Dragon's Breath. The latter is obtained by using a bottle on the purple particles that the dragon spits out. The Ender Star is used for multiple crafting recipes. \ No newline at end of file +booklet.actuallyadditions.chapter.enderStar.text.1=The Ender Star can be obtained by both killing a wither and going to the end to collect Dragon's Breath. The latter is obtained by using a bottle on the purple particles that the dragon spits out. The Ender Star is used for multiple crafting recipes. + +booklet.actuallyadditions.chapter.phantomRedstoneface.name=Phantom Redstoneface +booklet.actuallyadditions.chapter.phantomRedstoneface.text.1=If you don't know what Phantomfaces are, check the Phantomfaces Entry first. The Phantom Redstoneface can be used to transmit redstone signals. This one, however, works differently to the other Phantomfaces as it only works in one direction. What this means is that the connected block has to provide redstone power for redstone next to the Redstoneface to become powered. It does not work the other way around. \ No newline at end of file From 9d04c236c771b3e8e462c6a8679af072758fcbec Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 17:50:18 +0200 Subject: [PATCH 083/322] Made the Phantom Redstoneface not update twice when binding to an already active redstone --- .../tile/TileEntityPhantomRedstoneface.java | 24 ++++++++++------- .../mod/tile/TileEntityPhantomface.java | 27 ++++++++++++------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java index 17004796d..2d3e9e0c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -21,8 +21,6 @@ public class TileEntityPhantomRedstoneface extends TileEntityPhantomface{ @Override public void updateEntity(){ - super.updateEntity(); - if(!this.worldObj.isRemote){ if(this.isBoundThingInRange()){ IBlockState boundState = this.worldObj.getBlockState(this.boundPosition); @@ -37,13 +35,21 @@ public class TileEntityPhantomRedstoneface extends TileEntityPhantomface{ } } } - - if(!Arrays.equals(this.providesStrong, this.lastProvidesStrong) || !Arrays.equals(this.providesWeak, this.lastProvidesWeak)){ - System.arraycopy(this.providesWeak, 0, this.lastProvidesWeak, 0, this.providesWeak.length); - System.arraycopy(this.providesStrong, 0, this.lastProvidesStrong, 0, this.providesStrong.length); - - this.worldObj.notifyNeighborsOfStateChange(this.pos, PosUtil.getBlock(this.pos, this.worldObj)); - } } + + super.updateEntity(); + } + + @Override + protected boolean doesNeedUpdateSend(){ + return super.doesNeedUpdateSend() || !Arrays.equals(this.providesStrong, this.lastProvidesStrong) || !Arrays.equals(this.providesWeak, this.lastProvidesWeak); + } + + @Override + protected void onUpdateSent(){ + System.arraycopy(this.providesWeak, 0, this.lastProvidesWeak, 0, this.providesWeak.length); + System.arraycopy(this.providesStrong, 0, this.lastProvidesStrong, 0, this.providesStrong.length); + + super.onUpdateSent(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 0ac068edf..f4ff0f1e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -90,15 +90,9 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP this.boundPosition = null; } - if(this.boundPosition != this.boundPosBefore || (this.boundPosition != null && PosUtil.getBlock(this.boundPosition, this.worldObj) != this.boundBlockBefore) || this.rangeBefore != this.range){ - this.rangeBefore = this.range; - this.boundPosBefore = this.boundPosition; - this.boundBlockBefore = this.boundPosition == null ? null : PosUtil.getBlock(this.boundPosition, this.worldObj); - - this.worldObj.notifyNeighborsOfStateChange(this.pos, PosUtil.getBlock(this.pos, this.worldObj)); - - this.sendUpdate(); - this.markDirty(); + if(this.doesNeedUpdateSend()){ + this.onUpdateSent(); + System.out.println("UPDAT!"); } } else{ @@ -108,6 +102,21 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } } + protected boolean doesNeedUpdateSend(){ + return this.boundPosition != this.boundPosBefore || (this.boundPosition != null && PosUtil.getBlock(this.boundPosition, this.worldObj) != this.boundBlockBefore) || this.rangeBefore != this.range; + } + + protected void onUpdateSent(){ + this.rangeBefore = this.range; + this.boundPosBefore = this.boundPosition; + this.boundBlockBefore = this.boundPosition == null ? null : PosUtil.getBlock(this.boundPosition, this.worldObj); + + this.worldObj.notifyNeighborsOfStateChange(this.pos, PosUtil.getBlock(this.pos, this.worldObj)); + + this.sendUpdate(); + this.markDirty(); + } + @Override public boolean isItemValidForSlot(int slot, ItemStack stack){ return false; From 727fb1fc24102b1b36d4bc54f7ac1f44dffcc411 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 17:51:36 +0200 Subject: [PATCH 084/322] Remove sout --- .../actuallyadditions/mod/tile/TileEntityPhantomface.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index f4ff0f1e7..c8232f301 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -92,7 +92,6 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP if(this.doesNeedUpdateSend()){ this.onUpdateSent(); - System.out.println("UPDAT!"); } } else{ From 06ede0c82210a589a1240cb9b9a07494f7fac598 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 19:50:59 +0200 Subject: [PATCH 085/322] Made color lens more modular by adding a way to colorize items to the API. API Version bumped to 9. --- .../api/ActuallyAdditionsAPI.java | 24 ++++++-- .../api/recipe/ColorLensChangerByDyeMeta.java | 23 ++++++++ .../api/recipe/IColorLensChanger.java | 24 ++++++++ .../mod/ActuallyAdditions.java | 4 +- .../mod/booklet/InitBooklet.java | 9 ++- .../mod/items/lens/LensColor.java | 56 ++++++++++--------- .../mod/items/lens/LensNone.java | 4 +- ...ipeHandler.java => LensRecipeHandler.java} | 16 +++++- 8 files changed, 118 insertions(+), 42 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java rename src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/{LensNoneRecipeHandler.java => LensRecipeHandler.java} (85%) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 0e27aa6fd..986594a0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -12,27 +12,28 @@ package de.ellpeck.actuallyadditions.api; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; -import de.ellpeck.actuallyadditions.api.recipe.BallOfFurReturn; -import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; -import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; -import de.ellpeck.actuallyadditions.api.recipe.TreasureChestLoot; +import de.ellpeck.actuallyadditions.api.recipe.*; import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "8"; + public static final String API_VERSION = "9"; public static List crusherRecipes = new ArrayList(); public static List ballOfFurReturnItems = new ArrayList(); public static List treasureChestLoot = new ArrayList(); public static List reconstructorLensNoneRecipes = new ArrayList(); + public static Map reconstructorLensColorChangers = new HashMap(); public static List coffeeMachineIngredients = new ArrayList(); public static List bookletEntries = new ArrayList(); @@ -159,6 +160,19 @@ public class ActuallyAdditionsAPI{ reconstructorLensNoneRecipes.add(new LensNoneRecipe(input, output, energyUse)); } + /** + * Adds an item and the way it is modified to the Atomic Reconstructor's color lens. + * This also works for blocks, but they have to be in their item form. + * The way it is modified is an instance of IColorLensChanger. When modifying the item, + * its modifyItem() method will be called with a stack containing the item. + * + * @param item The item (or block's item) to add + * @param changer The change mechanism + */ + public static void addReconstructorLensColorChangeItem(Item item, IColorLensChanger changer){ + reconstructorLensColorChangers.put(item, changer); + } + /** * Adds an ingredient to the Coffee Machine ingredient list * diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java new file mode 100644 index 000000000..18849a55e --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java @@ -0,0 +1,23 @@ +package de.ellpeck.actuallyadditions.api.recipe; + +import net.minecraft.item.ItemStack; + +/** + * Changes an item's color by changing its metadata. + * Much like dye and wool, 0 is white and 15 is black and it will cycle around. + */ +public class ColorLensChangerByDyeMeta implements IColorLensChanger{ + + @Override + public ItemStack modifyItem(ItemStack stack){ + ItemStack newStack = stack.copy(); + int meta = newStack.getItemDamage(); + if(meta >= 15){ + newStack.setItemDamage(0); + } + else{ + newStack.setItemDamage(meta+1); + } + return newStack; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java new file mode 100644 index 000000000..2edc0f386 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java @@ -0,0 +1,24 @@ +package de.ellpeck.actuallyadditions.api.recipe; + +import net.minecraft.item.ItemStack; + +/** + * Used for the Atomic Reconstructor's Color Lens changing algorythm. + * When registering a new item to be changed, it needs an IColorLensChanger which + * is the method with which the item will be changed. + * + * See ColorLensChangerByDyeMeta for reference. + */ +public interface IColorLensChanger{ + + /** + * Modifies the given item. + * Will only be called with stacks containing items that are registered with + * this IColorLensChanger. + * + * @param stack the stack to modify + * @return the modified stack. Please make sure to return a modified COPY of the input stack. + */ + ItemStack modifyItem(ItemStack stack); + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 0c4202df6..ca3b1340d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -25,7 +25,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.InitForeignPaxels; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; -import de.ellpeck.actuallyadditions.mod.items.lens.LensNoneRecipeHandler; +import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; import de.ellpeck.actuallyadditions.mod.misc.*; @@ -105,7 +105,7 @@ public class ActuallyAdditions{ ItemCrafting.initMashedFoodRecipes(); HairyBallHandler.init(); TreasureChestHandler.init(); - LensNoneRecipeHandler.init(); + LensRecipeHandler.init(); InitForeignPaxels.init(); InitBooklet.postInit(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index d23c114a1..0c7524dba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; @@ -26,7 +25,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.crafting.*; import de.ellpeck.actuallyadditions.mod.gen.OreGen; import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.lens.LensNoneRecipeHandler; +import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.*; @@ -60,14 +59,14 @@ public class InitBooklet{ //Getting Started chapterIntro = new BookletChapter("intro", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageTextOnly(3)); new BookletChapter("bookTutorial", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeBook)); - new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(8, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(9, LensNoneRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); + new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(8, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(9, LensRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); new BookletChapter("coalGen", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockCoalGenerator), new PageCrafting(1, BlockCrafting.recipeCoalGen).addTextReplacement("", TileEntityCoalGenerator.PRODUCE).setPageStacksWildcard()); new BookletChapter("craftingIngs", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeCoil).setNoText(), new PageCrafting(3, ItemCrafting.recipeCoilAdvanced).setNoText(), new PageCrafting(4, BlockCrafting.recipeCase).setNoText(), new PageCrafting(5, BlockCrafting.recipeEnderPearlBlock).setNoText(), new PageCrafting(6, BlockCrafting.recipeEnderCase).setNoText(), new PageCrafting(7, ItemCrafting.recipeRing).setNoText(), new PageCrafting(8, ItemCrafting.recipeKnifeHandle).setNoText(), new PageCrafting(9, ItemCrafting.recipeKnifeBlade).setNoText(), new PageCrafting(10, ItemCrafting.recipeKnife).setNoText(), new PageCrafting(11, ItemCrafting.recipeDough).setNoText(), new PageCrafting(12, ItemCrafting.recipeRiceDough).setNoText(), new PageCrafting(13, BlockCrafting.recipeIronCase).setNoText()).setImportant(); new BookletChapter("rf", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(Items.REDSTONE), new PageTextOnly(1)); //Miscellaneous - new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, LensNoneRecipeHandler.recipeColorLens), new PageReconstructor(4, LensNoneRecipeHandler.recipeExplosionLens), new PageReconstructor(5, LensNoneRecipeHandler.recipeDamageLens), new PageReconstructor(6, LensNoneRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(7, LensNoneRecipeHandler.recipeLeather).setNoText(), new PageReconstructor(8, LensNoneRecipeHandler.recipeNetherWart).setNoText()).setImportant(); - new BookletChapter("miscDecorStuffsAndThings", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, LensNoneRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, LensNoneRecipeHandler.recipeGreenWall).setNoText()); + new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeColorLens), new PageReconstructor(4, LensRecipeHandler.recipeExplosionLens), new PageReconstructor(5, LensRecipeHandler.recipeDamageLens), new PageReconstructor(6, LensRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(7, LensRecipeHandler.recipeLeather).setNoText(), new PageReconstructor(8, LensRecipeHandler.recipeNetherWart).setNoText()).setImportant(); + new BookletChapter("miscDecorStuffsAndThings", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, LensRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeGreenWall).setNoText()); new BookletChapter("quartz", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal())).addTextReplacement("", OreGen.QUARTZ_MIN).addTextReplacement("", OreGen.QUARTZ_MAX), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())), new PageCrafting(3, BlockCrafting.recipeQuartzBlock).setNoText(), new PageCrafting(4, BlockCrafting.recipeQuartzPillar).setNoText(), new PageCrafting(5, BlockCrafting.recipeQuartzChiseled).setNoText()); new BookletChapter("cloud", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockSmileyCloud), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud).setNoText().setPageStacksWildcard()).setSpecial(); new BookletChapter("coalStuff", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.TINY_COAL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeTinyCoal).setNoText(), new PageCrafting(3, ItemCrafting.recipeTinyChar).setNoText(), new PageCrafting(4, BlockCrafting.recipeBlockChar).setNoText()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 3d23f2748..2aa839191 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -11,8 +11,10 @@ package de.ellpeck.actuallyadditions.mod.items.lens; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; +import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -21,25 +23,19 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; +import java.util.Map; public class LensColor extends Lens{ public static final int ENERGY_USE = 200; - public static final Object[] CONVERTABLE_BLOCKS = new Object[]{ - Items.DYE, - Blocks.WOOL, - Blocks.STAINED_GLASS, - Blocks.STAINED_GLASS_PANE, - Blocks.STAINED_HARDENED_CLAY, - Blocks.CARPET, - InitBlocks.blockColoredLamp, - InitBlocks.blockColoredLampOn - }; + //Thanks to xdjackiexd for this, as I couldn't be bothered private static final float[][] POSSIBLE_COLORS = { {158F, 43F, 39F}, //Red @@ -60,30 +56,21 @@ public class LensColor extends Lens{ @Override public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ if(hitBlock != null){ - if(Util.arrayContains(CONVERTABLE_BLOCKS, PosUtil.getBlock(hitBlock, tile.getWorldObject())) >= 0 && tile.getEnergy() >= ENERGY_USE){ + if(tile.getEnergy() >= ENERGY_USE){ int meta = PosUtil.getMetadata(hitBlock, tile.getWorldObject()); - if(meta >= 15){ - PosUtil.setMetadata(hitBlock, tile.getWorldObject(), 0, 2); + ItemStack returnStack = this.tryConvert(new ItemStack(PosUtil.getBlock(hitBlock, tile.getWorldObject()), 1, meta)); + if(returnStack != null && returnStack.getItem() instanceof ItemBlock){ + PosUtil.setBlock(hitBlock, tile.getWorldObject(), Block.getBlockFromItem(returnStack.getItem()), returnStack.getItemDamage(), 2); + + tile.extractEnergy(ENERGY_USE); } - else{ - PosUtil.setMetadata(hitBlock, tile.getWorldObject(), meta+1, 2); - } - tile.extractEnergy(ENERGY_USE); } ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); for(EntityItem item : items){ if(!item.isDead && item.getEntityItem() != null && tile.getEnergy() >= ENERGY_USE){ - if(Util.arrayContains(CONVERTABLE_BLOCKS, item.getEntityItem().getItem()) >= 0 || Util.arrayContains(CONVERTABLE_BLOCKS, Block.getBlockFromItem(item.getEntityItem().getItem())) >= 0){ - ItemStack newStack = item.getEntityItem().copy(); - int meta = newStack.getItemDamage(); - if(meta >= 15){ - newStack.setItemDamage(0); - } - else{ - newStack.setItemDamage(meta+1); - } - + ItemStack newStack = this.tryConvert(item.getEntityItem()); + if(newStack != null){ item.setDead(); EntityItem newItem = new EntityItem(tile.getWorldObject(), item.posX, item.posY, item.posZ, newStack); @@ -97,6 +84,21 @@ public class LensColor extends Lens{ return false; } + private ItemStack tryConvert(ItemStack stack){ + if(stack != null){ + Item item = stack.getItem(); + if(item != null){ + for(Map.Entry changer : ActuallyAdditionsAPI.reconstructorLensColorChangers.entrySet()){ + if(item == changer.getKey()){ + return changer.getValue().modifyItem(stack); + } + } + } + } + + return null; + } + @Override public float[] getColor(){ float[] colors = POSSIBLE_COLORS[Util.RANDOM.nextInt(POSSIBLE_COLORS.length)]; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java index e751cb020..f3a9e5bd9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java @@ -40,7 +40,7 @@ public class LensNone extends Lens{ for(int reachZ = -range; reachZ < range+1; reachZ++){ for(int reachY = -range; reachY < range+1; reachY++){ BlockPos pos = new BlockPos(hitBlock.getX()+reachX, hitBlock.getY()+reachY, hitBlock.getZ()+reachZ); - List recipes = LensNoneRecipeHandler.getRecipesFor(new ItemStack(PosUtil.getBlock(pos, tile.getWorldObject()), 1, PosUtil.getMetadata(pos, tile.getWorldObject()))); + List recipes = LensRecipeHandler.getRecipesFor(new ItemStack(PosUtil.getBlock(pos, tile.getWorldObject()), 1, PosUtil.getMetadata(pos, tile.getWorldObject()))); for(LensNoneRecipe recipe : recipes){ if(recipe != null && tile.getEnergy() >= recipe.energyUse){ List outputs = recipe.getOutputs(); @@ -70,7 +70,7 @@ public class LensNone extends Lens{ for(EntityItem item : items){ ItemStack stack = item.getEntityItem(); if(!item.isDead && stack != null){ - List recipes = LensNoneRecipeHandler.getRecipesFor(stack); + List recipes = LensRecipeHandler.getRecipesFor(stack); for(LensNoneRecipe recipe : recipes){ if(recipe != null && tile.getEnergy() >= recipe.energyUse){ List outputs = recipe.getOutputs(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java similarity index 85% rename from src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java index 848dad922..160a5a385 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNoneRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java @@ -11,6 +11,8 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.recipe.ColorLensChangerByDyeMeta; +import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; @@ -21,11 +23,12 @@ import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import java.util.ArrayList; -public class LensNoneRecipeHandler{ +public class LensRecipeHandler{ public static ArrayList mainPageRecipes = new ArrayList(); public static LensNoneRecipe recipeColorLens; @@ -96,6 +99,17 @@ public class LensNoneRecipeHandler{ recipeWhiteWall = RecipeUtil.lastReconstructorRecipe(); ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.QUARTZ_BLOCK, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); recipeGreenWall = RecipeUtil.lastReconstructorRecipe(); + + IColorLensChanger changer = new ColorLensChangerByDyeMeta(); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Items.DYE, changer); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.WOOL), changer); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.STAINED_GLASS), changer); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.STAINED_GLASS_PANE), changer); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.STAINED_HARDENED_CLAY), changer); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.CARPET), changer); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(InitBlocks.blockColoredLamp), changer); + ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(InitBlocks.blockColoredLampOn), changer); + } public static ArrayList getRecipesFor(ItemStack input){ From 7afa319b5c71170b2486f5e4248035c0860f66a5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 5 May 2016 20:52:32 +0200 Subject: [PATCH 086/322] Changed storage crate recipe. Closes #92. --- .../ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index d4837ab80..9e3f733ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -106,8 +106,8 @@ public class ItemCrafting{ //Chest To Crate Upgrade if(ConfigCrafting.CHEST_TO_CRATE_UPGRADE.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemChestToCrateUpgrade), - "CWC", "WWW", "CWC", - 'C', new ItemStack(Blocks.CHEST), + " W ", "WCW", " W ", + 'C', new ItemStack(InitBlocks.blockGiantChest), 'W', "plankWood")); recipeChestToCrateUpgrade = RecipeUtil.lastIRecipe(); } From d842367252812fb7e63638fcbe0f0dda9a0be6eb Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 10:55:51 +0200 Subject: [PATCH 087/322] all teh moneyz --- .../mod/booklet/GuiBooklet.java | 17 ++++++++++++++--- .../textures/gui/booklet/guiBooklet.png | Bin 18642 -> 18640 bytes 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 4636d7d6f..50be023f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -75,6 +75,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public GuiButton buttonAchievements; public GuiButton buttonConfig; public GuiButton buttonWebsite; + public GuiButton buttonPatreon; public GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT]; public GuiButton[] bookmarkButtons = new GuiButton[8]; public GuiTextField searchField; @@ -230,6 +231,10 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ else if(button == this.buttonWebsite){ BookletUtils.openBrowser("http://ellpeck.de"); } + //Handles Patreon + else if(button == this.buttonPatreon){ + BookletUtils.openBrowser("http://www.patreon.com/Ellpeck"); + } //Handles Twitter else if(button == this.buttonTwitter){ BookletUtils.openBrowser("http://twitter.com/ActAddMod"); @@ -298,10 +303,10 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.buttonUpdate.visible = UpdateChecker.needsUpdateNotify; this.buttonList.add(this.buttonUpdate); - this.buttonTwitter = new TexturedButton(5, this.guiLeft, this.guiTop, 213, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open @ActAddMod on Twitter in Browser")); + this.buttonTwitter = new TexturedButton(5, this.guiLeft, this.guiTop+10, 213, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open @ActAddMod on Twitter in Browser")); this.buttonList.add(this.buttonTwitter); - this.buttonForum = new TexturedButton(6, this.guiLeft, this.guiTop+10, 221, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open Minecraft Forum Post in Browser")); + this.buttonForum = new TexturedButton(6, this.guiLeft, this.guiTop+20, 221, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open Minecraft Forum Post in Browser")); this.buttonList.add(this.buttonForum); this.buttonAchievements = new TexturedButton(7, this.guiLeft+138, this.guiTop, 205, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Show Achievements")); @@ -311,9 +316,15 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ websiteHover.add(TextFormatting.GOLD+"Open Author's Website"); websiteHover.add("(There's some cool stuff there!)"); websiteHover.add(TextFormatting.GRAY+""+TextFormatting.ITALIC+"Would you call this Product Placement?"); - this.buttonWebsite = new TexturedButton(-99, this.guiLeft, this.guiTop+20, 228, 0, 8, 8, websiteHover); + this.buttonWebsite = new TexturedButton(-99, this.guiLeft, this.guiTop+30, 229, 0, 8, 8, websiteHover); this.buttonList.add(this.buttonWebsite); + List patreonHover = new ArrayList(); + patreonHover.add("Like the mod?"); + patreonHover.add("Why don't support me on "+TextFormatting.GOLD+"Patreon"+TextFormatting.RESET+"?"); + this.buttonPatreon = new TexturedButton(-100, this.guiLeft, this.guiTop, 237, 0, 8, 8, patreonHover); + this.buttonList.add(this.buttonPatreon); + ArrayList configHover = new ArrayList(); configHover.add(TextFormatting.GOLD+"Show Configuration GUI"); configHover.addAll(this.fontRendererObj.listFormattedStringToWidth("It is highly recommended that you restart your game after changing anything as that prevents possible bugs occuring!", 200)); diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/booklet/guiBooklet.png b/src/main/resources/assets/actuallyadditions/textures/gui/booklet/guiBooklet.png index 1a67f3893a055c8c799a028d18afce407ae8047d..1bc043758743f3e4e8140afce0b817a914936f4f 100644 GIT binary patch literal 18640 zcmY(rc|25a_&$E0Gc$~R$i8GOZAdB!k%_XjQ4%Fgi>Pd6Cmd3|LzMO`qs@}75@l;t z;@yI>Mwn74d$Mo8XX^d=e1D%myht-=&Uv2uzV7R~?)&kN)lM@Zep!A15VA1eyc+;R zKVm@TLEjFX$~cO?kzF?J*aYw}USReh1^t`P%Y2_Vfbf0p7Z&w7(-ZxY*T-VV7T!+k zVo|--0|n~C=vUG{TkL$SJ&*eMA3Ws@UI&kP_-J}K`_Q#DwKVnI)`so`FyCOYdDET% z$AM(N77d%gp1`H6|4qE{uWO-Ma_m1E9ye4UcduTnnJp@IC-R?*m6SaRJ1Dy@kDXF_ z^v~^om#amaivPp2?oEyJvjbP(et%)JXY-bmor%{C*Cy89oVIO#KHcg0yr&^^@aO#W z%yd%Elu^5by=_@f>GPmk`}8co>9bWswnv)(n&MzzDZ?!S$T z#y8#x__|RpX4%FQhey7Jte3P5Y`RgIXEYOU8u=qG<;g*M@?OiTVzuqf19Pv3%F;fB zg%0YeETm08>1=PIw$*j|&0CKf-uakkR5DvTUDD_gocwiYZRO!dzpk$P7!sbpcs@R2 zV8zU>Uq30ouHMrMYc8`?yy(!mHGW5Wa9jEzaP^+QZe6J7M#YO$25sBM?HZ;!MpGul z)06%7kIG$mIpuSDu4c-md`{p>*0HgPt&ip<)<3`3GTCuBW?P9-Q6@j#D2_wXIvlhUmJK@S)XmkL8cR*F*6$ojb_h*zn7uYvyK=q_>)E?= zYv$;=NZ%i`ekmR?ZLb&Xda87M3`-Qnub$Cz8gmL;ND}?>^l6UMT=L_Huc4z8d4@AW zIWOj|Cq3tKXWn#i*39OAQIEt=$KEIvYn6Kt81Iv3l9U?4k#jCFLHeUr*zN z%R(qNoc-~OO(bJVLFgRRnYx@kcjx&hTFx0)lhN+r7vsN6=9`Yu_hc|hOcd*=O??-Ka< zyOd%fhmG2KJM7|x$?3~LnqtRm^J%Kl^JM6T)Ebdw?;5?sqrN5LJ+*>RmpHz%R_s)_ zS#ND1O|DRfzSExkWI*b+wE49dK2iMp`ypl1B^?ImXQVFqZ?88mQQu#?Hxb~rNml81 z&ScY6W`jH9x>W1VTlp#aH2GAQF#S0F<>~g2(N#a?yRqEJWunvVHnCpbzoq4L->kk< z^5WDo9E6?5Cf=^ynEvoZnDa!J>GZjMeP;WcmF@vktmmcv*gu9hIRX~V73BeK6+_|& z9dvmWoL?RM88IXYe&s#0WBuO-to_Py;_GZC1`b{wH!7VDOoe|v_aINhdI_yu6#iVMK&)=Jg@!U9jj!cA&J=wZ2 z-0YP1+cIqQ{nylmar-OtwVfd)9~b6khW1Q{EeyARb($Xuj@vu`V@75AgV6$g8(FU6 zX#Ns6f#8Kk|HWB9f3!J;uqOBK^LLv5Tvpj*6yiUUCQ@4RbZF52{6yKzK;=Nu0qfGf z0Z&aGhnWvq4s?E|+%90B>^- zVqt!EP6AAoi4AY4oRs&KE`Fa^i(#j~3v76;Oy~f6N=ZM=7M7FOz*l|@cC{9j|N6ua zPNBo)YB+%3zDU4>Q6+K957! zE<`;yvT`lYn3$@avQ_yw1;pVEuu)p2}`Hqg`hsfQW+vf#JASVXXt``d$I* z!Q%@h&u5R<3spm}Eh=S_h4Xzwq5o3YQJT*Sp8EH_uS|7Z(~IvBW$?kbFk=X4HS-tA zI_|o5c}Li;G36b6J0{NSD^_6{i*!a$R5cGJg^e$SW{BM%*>Jbd>2$67`L2!QZI$-x zpBL!|OQj$1ncVnJyQq&oIo#ln(-Wmy85hjl@Es$Fnqy?J{UW&VMrb z!euZQ*uzd3jPzTko3+$h`e7PS$B?10D)vL&)LQsRk*o02!6z$<&N&dPLIykT3jk>G zdi}e_Q-K7dw=nj<#YP?ab)k9FiK=h@$$1xsFwVE0x%jQksdF!W z*5?{Mn%n<=Ru&9qf`NTXsWD~}0%q67D{cl~F`6D|lfOZhCPM);urdW;U)xv|qKel& zHbSti0@Rv3QNoXO2#80cMe0k?8sGm1vQ>=TYZSfT=tK!^Vl>y!9dBDKAWyD2T7|{x z(&aC?xV))Zb+5*=r+!K)mLzTORJd*3s6DXV-CB>OZyn!o%^M>uaY7G%Q*Oz#3*Xz2 zwSZm757k(J18jzyB%*7yz8jYQ0|sz}8oLc+i2}T*5*CayewH4QmE1o+eFO^h z62`+Y+6|G#u!C&nhlrIQb{~VyQF{X4R*d9~T4%NqTB{0@byh@k=vhIhtR;QtUjd_1 zN0j}^MO<;A`nye~3a?ky%4SLb_$AoTg{7Dwv}l4iBmz;Biq&bhQ2ic@5f_YAyJyLx;1Qpv5WfGNzZf1)V!OfbWOU3-Jd z?gq}RyC`9bW$F=v#9%~Rt1=wm*&c^d-_^uRUSCF5DJ;F(yV#1TMmcL`(sIIZ2xv0Y3lFHV2=k_{*&f3wj(*A z1m;|i!-3I@dm(_bQ_8x`E6 zlEfeuZ$Q~KeG!N8M((PmX|gwTO7cLYPUQ4&)?$3a_{%2saZBeu?dHCx2KgkMi#BRK zW)^W!M=NX+WwQjlTt+x^{=6lSsR!=MX(iYSAlAS~R2)27tx8o{C}7MP3WAY-FQ{x1 zkb5lS`t8#99i4fCftqhUow=qKlEJ96CH3ZK=NWYrD?_&KcJYIB_aNSMk$1V_>DYk!d)i zUyZ@T{uw>SZ=}=`j1i8MI(dNnJ8tstxS6JFBwK&if?*1@s?b!7Hg<=5p=kpm zW>wHO#I6O2sehaLP&zpuuRJacT`=sXyFvVV5h>Id#fDHYp980lD?C}zhEMP}P+*Wu6tg)MzmeG4bgmraqiGIB0R=Agp z*0=#^3#u>0*22+M6p-Urff+k5M;`e=WvgxEzi)ZyDEbM#?Y%i8k#zltD(l?&gloKX zI3>k0sxTejeo%$zHD}9$pDG72J;U7r zhWcwg7(9&UkA%)bz5~iO1>S^2BGW}sQ%zdRTUe7%N?XkS02 z?#y%HH&;Oz%ZrPmI_5JkNceo%nZLwjiywwK3Q;Z-ZHu*DBCem)iPU#Cbb)u48P;;2 zD)PR3D;;RI_BOHFN@i;^ejcvCAZ0F%2GSVAD>M#@fxaQEgt@FGMikr>V&UhlaLtn6 zxA`GR#_O&?e$PKL@Ia&K0nU0qmC27QffiqMRK(8#HaCQ5F#H;0om9eIx8bjqLEcUf z5-5yw?5CyYUdR&))NkGJGZ-_yMBtFqjKau51x)?Q07ThU+klu2lCi=#?ZUCI8wCgWabzw!O!*;-IB;7|tA! z<_mB+AyyXyZc+$&Er8Ke3$9Xbuc$bUs%VD7=EUby1&0=*JUM ztn;AFXQvZ+Pzr3ZbE0q#D~cmAUgjHYULBuyk1uHD|jWG87 zb6!9x&0G@*(d|Of!Pq&I@F;)MaWV_)f+}VF_g5S%`{B^o<7ZGZzG5h>B&)U7F_Cbt zoX``uljETN;> zmT3;Xd}f%QuGSMDM`B7rEvc?8Tm~yJluY7d2!N2pCko^6-BZF$orpNMjA$yb3QfY- z@e-P_iu4+YX>RJgt{ey$&De{KaaT-+VvV2Bk{UWPzVmGj8 z)etS96VYBEKs-R@uD1+?z@zv$fG0fxgNhVPOSApzdc~h7jNa}pQ&ruP40Q*1#Nkyj z$Wu2*74c()0~kZxRdk)}+w(>Hw*Y(ap(-7Siv(f}B>FmD&bk^+<9&HRlsZd_K}GYK z<}N5rV|#_-geW9Cnry-8mq}LON@nz=?~NTbNeREUPZILiV}vSQ1&sKlrTMO72^yZa z{BE4Z8CS^JP9nKQByYOa8!Kj>04wclHZX;5HKve{kXa58EWySJcZ$1t-#QZWK!=W! z!_hQAzh8w*1GBHiib;VINRtOyf#l~x5J^xNgZSNlaVR`0W~Bnah{D@Wf)Z$KBXi#0 z+M9jnEQLL3#d*IDOub=+D4}yXiJX*5MKp*C4e=DVIf^x}Qy>F#d~J@)p`|VS1C7Td zd}=dm7X;X1+Pn-v>~Iy%rS*STr=t+2JwCwXnz&7e>rI3Ej|NiZx4!j zd5?S&t|i|^#I;40{xS@QT_CH0Qu&z%0-oMQ;o5l1F5^&DKD&5w>=u-vV}gXmclSjf zohA7}DrtQ*{2t@jd&Y=RQpO*0ba3htgzLpIKp3v$%eaQQlk2XMH*eSlRx;4_tMJ&h zealh06ChnC=Vicm{UfE$O7zz+_&NJbpe}wlFp0EaLmzeW(?H-`4M{lU z$&;1J3s6udQ;kDhWNOn?nx-C{WpCwS>_O{9k$X`H#8M1{ki~!zpKF6P7aP#-9$!}S zyj(^&2}}4Bl>6-<)(l>%GTr16(#5@0^N}EEu6_7&^4>KN5n)J$7SY19WdpjX9zJpa z1-=Ym+AD$dCufL_X&dR@B|w2Pey#0zht^X;S04PVDK3T^beRO*Cjb)wE+dHpE&==a z4I@O^>&p$y@xAes=V4mHge`Vcl|_PrML77r3912UslqQiY*&gy0{PV_m||M*Fu`JY zna0-PWs_Nmj6#qE)F{TFWMRB4gyGnd{)jl{hL%Nz&QgfNUMI_=CHx(TwmadRuFbvz z#CZm+Lk3*-9dMZt-+}K(teNN#ysR%SeWBJ;4r8ov017DOD+6IbTJ=~Q9;z}a#B>?R z^Ri2@!(4p2;kLg*ru092$}P0Y8^$JiR5tW|TkX3Q@9?#s^kc@73v4lI%H5^dI-E5c zEJ_#yPc_0~IsOua_f|$^VgTp(aqbJyf#Z#R*jeW%jam6zKNk7OwQZ!oxb+v?QL_1y z;T9EiFDh_>R96+zCqW1jm6s{dpCd{r@C6JteQ{=RH*z@{nojVrXSLU&QdZrAaZc5> zci$k+$g}CVYY9K&uPh)#BoF@zpkfqAHX^Yc$l&IR5&B)`i~|(u&w|=F$)!Jv1)(F;I}!LPg;3hYW#)?pxuD zgP6f2qM{5uX)ReLaY;ye1`x7?sf>Ugw8sEzR|1Y z;F2jw%%j`1kGe#>!?gG^Ch+0@cn@SBaM_^+24e!mBLVoe2*z&^_2ts9Hq7{Q!{QP~ zlfXdk9MHDmg%~5TLTeMW-ndXH>}9qb4#i z@Nq3g?z{r86~@Z8-hto88C)z4eFTK!pJ&|!dumBY`>w?TCD<3ZA=I+qLMF}~+|pBo z+#IfIIs!h|a8O2&gFvuUmC3{YN*zdoy6Rkw+{eM^&A>L4^#f-q4UciQvVzgy=!6HZe$cFGWu-B5`ujvFgHyRKZ zRpkt4vd7HXmKWm5ZX`lS98g8cN4KH@OcafN`+(gMB*FR@GnZl_J4*isgHN4LFGoFtiC9%^b;jKjWR@P7*Uqp0yz)3dq6yg{y&MRjWdJ^2hfh}4un!E zmYYVJS;SdoL|aVIUbG^vVfQak`Nx?i;X-_bofH9#X3IokHCPooepv4A)6=NlclnVo ze_&P7yWPOfEyKWq@eSEgJII`+*h~pOD~`hT3{u@p!gJQ~Ra4pJa$a5%%t=NCiVUb8n(#A?Rs2Hc0v9_JNS0)(ozbTY#DL{IZRuRAcHHi zhqG-nPLv%A^DcW$3C?#sSoH~M$MsBK2}TP40U^rOaE7B;LOZHtLNC>#&W|SI;P(XS z4TdAdRhjs;nS+5lulw@1%{w1h8JLNz5Qa7iRgkh2an3E`r;iFz+Oh+|OCB+jt}Zw?M4|d(oLQtog(X~8wVV+p&Yjo6r9+nYzPHeW z0)>LKWkV$=w?8lLeEqdK)PIlVr-|6F7SBV19=18AYqvVbCuX^Cnk?^gOxIc1^d)Sy zWu@=yf}Vep3%mGcCcnA3XG9M98O}z{blzSk1m#j7QCot^V4Rb?^u??a39tEMr;y*E z0oq)$qA3F7YnWrlwVnx1c5Lg|OJaIS(0O3zEpxAi{qSPZxL(;uk6?G{YhGH z{w+k9cAQ!r*oHV|$(uIKZ!7IjIB>a}%B&|3eg!zAaL9t88-^&9H_(zgae`*`HxIvK z>}`0^HO%@HB>W*gXc_UBZ|z>{4CX*UZsK`R=PPC|{zCO!m{m&LFE z3&x*<#MG}a&6nw?wynV#b2K=;Ho=kSRih%nvIs%A6BPP=az;>IvA%hS6rqBRRnjM} zq3{Sv|m-S&EZXCmIeD5^2r0BT95d_WhLMwvUo9{?soi9Tz;}0Xl=`V>wD>B z?vc#HS^uq#hW!%i+b$<5KsZSSFPZ$%wFzZXETq72`ZCN#1vzl_@`!7>lk?|tE1cOC zDivFyffO!|t3XC_#J*vEapuG0Jc=z+*pRcM zxJ>lQ!V?c5xW2%iB2u#o#@hw2orLv|k(ssgtwMik*`rajD>x!zx=7^Crm@_Xx%IkD zHjbTC(Le2~f7ZRVbJ|HQ+3ZKLn#1e13&~CQSF@uhQ%@`g4>2t*F{=_(bt5^miQP!| zpwf)27E!lKP1NdTw5f6=t~ngQn3Hy1ia?VK>T3DAoTl(%rxQ<3AjEElq679Ar(=!w z5weyvuNFUOFGaf|83&xs6lG+HGEz=nwaMQ_1xG2SmrPxl;pAP& z_sy%Z1jY)e9v0!gJ4X)^Qo(hxfTk$A)ele{i}Vuv90T<}(&K<$tNT{1g*qOgaL^uA z+`~v>)shQuQC*+p3!^ZaizhCG-8hn*bZVO**fv@)e6YdNvEmO@t~FC2 zK;tL1p)NZX5C^|vA7@9zi9`OArP$a}dN&|9VkK8V5CgY6lp5CcZPns?-GBhA|zhJb{4#g2dN=S{P6;Gpp{Q7l# z(#2AQ{~5K(eG{vJk>Q^=Sf{N4F69QRo0t|E@&phz({ubY)WO(yNMT{kzxo@$UzLX6e#{QRSDN6- z^T;GzPnao-c0E#d6A#0G1<;WMKu$`vCNP*7%NJEr+ljQGD7&G=rZWH8x2k=UtG9T= z8BGH5GdUFc8@z0xfZ-JCD=OVtm4y?_2t=jMgz*r0#az}zg$|(%a4m*5WQo9hZEy|*x&t)X~ z*Xo`m@12hoi))_sq}cB`afWS7LIlJ>B4F5Vc*OS1j+e_KI`V&#RKvT!P+{{Pa z)yD#CRn`FV89B;a%DCsk(yI1l(92OW+Y2qufXz9)Pycz0D>da3y5MH>ne`UzAB*|A zeG#?Owh{mxvJS2j$%O;S#oV%m@((4SD(Y(R6Z^Um_w$)Yo<47Od>P7TuT!BDky9() z_LiTT5ugy4o6p>N7$8D9i>6+BP=f^nedJl`AU3UjV$xaCjhz0F>pmdMTA4s368Q&1 zi{Ph*LuA*W9E7;;0L~71{sZH4NXrJUXO&42CgIi?t(ZT7OX2S#D)pXeNi8%b56^iD zClY?D9Ax4b3J^V=eCYNbpNEEh#ndW8Zy*X^z&RVfw`myRj4^7BA!WHIo`Ur7IUrhgYCyr@3>kU3DCzW!w70?Vb`K@3 z!qOjoCInO-i{S-t2_{mAQ^R}t!Ek&Z4v*$SjKlj}pVl5zLi+skNjRLxo9dxTN4*Y=u^i7A3jZZonjK-t zRBRFQQ-#pUvQ_Iv*|u+{4~uyPY#8o6TyYq#+lnRl*6O>I)&J|(UMmYJ;{5zX;ou8n zj2&Vapn!44IMTc{Iiwt*VyeUk)8?bz!mxxlig!QB?dH6d~aBO#h$t*5}il`W+G84m|;o2smhn}s~9Ci zKpbnEiQUl($$W|a`&^Iys63;cg19pUk`xCbxh(ovto4=4#qo{7PBUr$2a|-!AI&00 z)-c-!*anLVwm_jk-8!7Q4zFJOYYl%P5ywQ`1{LDrMItyYzA1Asx|+B0sLT!kZYMv&_NZ5s3u4qRW9APD7my-7vxV!Vc@(M!xe_?ZG@xS}8w6!gYY*9>;7wm!HB- zQAv~mh@K&GrN&s!XD$k9y_Q_2Q!75~0^65zuk(=y_LPRKt>YYJed(((vBd(Gn#aL! z4WK& z7gR>&$44HqF$9lq!y1o&^Tuk5t2R#XAyKPubR;?X)HW&vs7gBt>0BixL`Ad)W39!Yrh~hq@c?=r z3YazI7ZEEBVAz8Jj8tCMdXms3;$=8P30l^Z0s($c9ZObxbkRu=LK;fq$feFrx3jyf zJ^nF+Gbe$}MsD)7BELM&R{cZwVk1@}WD**WbU5hggAH$IKcq6aTM+3Ds5eIL5y8OM zUE=&~x5C^(aZb>w&}uHVqCtNd_z#YI&Y?A_8O20uP- zb2zfEDt<*0Np~T;!Unl*Y*kLXy@$r2y4-63XEGDC{w;$9Q*IAHfD21&DJU%agE6Fq zG|OC7`KSm$S$$T_hIK}KSX1!vc6F4fc4hV9>7wU7ygyK?cG~QgqW?BPk{l7ZR%-EP zWC2I423M5p(dddf%=ImGh+-a1B=p6vlaPZ?j7BLFm;dJC1ox-r!?h5t-b#78^%7x2 z_L_;?!Hs34#isq3$SZbK>0JcwLI?k=l>HXmp2RKk5n(oJCAyQ5(}m116 zX8Ncy4fv|h(N2&bo=e~-tW1Ul5tsi{9=V(AvID}9kzlz1Ed*rXhXV(L0yn#!g_!q3m%sxjIB-iH2Xt}j< z#D{_4_J%nu0geb|FIZ)q4(+BgH=@T})*_^%3dXf0X-mA^Spy%2x+T1v#*hpFB4qsM zMiN^}Uhd56X$YL00$r)qF{|~l^ z5T<&|MQ+U#AncI(2H(!Bq`G3WGLvlo=;4Wp;=e)#a)4C?w)qVMte$pS7-QT|iyFo%1-9XC_fdI}B4ozX%9cy7JnXy)w z6^jOj-Y)HTa&zp^n5AR;2{O0*=$0%i zqCxf^eh1hfmSDl?5Fq3ksqvI3<2W`6#^?=71Q z`wS(q|n(w!)IGmV6R3wvM^&nON@5LlnUQ~N*pWs1Jc*Imm&vOTp)8DUrlyz zJ8_0eAU7sb4{_y|;tA#F;*$@MDG)1AGx#r(rdl{tjFv`EB*-vCah2mYaF>Fw`v{@5 zoIeU2`NUk|b2VSRUw%8@gzOf29v+E$kAG9OFJ)|J589mQD%4X&O(={8{vG-Oi_zGV zJYR3SFzTGPQujPO$HZv*0VEw(XI!eYMPj(^^4O+C`@|^Wj6Y&Rlo&<=Quu;>kmi#*x&lkNL8Q!sv zeS+$WfF_Y|9D$^I%Ox=9NL_!HzgKehx?eeKlJPSJTEeN?CsH~t3RAsIc%P*Ir zUnT#p!PVNR*Qt-<;P?shGo{GCiUAFEu;Wl&@k%7iEAkS45rrnO9VOjZJjzK#Ni_Q= zFWZZQc&G|rz?hkl-PzC`QqTne-ZH3x^9q$G_F5yObY$eyxal7I7*#;jap*(BWFt+L zOjzXMEkTx3_Jo2~(}ler$V_LW z*%0UyU|qv}Rq2-)f~3Hu=6V7&NH7#&_=JkU!>thpXEg3G1zM;&XB7B|%c>lX8rw^i zDF}+wby2T>SBQk>fBb&Usr*!>gzeL}8IEIFw$FgYsYB-h@^}5H&-J;nRwVHFv!Be6 z0;FeN?bJ+(ld>@wOo-4U)~AN;J$Yp_Odq0sgBH~99acl+TpR+@=*iEwk@K6>k6%Un zK(R#-l@LBeD&3{%I<)1#&9%^UwtW4`Duw3LyYoT@PS{>B9B;Xz5^r$oJ3$hrnnKE` zl-bNLI^jP2?Kb4QtCLu>9kHb4>M2ln5+o77*AhLV0{k_#wa1E~@KRIImiN24;24Z7 zh?V{CsNnmWipZzII>ZM`e_hEtpx1r+>Gz`Sd6nq=rjLx$ZU`37P3e>qeG;ls*U{6Yj)V@C--xAI^d<|Q|*V1Ff;b!e} z5lC5$TtD7^ggK#PMsxES61b_LxlanR(_5m+4I`czP8A`aoQKpM1KwE(k@L~q8dKh< zZc{SGdR`Woh%*h7?6MVdZabju@GPG{+_)%QmpfUzQS6-`)^E-}hQX(;{5B15WOMKC z6Bs9wHQ@IeA9s46w>k7~ZgPtON~=v)n6{x4GNPAnt^;CD{sfSfV1tz)4*$0S(t_!etzE z!>HhX*Kyy=E7~V27NdCpl=B!9vC7cloK*#;u%ed4Br~egy@zI!jFxLY<-}DUtn$>T z(I3q|6dy9a(y#w%-sEGWlG{%wFZstYfWsXZ#5?>QqC^=yY^xmZNG_W@qIV{o(Tm5% zlh8aE|ApFGP40hxi!el4?BYm?UV=rzuqV$i@EX3jOy|Pf{Di~aq|oUfl@(@5R%hp2 zJPaOBvUxk4jG1N>ie}Nmrd2D(J0>R12LdsmhE7N8v0f{t zc5LBAVmp5O;#Mtg#kN=bx4}OAUvZ+rKItA}`A&9S|f^ZH^_m0n? zzr*R1V{@#RPVKt$X2@wfzV9>+nW8{3OZV#xnb?{#YT^!0=coHzZp(R=e#p5NSl#+T zZ3S=s_p1+huVJ2@+E4k35^RSsVlnG*rW6_lqLD!TpUaM(cT?^m7~j1vXwuUb&)`AfDq+6$Mj-gkA;cgd#XoPQ>oW*RNwBJf~)-~ z4}5!nD~g+Xfac~Jb%|*;^dG{y|Rx z5>u z#2OMEK!KN_GTRhhQkkgtI}*-#M{<=SBDzMs#r_<9_(-W&_4_(^;-Hkw=7smF}%S6V{bi#;F4R6k)-YK!I<9y zVW$|)0SZNM<~75evKZo7?C6ah5SgE{Q{=-J8?VsKLJ*nn(Sc@_9n4>A)qdZzA$;3>9R04;ThWX?t-9ESXBcL==w-~c~?7-=6-gk zhR<$y+r+|^zCp*=T?$9V?*Ld)M`+_Ci>AN3l-?E#%Ufaiaw_LVflK)swZ&o1q|uTO z_3<**x6*@-K6@uW_S8k*&}v_&1EtNi4H4movvn1`ilx79OO-9}{e3-mbkZS}mzkU@ zoFmkdD7hhi*%hlJnai%BcIYQ_w*AqjM^&B@6d?Chnb5TsMrsX08^X65hE6PMy8q_z zzJMDc=U(pebIi(`&JNEN?pWHUX#l@h_|EUCvfQNxy|eWIFX*gBB)u0ux5*c%JH1Ly zApO(p23}+vwd;f}%k+3x_GU)$qP|jN;ennX9ii`yp+tpZ@T!n?a~<^l4$<3qc0FZ> zda2th@4}7W=R9p2S8X{tz<6Q`iCg6g)^{d4n1y-o&syr>DY^ghT(33i+?7ADd-kK| z_H?92`~K|D0l^PXnXE|mcrrEkWum^e>}*S)ZmoUv)Q@EfbxZS< zwky{v>8@0D(AknUR(7nzz_YwaaEn}Jcc$^EkKyvM1z(wx9iIEo``p^A1nh9bWWSpC z>glCl?q6A3(|I5y=xvf$>zF!k`L|>lxQ8YWL-^yWZh2Jl48FI2u-~)lE)aK~&%fKD zav|jBr}cSBffe09XDkPP{f=n$>c~;|eCoAror0C_kL(@lQSzY{JdDg|B)a;E-J)>o zjh14KVAaN{cpV!pwrA4VkKaaN?6atnzh#fa8;uoTY4&(}@H^+4LlS0nJQu3p-26l0 zlSV}OGP=TsNkgl0pMHJxwRE&rbMcd*A424sp!)9Pfox8tS=o9LtKlEq` zAhFw<#Be)uS%0%4NkwwgTffr67bR*>v~X5e{j;!NwkiANgZp?!t~93H!p&`!|KZo$Kq=Wd*#tle+r|2x_kfwv4po zgSB-^y@CzrPx4f6Aht9<`tOont!;%u7>lMmf2B$yJ?Yd|3Z^@^%S>U{?B{t;H&p4y zTTjH82-@W zJ?U{tBaKt5h5E{St0#`Y<(qPFO3W)n@$ci4|4#*ZCZJV!K!tEV75zV(MFqj>5jx|n zykZ|m?9d=CsBMdEP~lB3b|PSR|L>=s1vV??ap$Svb<*Za?8oK4r!|l}CfE5?kHl*F zj1iBOlfw58f!)>rc{!nC9nC|<`X-+mfl1iNzuy;n-`nqXocy(IEo^m$cjhO)2Yi70 zHtp2U=PhlHhu8md1l@H*lO}eS=}}s7CSecd2W4Qn=IJUluAFAJa14cW`S@dvT!oC! z6uY{vWLuJ}HG12N%s=?oGZp37FuSq$-cZ*4FN^d!2}Zda^_%t zn`%iMbE`tkej$6tYA)FKNi{;X#u;aZw!zz2xld>9~j#-ivu-Y2WnA$C`^~H-DcnSQpb}Q!!HH+39#p zmYTf|*nD3S;thX2sXQF7|1hBcL*6RikBqA5pU2`eH#*rHbXPAzC)1{fyABw3M|Zsp z`td+g7D9}~W}V(F^ys9?c|KJtwj7_#`TPKsqKLh(XqV@ef~vE#HC)*?9lv*?w3`ioF$cq9p`U`Cn^S?%CtW3q(5FzF~I}yGD8gvo{*~r zoOJ9KqIa8>c`SEP*v<=!=N{Sa?Q1Uiu-|Th9||!vr4n`#hy~#?-{l2PV+W(Qb#6Y= zRevlgx3kQ-J8fSw_WPYB28qVZ_c&3raK2uxXJO)=mdJSwZZ3_;@W1mUU>Six*}_q8 zucF`6I_VJINS%%Cd>d94d^Tw48QGmOx(MuxJaTSF-_i&ywXvJp5wW{nhw&RWUm>Xtp@y6`zeXI`i?Y`T0se{olJ9C#vMn4woCeY^JfbBNryg zKx?w45igrBZkC5L?hWYSsYK!Q&?!7R(-Ja*NFduccNTguV8=>Ob!@uvr(+kO24H3>?qU#QetV*`q48uh)u&>1u zAZ&CHqWB^Gw=nS}g?u-NLNo^yQz>Eh>z|Uwi;9wpVr`seKJ|fJUhy8phd@T@T-|Aj@r`{$;5U9erbe68ewI^-$ferh480J7En~H+hFDL!( zhBqUb=!gK7jWbk;eHe4^@wU|I{FnDEqw0=*4!?YC+CKe(qymU5ba0uGaqX=eA-{rlevV?G#Ppk$D4~KW7R=F|Eu}cjMxB=mV9> zKH^H7VNVh7^VvofFCyRL_=qw(SOhugTWnF(Kgtk3cx~Sh}r6E;U0pf!a>? zR6Th7m>e&6`UuUdfBkcDzu=BFeKOFo2CZUrP0n#Si|hM!#dS$6&6sXl$7wXJ$i5}A zaxG+|qpw16x@a`5;iI$s--%zT^AkOpU;Ro08-mEh`uH~>eO`~?$E|U?l(l4~Qt6MZ zF&^+NRwFSp)bmOo{eus;+b_Mw_f}bV^ZBMlup3!>nwv2hFqAsB+*%?}bOOP=caFR# z4`coJH3yHCXdGIkth3_lx{fVP`}H~m36D3XGfbb97&FQa;|haoB+E4 zsWS~F7q>OzQLMEAE}MP%hhnLLLIJy;?7iThgTYQ})PbD;UUCUbz-XxSEZXV4VW`wm z@KVeQYLpV99B1{($p>>t%pCcln+VmOcMX)*X^UMshQ<@<1w2~tv)N9rnEY#LO)W! z@{OAAW~cq?RqDb9?k5#CASUqkg{V^ShE*85lb<)bZ!cUQ;l5?bGOT%GV3ab>{cHfh9h^om^2A`V_={P!E z@~%ir^}aP*saL#7rs<4{M%zeM;*Q%WG*QB|9NR-e6M^rFII*q@#%xLAc4J6-C#uC_E_XZsd1B%Qvxis#=-@u67r z^n78=#V%fy9kj8d_@;}aLHeMw?ufPuUtfFmy%T9BY?;=YXjF|#Ul&F1FYL;B5ZGPm z{ZsQeaC|T=5p?Wt(}%|g-ywc>qMdsieaBM*N0N$TUW1iDz3+`?$poZysEqV-zV)tyRIPsSHJwvB_2>Qg)LN3XdI}pF6VAigVIu=f6D&f z1-2*z%6`Z^xrI>~zPWd4fC``Yjr;-!sdSSJ>+I}9dTa5{qrb~)ey2$(C%n1lEguxq^~2r);2hKZ{HrX z^gXRYtuqB*`DT(Fj}@INYafr$i9KF>sx>9urq#Fh)ZFfp{=ltw9JblCWfh_t-h3^{ zL9a}*ysb0%@QvNUO<7HPnGOG*ac`WtH)A+ko474`Pyd13qWudcql@qP#rOU5+@Ur1 zbBc$6?7mz#xvWN}rdD$~BIeY{TeN330_@4QrNVEj{qo+zIi%LdCHinea$Ve6~K2!Q4HM;(6CyVFB{ z(1)Jyc|7gZS~R6-*%6eWVVxJRvt|{vTza%!bJ1l%*!6#3<7$$*cJtrYJ--Rn&Zf>M zF}9b#^sjDBM$v-9TLtB13OU^&Xyvg~(+jxkK z`f{Iy38$=mbE^j0W<@TSz%%pzZzmZ9N^ec)`}EJ-boKwGwX^?ATKv!3n#3S+PXD^* z^|iais^CgzDn{f`_;^Ns}sNVudeww{afxob|w}Dzt7j2U;W%_#BePW z!*Re32t^YgF)>`9aQakU%f_#lB&tNES8CtZIGuUV?AN5<^KGGKmF4_9zGBw1wd_|v vXQwi(x!iQ>%&AveuQ$|cPp_OZx9r#dm*plKo=JY0#sCDKu6{1-oD!M<%#K&b literal 18642 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 Date: Fri, 6 May 2016 12:26:41 +0200 Subject: [PATCH 088/322] Gave color changing more freedom. Bump API version to 10 --- .../actuallyadditions/api/ActuallyAdditionsAPI.java | 2 +- .../api/recipe/ColorLensChangerByDyeMeta.java | 5 ++++- .../api/recipe/IColorLensChanger.java | 12 +++++++++--- .../actuallyadditions/mod/items/lens/LensColor.java | 8 ++++---- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 986594a0d..dec6a9c5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -27,7 +27,7 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "9"; + public static final String API_VERSION = "10"; public static List crusherRecipes = new ArrayList(); public static List ballOfFurReturnItems = new ArrayList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java index 18849a55e..02831cfdb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java @@ -1,6 +1,9 @@ package de.ellpeck.actuallyadditions.api.recipe; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; /** * Changes an item's color by changing its metadata. @@ -9,7 +12,7 @@ import net.minecraft.item.ItemStack; public class ColorLensChangerByDyeMeta implements IColorLensChanger{ @Override - public ItemStack modifyItem(ItemStack stack){ + public ItemStack modifyItem(ItemStack stack, IBlockState hitBlockState, BlockPos hitBlock, IAtomicReconstructor tile){ ItemStack newStack = stack.copy(); int meta = newStack.getItemDamage(); if(meta >= 15){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java index 2edc0f386..e30de60e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java @@ -1,12 +1,15 @@ package de.ellpeck.actuallyadditions.api.recipe; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; /** * Used for the Atomic Reconstructor's Color Lens changing algorythm. * When registering a new item to be changed, it needs an IColorLensChanger which * is the method with which the item will be changed. - * + *

* See ColorLensChangerByDyeMeta for reference. */ public interface IColorLensChanger{ @@ -16,9 +19,12 @@ public interface IColorLensChanger{ * Will only be called with stacks containing items that are registered with * this IColorLensChanger. * - * @param stack the stack to modify + * @param stack the stack to modify + * @param hitBlockState The state of the block that was hit + * @param hitBlock the block that was hit (usually air, or the block that is also in the stack) + * @param tile the Reconstructor doing the color conversion * @return the modified stack. Please make sure to return a modified COPY of the input stack. */ - ItemStack modifyItem(ItemStack stack); + ItemStack modifyItem(ItemStack stack, IBlockState hitBlockState, BlockPos hitBlock, IAtomicReconstructor tile); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 2aa839191..a6ed85598 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -58,7 +58,7 @@ public class LensColor extends Lens{ if(hitBlock != null){ if(tile.getEnergy() >= ENERGY_USE){ int meta = PosUtil.getMetadata(hitBlock, tile.getWorldObject()); - ItemStack returnStack = this.tryConvert(new ItemStack(PosUtil.getBlock(hitBlock, tile.getWorldObject()), 1, meta)); + ItemStack returnStack = this.tryConvert(new ItemStack(PosUtil.getBlock(hitBlock, tile.getWorldObject()), 1, meta), hitState, hitBlock, tile); if(returnStack != null && returnStack.getItem() instanceof ItemBlock){ PosUtil.setBlock(hitBlock, tile.getWorldObject(), Block.getBlockFromItem(returnStack.getItem()), returnStack.getItemDamage(), 2); @@ -69,7 +69,7 @@ public class LensColor extends Lens{ ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), hitBlock.getX()+1, hitBlock.getY()+1, hitBlock.getZ()+1)); for(EntityItem item : items){ if(!item.isDead && item.getEntityItem() != null && tile.getEnergy() >= ENERGY_USE){ - ItemStack newStack = this.tryConvert(item.getEntityItem()); + ItemStack newStack = this.tryConvert(item.getEntityItem(), hitState, hitBlock, tile); if(newStack != null){ item.setDead(); @@ -84,13 +84,13 @@ public class LensColor extends Lens{ return false; } - private ItemStack tryConvert(ItemStack stack){ + private ItemStack tryConvert(ItemStack stack, IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ if(stack != null){ Item item = stack.getItem(); if(item != null){ for(Map.Entry changer : ActuallyAdditionsAPI.reconstructorLensColorChangers.entrySet()){ if(item == changer.getKey()){ - return changer.getValue().modifyItem(stack); + return changer.getValue().modifyItem(stack, hitState, hitBlock, tile); } } } From 3f4f87f273ad3eac49980817a563fd40bd62f97a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 14:19:25 +0200 Subject: [PATCH 089/322] Added a method to get the API Version as an integer to the API --- .../api/ActuallyAdditionsAPI.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index dec6a9c5e..d342e758b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -122,7 +122,7 @@ public class ActuallyAdditionsAPI{ * @param chance The chance (this is from WeightedRandom.Item) */ public static void addBallOfFurReturnItem(ItemStack stack, int chance){ - ActuallyAdditionsAPI.ballOfFurReturnItems.add(new BallOfFurReturn(stack, chance)); + ballOfFurReturnItems.add(new BallOfFurReturn(stack, chance)); } /** @@ -134,7 +134,7 @@ public class ActuallyAdditionsAPI{ * @param maxAmount The maximum stacksize of the returned stack */ public static void addTreasureChestLoot(ItemStack stack, int chance, int minAmount, int maxAmount){ - ActuallyAdditionsAPI.treasureChestLoot.add(new TreasureChestLoot(stack, chance, minAmount, maxAmount)); + treasureChestLoot.add(new TreasureChestLoot(stack, chance, minAmount, maxAmount)); } /** @@ -166,7 +166,7 @@ public class ActuallyAdditionsAPI{ * The way it is modified is an instance of IColorLensChanger. When modifying the item, * its modifyItem() method will be called with a stack containing the item. * - * @param item The item (or block's item) to add + * @param item The item (or block's item) to add * @param changer The change mechanism */ public static void addReconstructorLensColorChangeItem(Item item, IColorLensChanger changer){ @@ -200,4 +200,15 @@ public class ActuallyAdditionsAPI{ public static void addPageWithItemStackData(BookletPage page){ bookletPagesWithItemStackData.add(page); } + + /** + * This can be used for checking if the API is a certain version for + * compatibility's sake. + * Will always return an integer equivalent to the text in API_VERSION + * + * @return The API's version as an integer + */ + public static int getAPIVersionInt(){ + return Integer.parseInt(API_VERSION); + } } From 1c0fb786b272c7bc794f5b97894418e767c7b875 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 14:50:15 +0200 Subject: [PATCH 090/322] Update JEI and add some new features like seeing the items the recipe works with at the top --- build.gradle | 2 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 30 +++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index cd541ccb9..a20a28273 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ dependencies { //compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" - deobfCompile "mezz.jei:jei_1.9:3.2.11.186" + deobfCompile "mezz.jei:jei_1.9:3.3.3.197" } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index 8c2ef3b91..a4a60486f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.jei; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.inventory.ContainerCrafter; import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiCoffeeMachine; import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiFurnaceDouble; import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiGrinder; @@ -24,10 +25,14 @@ import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherRecipeHandler; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeHandler; +import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; import de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe; +import de.ellpeck.actuallyadditions.mod.nei.NEIReconstructorRecipe; import de.ellpeck.actuallyadditions.mod.util.Util; import mezz.jei.api.*; import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import mezz.jei.api.recipe.transfer.IRecipeTransferRegistry; +import net.minecraft.inventory.ContainerWorkbench; import net.minecraft.item.ItemStack; @JEIPlugin @@ -35,11 +40,13 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ @Override public void register(IModRegistry registry){ + IJeiHelpers helpers = registry.getJeiHelpers(); + registry.addRecipeCategories( - new BookletRecipeCategory(registry.getJeiHelpers().getGuiHelper()), - new CoffeeMachineRecipeCategory(registry.getJeiHelpers().getGuiHelper()), - new CrusherRecipeCategory(registry.getJeiHelpers().getGuiHelper()), - new ReconstructorRecipeCategory(registry.getJeiHelpers().getGuiHelper()) + new BookletRecipeCategory(helpers.getGuiHelper()), + new CoffeeMachineRecipeCategory(helpers.getGuiHelper()), + new CrusherRecipeCategory(helpers.getGuiHelper()), + new ReconstructorRecipeCategory(helpers.getGuiHelper()) ); registry.addRecipeHandlers( @@ -59,7 +66,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.addRecipeClickArea(GuiGrinder.GuiGrinderDouble.class, 51, 40, 74, 22, CrusherRecipeCategory.NAME); registry.addRecipeClickArea(GuiFurnaceDouble.class, 51, 40, 74, 22, VanillaRecipeCategoryUid.SMELTING); - INbtIgnoreList ignoreList = registry.getJeiHelpers().getNbtIgnoreList(); + INbtIgnoreList ignoreList = helpers.getNbtIgnoreList(); ignoreList.ignoreNbtTagNames(InitItems.itemDrill, "Energy"); ignoreList.ignoreNbtTagNames(InitItems.itemTeleStaff, "Energy"); ignoreList.ignoreNbtTagNames(InitItems.itemGrowthRing, "Energy"); @@ -71,13 +78,24 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ ignoreList.ignoreNbtTagNames(InitItems.itemBatteryQuadruple, "Energy"); ignoreList.ignoreNbtTagNames(InitItems.itemBatteryQuintuple, "Energy"); - IItemBlacklist blacklist = registry.getJeiHelpers().getItemBlacklist(); + IItemBlacklist blacklist = helpers.getItemBlacklist(); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockRice)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockCanola)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockFlax)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockCoffee)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockWildPlant, 1, Util.WILDCARD)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockColoredLampOn, 1, Util.WILDCARD)); + + IRecipeTransferRegistry transfer = registry.getRecipeTransferRegistry(); + transfer.addRecipeTransferHandler(ContainerCrafter.class, VanillaRecipeCategoryUid.CRAFTING, 1, 9, 10, 36); + + registry.addRecipeCategoryCraftingItem(new ItemStack(InitItems.itemCrafterOnAStick), VanillaRecipeCategoryUid.CRAFTING); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockFurnaceDouble), VanillaRecipeCategoryUid.SMELTING); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockGrinder), CrusherRecipeCategory.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockGrinderDouble), CrusherRecipeCategory.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockCoffeeMachine), NEICoffeeMachineRecipe.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockAtomicReconstructor), NEIReconstructorRecipe.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitItems.itemBooklet), NEIBookletRecipe.NAME); } @Override From f21fa7e317e1fb34f89ae83b8aa94b4c109a106d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 16:11:26 +0200 Subject: [PATCH 091/322] Added Reconstruction Module as Rarmor integration --- build.gradle | 1 + .../mod/ActuallyAdditions.java | 3 +- .../mod/creative/CreativeTab.java | 9 +- .../mod/items/InitItems.java | 7 + .../items/ItemRarmorModuleReconstructor.java | 124 ++++++++++++++++++ .../mod/items/base/ItemBase.java | 2 - .../mod/network/PacketParticle.java | 46 +++---- .../tile/TileEntityAtomicReconstructor.java | 10 +- .../assets/actuallyadditions/lang/en_US.lang | 1 + .../item/itemRarmorModuleReconstructor.json | 6 + .../items/itemRarmorModuleReconstructor.png | Bin 0 -> 463 bytes 11 files changed, 175 insertions(+), 34 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemRarmorModuleReconstructor.png diff --git a/build.gradle b/build.gradle index a20a28273..7fc4ce787 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,7 @@ dependencies { //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" deobfCompile "mezz.jei:jei_1.9:3.3.3.197" + compile file "lib/Rarmor.jar" } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index ca3b1340d..b43b14750 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -128,9 +128,8 @@ public class ActuallyAdditions{ @EventHandler public void missingMapping(FMLMissingMappingsEvent event){ for(FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()){ - //Ignore removal of foreign paxels if(mapping.name != null && mapping.name.toLowerCase(Locale.ROOT).startsWith(ModUtil.MOD_ID+":")){ - if(mapping.name.contains("paxel") || mapping.name.contains("itemSpecial") || mapping.name.contains("blockBookStand")){ + if(mapping.name.contains("paxel") || mapping.name.contains("itemSpecial") || mapping.name.contains("blockBookStand") || mapping.name.contains("Rarmor")){ mapping.ignore(); ModUtil.LOGGER.info("Missing Mapping "+mapping.name+" is getting ignored. This is intentional."); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index bbe32fa5e..457e5c375 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -191,6 +191,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemPaxelCrystalBlack); this.add(InitItems.itemPaxelCrystalGreen); this.add(InitItems.itemPaxelCrystalWhite); + this.add(InitItems.itemRarmorModuleReconstructor); InitForeignPaxels.addToCreativeTab(); this.add(InitBlocks.blockCrystal); @@ -296,10 +297,14 @@ public class CreativeTab extends CreativeTabs{ } public void add(Item item){ - item.getSubItems(item, instance, this.list); + if(item != null){ + item.getSubItems(item, instance, this.list); + } } public void add(Block block){ - block.getSubBlocks(new ItemStack(block).getItem(), instance, this.list); + if(block != null){ + block.getSubBlocks(new ItemStack(block).getItem(), instance, this.list); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 1a58b8100..2967ad146 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -29,6 +29,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fml.common.Loader; public class InitItems{ @@ -205,6 +206,8 @@ public class InitItems{ public static Item itemBootsCrystalWhite; public static Item itemPaxelCrystalWhite; + public static Item itemRarmorModuleReconstructor; + public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); @@ -366,5 +369,9 @@ public class InitItems{ itemPantsCrystalWhite = new ItemArmorAA("itemPantsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemBootsCrystalWhite = new ItemArmorAA("itemBootsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemPaxelCrystalWhite = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemPaxelCrystalWhite", Util.CRYSTAL_WHITE_RARITY, 14606302); + + if(Loader.isModLoaded("rarmor")){ + itemRarmorModuleReconstructor = new ItemRarmorModuleReconstructor("itemRarmorModuleReconstructor"); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java new file mode 100644 index 000000000..93fbe876a --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -0,0 +1,124 @@ +package de.ellpeck.actuallyadditions.mod.items; + +import cofh.api.energy.IEnergyContainerItem; +import de.canitzp.rarmor.api.InventoryBase; +import de.canitzp.rarmor.api.modules.IRarmorModule; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.Optional; + +import java.util.ArrayList; +import java.util.List; + +@Optional.Interface(modid = "rarmor", iface = "de.canitzp.rarmor.api.modules.IRarmorModule") +public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorModule{ + + public ItemRarmorModuleReconstructor(String name){ + super(name); + + this.setMaxStackSize(1); + } + + @Override + public String getUniqueName(){ + return this.getRegistryName().toString(); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } + + @Override + public ModuleType getModuleType(){ + return ModuleType.ACTIVE; + } + + @Override + public List getGuiHelp(){ + List text = new ArrayList(); + text.add("Read more about this in the"); + text.add("Actually Additions Manual!"); + return text; + } + + @Override + public void onModuleTickInArmor(World world, EntityPlayer player, ItemStack armorChestplate, ItemStack module, InventoryBase inventory){ + if(!world.isRemote && player.isSneaking() && player.onGround){ + if(world.getTotalWorldTime()%50 == 0){ + RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, Lenses.LENS_NONE.getDistance()); + if(result != null){ + BlockPos pos = result.getBlockPos(); + if(pos != null){ + IAtomicReconstructor fake = this.getFakeReconstructor(world, player, armorChestplate); + + int energyUse = TileEntityAtomicReconstructor.ENERGY_USE*2; + if(fake.getEnergy() >= energyUse){ + Lenses.LENS_NONE.invoke(world.getBlockState(pos), pos, fake); + + EnumFacing hit = result.sideHit; + TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), Lenses.LENS_NONE); + + fake.extractEnergy(energyUse); + } + } + } + } + } + } + + private IAtomicReconstructor getFakeReconstructor(final World world, final EntityPlayer player, final ItemStack armorChestplate){ + return new IAtomicReconstructor(){ + @Override + public int getX(){ + return MathHelper.floor_double(player.posX); + } + + @Override + public int getY(){ + return MathHelper.floor_double(player.posY); + } + + @Override + public int getZ(){ + return MathHelper.floor_double(player.posZ); + } + + @Override + public World getWorldObject(){ + return world; + } + + @Override + public void extractEnergy(int amount){ + Item item = armorChestplate.getItem(); + if(item instanceof IEnergyContainerItem){ + ((IEnergyContainerItem)item).extractEnergy(armorChestplate, amount, false); + } + } + + @Override + public int getEnergy(){ + Item item = armorChestplate.getItem(); + if(item instanceof IEnergyContainerItem){ + return ((IEnergyContainerItem)item).getEnergyStored(armorChestplate); + } + else{ + return 0; + } + } + }; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index bb54efc9d..6e40d567d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -12,11 +12,9 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class ItemBase extends Item{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index a31c86df7..84353e695 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -23,12 +23,12 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class PacketParticle implements IMessage{ - private int startX; - private int startY; - private int startZ; - private int endX; - private int endY; - private int endZ; + private double startX; + private double startY; + private double startZ; + private double endX; + private double endY; + private double endZ; private float[] color; private int particleAmount; private float particleSize; @@ -38,7 +38,7 @@ public class PacketParticle implements IMessage{ } - public PacketParticle(int startX, int startY, int startZ, int endX, int endY, int endZ, float[] color, int particleAmount, float particleSize){ + public PacketParticle(double startX, double startY, double startZ, double endX, double endY, double endZ, float[] color, int particleAmount, float particleSize){ this.startX = startX; this.startY = startY; this.startZ = startZ; @@ -51,13 +51,13 @@ public class PacketParticle implements IMessage{ } @SideOnly(Side.CLIENT) - public static void renderParticlesFromAToB(int startX, int startY, int startZ, int endX, int endY, int endZ, int particleAmount, float particleSize, float[] color, float ageMultiplier){ + public static void renderParticlesFromAToB(double startX, double startY, double startZ, double endX, double endY, double endZ, int particleAmount, float particleSize, float[] color, float ageMultiplier){ World world = Minecraft.getMinecraft().theWorld; if(Minecraft.getMinecraft().thePlayer.getDistance(startX, startY, startZ) <= 64 || Minecraft.getMinecraft().thePlayer.getDistance(endX, endY, endZ) <= 64){ - int difX = startX-endX; - int difY = startY-endY; - int difZ = startZ-endZ; + double difX = startX-endX; + double difY = startY-endY; + double difZ = startZ-endZ; double distance = new Vec3d(startX, startY, startZ).distanceTo(new Vec3d(endX, endY, endZ)); for(int times = 0; times < particleAmount/2; times++){ @@ -71,12 +71,12 @@ public class PacketParticle implements IMessage{ @Override public void fromBytes(ByteBuf buf){ - this.startX = buf.readInt(); - this.startY = buf.readInt(); - this.startZ = buf.readInt(); - this.endX = buf.readInt(); - this.endY = buf.readInt(); - this.endZ = buf.readInt(); + this.startX = buf.readDouble(); + this.startY = buf.readDouble(); + this.startZ = buf.readDouble(); + this.endX = buf.readDouble(); + this.endY = buf.readDouble(); + this.endZ = buf.readDouble(); this.particleAmount = buf.readInt(); this.particleSize = buf.readFloat(); @@ -88,12 +88,12 @@ public class PacketParticle implements IMessage{ @Override public void toBytes(ByteBuf buf){ - buf.writeInt(this.startX); - buf.writeInt(this.startY); - buf.writeInt(this.startZ); - buf.writeInt(this.endX); - buf.writeInt(this.endY); - buf.writeInt(this.endZ); + buf.writeDouble(this.startX); + buf.writeDouble(this.startY); + buf.writeDouble(this.startZ); + buf.writeDouble(this.endX); + buf.writeDouble(this.endY); + buf.writeDouble(this.endZ); buf.writeInt(this.particleAmount); buf.writeFloat(this.particleSize); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 6af2afbec..f9f655bb9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -103,11 +103,11 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple BlockPos hitBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); if(currentLens.invoke(this.worldObj.getBlockState(hitBlock), hitBlock, this)){ - this.shootLaser(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); + shootLaser(this.worldObj, this.getX(), this.getY(), this.getZ(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); break; } else if(i >= distance-1){ - this.shootLaser(hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); + shootLaser(this.worldObj, this.getX(), this.getY(), this.getZ(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); } } } @@ -122,11 +122,11 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return this.counter >= 500 ? Lenses.LENS_DISRUPTION : Lenses.LENS_NONE; } - private void shootLaser(int endX, int endY, int endZ, Lens currentLens){ + public static void shootLaser(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, Lens currentLens){ if(!ConfigValues.lessSound){ - this.worldObj.playSound(null, this.getX(), this.getY(), this.getZ(), SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); + world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getX(), this.getY(), this.getZ(), endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getX(), this.getY(), this.getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 64)); } @Override diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 7cfde7be5..c256d6045 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -332,6 +332,7 @@ item.actuallyadditions.itemChestQuartz.name=Black Quartz Chestplate item.actuallyadditions.itemPantsQuartz.name=Black Quartz Pants item.actuallyadditions.itemBootsQuartz.name=Black Quartz Boots item.actuallyadditions.itemBooklet.name=Actually Additions Manual +item.actuallyadditions.itemRarmorModuleReconstructor.name=Reconstruction Module item.actuallyadditions.itemLaserWrench.name=Laser Wrench item.actuallyadditions.itemChestToCrateUpgrade.name=Chest To Storage Crate Upgrade item.actuallyadditions.itemMiscDrillCore.name=Drill Core diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json b/src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json new file mode 100644 index 000000000..117a5e75c --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemRarmorModuleReconstructor.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemRarmorModuleReconstructor" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemRarmorModuleReconstructor.png b/src/main/resources/assets/actuallyadditions/textures/items/itemRarmorModuleReconstructor.png new file mode 100644 index 0000000000000000000000000000000000000000..6044c6497505b10a05d6b389c42cc32504631037 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXkiEpy*OmPNBeSTg(fOY14L~7@64!{5;QX|b z^2DN4hJwV*yb`^<)Di^~Jp(<<9OF7apgp>tE{-7<{!1tOX0Z}XS)wt literal 0 HcmV?d00001 From 3e6a18729d685706374ac2bc998decf51c359217 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 16:29:49 +0200 Subject: [PATCH 092/322] Reconstructor module recipe and doc --- .../actuallyadditions/api/ActuallyAdditionsAPI.java | 3 ++- .../actuallyadditions/mod/booklet/InitBooklet.java | 7 +++++++ .../mod/config/values/ConfigCrafting.java | 1 + .../actuallyadditions/mod/crafting/ItemCrafting.java | 12 ++++++++++++ .../actuallyadditions/mod/creative/CreativeTab.java | 2 +- .../assets/actuallyadditions/lang/en_US.lang | 6 +++++- 6 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index d342e758b..d777424fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -27,7 +27,7 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "10"; + public static final String API_VERSION = "11"; public static List crusherRecipes = new ArrayList(); public static List ballOfFurReturnItems = new ArrayList(); @@ -47,6 +47,7 @@ public class ActuallyAdditionsAPI{ public static IBookletEntry entryItemsNonRF; public static IBookletEntry entryItemsRF; public static IBookletEntry entryMisc; + public static IBookletEntry entryCrossover; public static IBookletEntry allAndSearch; /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 0c7524dba..cb4655401 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -33,6 +33,7 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fml.common.Loader; import java.util.ArrayList; @@ -48,6 +49,7 @@ public class InitBooklet{ ActuallyAdditionsAPI.entryItemsNonRF = new BookletEntry("itemsNoRF"); ActuallyAdditionsAPI.entryItemsRF = new BookletEntry("itemsRF").setSpecial(); ActuallyAdditionsAPI.entryMisc = new BookletEntry("misc"); + ActuallyAdditionsAPI.entryCrossover = new BookletEntry("crossover"); ActuallyAdditionsAPI.allAndSearch = new BookletEntryAllSearch("allAndSearch").setSpecial(); } @@ -143,5 +145,10 @@ public class InitBooklet{ new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing)); new BookletChapter("waterRemovalRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemWaterRemovalRing), new PageCrafting(1, ItemCrafting.recipeWaterRing)); new BookletChapter("batteries", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemBatteryTriple), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeBattery).setNoText(), new PageCrafting(3, ItemCrafting.recipeBatteryDouble).setNoText(), new PageCrafting(4, ItemCrafting.recipeBatteryTriple).setNoText(), new PageCrafting(5, ItemCrafting.recipeBatteryQuadruple).setNoText(), new PageCrafting(6, ItemCrafting.recipeBatteryQuintuple).setNoText()); + + //Crossover + if(Loader.isModLoaded("rarmor")){ + new BookletChapter("rarmorModuleReconstructor", ActuallyAdditionsAPI.entryCrossover, new ItemStack(InitItems.itemRarmorModuleReconstructor), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeRarmorModuleReconstructor).setNoText()); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index b5aaa8e31..dda70f30a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -61,6 +61,7 @@ public enum ConfigCrafting{ KNIFE("Knife", ConfigCategories.ITEMS_CRAFTING), STICK_CRAFTER("Crafting Table On A Stick", ConfigCategories.ITEMS_CRAFTING), MASHED_FOOD("Mashed Food", ConfigCategories.ITEMS_CRAFTING), + RARMOR_RECONSTRUCTOR_MODULE("Rarmor Reconstructor Module", ConfigCategories.ITEMS_CRAFTING), RING_SPEED("Speed Ring", ConfigCategories.POTION_RING_CRAFTING), RING_HASTE("Haste Ring", ConfigCategories.POTION_RING_CRAFTING), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 9e3f733ea..27c63cff4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.*; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.IGrowable; @@ -27,6 +28,7 @@ import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.common.IPlantable; +import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapedOreRecipe; @@ -81,6 +83,7 @@ public class ItemCrafting{ public static IRecipe recipeLens; public static IRecipe recipeCrateKeeper; public static IRecipe recipeEnderStar; + public static IRecipe recipeRarmorModuleReconstructor; public static void init(){ @@ -447,6 +450,15 @@ public class ItemCrafting{ new ItemStack(Items.SIGN))); } + //Rarmor Reconstructor Module + if(Loader.isModLoaded("rarmor") && ConfigCrafting.RARMOR_RECONSTRUCTOR_MODULE.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemRarmorModuleReconstructor), + " G ", "GSG", " G ", + 'G', ItemUtil.getItemFromName("rarmor:ribbonCable"), + 'S', new ItemStack(InitBlocks.blockAtomicReconstructor))); + recipeRarmorModuleReconstructor = RecipeUtil.lastIRecipe(); + } + //Tiny Coal GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_COAL.ordinal()), new ItemStack(Items.COAL)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 457e5c375..1a77d0b76 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -176,6 +176,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemSolidifiedExperience); this.add(InitItems.itemLeafBlower); this.add(InitItems.itemLeafBlowerAdvanced); + this.add(InitItems.itemRarmorModuleReconstructor); this.add(InitItems.woodenPaxel); this.add(InitItems.stonePaxel); @@ -191,7 +192,6 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemPaxelCrystalBlack); this.add(InitItems.itemPaxelCrystalGreen); this.add(InitItems.itemPaxelCrystalWhite); - this.add(InitItems.itemRarmorModuleReconstructor); InitForeignPaxels.addToCreativeTab(); this.add(InitBlocks.blockCrystal); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index c256d6045..d8885c0f1 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -559,6 +559,7 @@ booklet.actuallyadditions.shapedOreRecipe=Shaped OreDictionary Recipe #Booklet Entries booklet.actuallyadditions.indexEntry.gettingStarted.name=Getting Started booklet.actuallyadditions.indexEntry.misc.name=Miscellaneous +booklet.actuallyadditions.indexEntry.crossover.name=Mod Crossover booklet.actuallyadditions.indexEntry.functionalNoRF.name=Blocks that don't use RF booklet.actuallyadditions.indexEntry.allAndSearch.name=All Items and Search booklet.actuallyadditions.indexEntry.functionalRF.name=Blocks that use RF @@ -776,4 +777,7 @@ booklet.actuallyadditions.chapter.enderStar.name=Ender Star booklet.actuallyadditions.chapter.enderStar.text.1=The Ender Star can be obtained by both killing a wither and going to the end to collect Dragon's Breath. The latter is obtained by using a bottle on the purple particles that the dragon spits out. The Ender Star is used for multiple crafting recipes. booklet.actuallyadditions.chapter.phantomRedstoneface.name=Phantom Redstoneface -booklet.actuallyadditions.chapter.phantomRedstoneface.text.1=If you don't know what Phantomfaces are, check the Phantomfaces Entry first. The Phantom Redstoneface can be used to transmit redstone signals. This one, however, works differently to the other Phantomfaces as it only works in one direction. What this means is that the connected block has to provide redstone power for redstone next to the Redstoneface to become powered. It does not work the other way around. \ No newline at end of file +booklet.actuallyadditions.chapter.phantomRedstoneface.text.1=If you don't know what Phantomfaces are, check the Phantomfaces Entry first. The Phantom Redstoneface can be used to transmit redstone signals. This one, however, works differently to the other Phantomfaces as it only works in one direction. What this means is that the connected block has to provide redstone power for redstone next to the Redstoneface to become powered. It does not work the other way around. + +booklet.actuallyadditions.chapter.rarmorModuleReconstructor.name=Reconstruction Module +booklet.actuallyadditions.chapter.rarmorModuleReconstructor.text.1=The Reconstruction Module can be used in the Rarmor. The Rarmor is a type of configurable armor that is added by the Rarmor Mod. If you want to use this module, place it inside the Rarmor GUI that is accessed by wearing the armor and opening your inventory. The module, when the player is sneaking, will shoot out a reconstruction beam that would be created by the Atomic Reconstructor without a lens. This will cause blocks that are hit to be reconstructed. \ No newline at end of file From 5cea568bcb8823a7c70a74dec53b445dbe29db75 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 16:32:45 +0200 Subject: [PATCH 093/322] Fix minor messup in build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7fc4ce787..8ce5665ed 100644 --- a/build.gradle +++ b/build.gradle @@ -43,7 +43,7 @@ dependencies { //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" deobfCompile "mezz.jei:jei_1.9:3.3.3.197" - compile file "lib/Rarmor.jar" + compile files("lib/Rarmor.jar") } processResources { From 32b098fef1d63726911579202f13a0e30ec0d94e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 16:45:30 +0200 Subject: [PATCH 094/322] r31! --- build.gradle | 2 +- update/changelog.md | 6 ++++++ update/updateVersions.properties | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 8ce5665ed..91a49e756 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.9-r30" +version = "1.9-r31" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index cd72dfb45..52628336e 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,9 @@ +# 1.9-r31 +* Added Phantom Redstoneface +* Changed storage crate upgrade recipe because it was clashing with Storage Drawers +* Added Reconstruction Module as Rarmor integration. Install Canitzp's Rarmor to find out what it is and does. +* Added Patreon button to the booklet because I wantz all teh moneyz + # 1.9-r30 * Fixed mcmod.info being broken * Fixed OreDictionary creating empty entries when searching for names diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 5368b4d47..7c8691c2d 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,3 +1,3 @@ 1.7.10=21 1.8.9=26 -1.9=30 \ No newline at end of file +1.9=31 \ No newline at end of file From f942810592240b67b21135910256d0aee4442b90 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 18:38:56 +0200 Subject: [PATCH 095/322] What did that even mean? --- src/main/resources/assets/actuallyadditions/lang/en_US.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index d8885c0f1..0eb232c96 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -511,7 +511,7 @@ info.actuallyadditions.update.buttonOptions=Click: Changelog, Shift-Click: Downl info.actuallyadditions.update.failed=[{"text":"The Update Check for "},{"text":"Actually Additions ","color":"dark_green"},{"text":"failed! Check Logs for more Info!","color":"none"}] #Achievements -achievement.actuallyadditions.openBooklet=Screams of Knowledge +achievement.actuallyadditions.openBooklet=Knowledge Bringer! achievement.actuallyadditions.openBooklet.desc=Open an Actually Additions Manual achievement.actuallyadditions.nameSmileyCloud=Your best friend From 1695f61a75a211aa3abd8638691d1472693a19be Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 22:23:41 +0200 Subject: [PATCH 096/322] Use universal buckets --- .../mod/ActuallyAdditions.java | 20 +++-- .../mod/config/values/ConfigBoolValues.java | 5 -- .../mod/creative/CreativeTab.java | 5 +- .../mod/event/BucketFillEvent.java | 42 ---------- .../mod/event/InitEvents.java | 1 - .../mod/fluids/InitFluids.java | 58 ++++--------- .../mod/items/InitItems.java | 7 -- .../mod/items/base/ItemBucketAA.java | 58 ------------- .../mod/misc/DispenserHandlerEmptyBucket.java | 42 ---------- .../mod/misc/DispenserHandlerFillBucket.java | 83 ------------------- .../actuallyadditions/mod/util/Util.java | 1 + 11 files changed, 33 insertions(+), 289 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index b43b14750..b171a028d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -41,6 +41,7 @@ import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Items; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; @@ -59,6 +60,11 @@ public class ActuallyAdditions{ @SidedProxy(clientSide = "de.ellpeck.actuallyadditions.mod.proxy.ClientProxy", serverSide = "de.ellpeck.actuallyadditions.mod.proxy.ServerProxy") public static IProxy proxy; + static{ + //For some reason, this has to be done here + FluidRegistry.enableUniversalBucket(); + } + @EventHandler public void preInit(FMLPreInitializationEvent event){ ModUtil.LOGGER.info("Starting PreInitialization Phase..."); @@ -117,9 +123,6 @@ public class ActuallyAdditions{ @EventHandler public void serverStarting(FMLServerStartingEvent event){ - Util.registerDispenserHandler(InitItems.itemBucketOil, new DispenserHandlerEmptyBucket()); - Util.registerDispenserHandler(InitItems.itemBucketCanolaOil, new DispenserHandlerEmptyBucket()); - Util.registerDispenserHandler(Items.BUCKET, new DispenserHandlerFillBucket()); Util.registerDispenserHandler(InitItems.itemFertilizer, new DispenserHandlerFertilize()); WorldData.init(event.getServer()); @@ -128,10 +131,13 @@ public class ActuallyAdditions{ @EventHandler public void missingMapping(FMLMissingMappingsEvent event){ for(FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()){ - if(mapping.name != null && mapping.name.toLowerCase(Locale.ROOT).startsWith(ModUtil.MOD_ID+":")){ - if(mapping.name.contains("paxel") || mapping.name.contains("itemSpecial") || mapping.name.contains("blockBookStand") || mapping.name.contains("Rarmor")){ - mapping.ignore(); - ModUtil.LOGGER.info("Missing Mapping "+mapping.name+" is getting ignored. This is intentional."); + if(mapping.name != null){ + String name = mapping.name.toLowerCase(Locale.ROOT); + if(name.startsWith(ModUtil.MOD_ID+":")){ + if(name.contains("paxel") || name.contains("itemspecial") || name.contains("blockbookstand") || name.contains("rarmor") || name.contains("bucket")){ + mapping.ignore(); + ModUtil.LOGGER.info("Missing Mapping "+mapping.name+" is getting ignored. This is intentional."); + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 6a89e6a39..94baf19d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -39,11 +39,6 @@ public enum ConfigBoolValues{ DO_SPIDER_DROPS("Spider Cobweb Drop", ConfigCategories.MOB_DROPS, true, "If Cobwebs should sometimes drop from Spiders"), DO_BAT_DROPS("Bat Wing Drop", ConfigCategories.MOB_DROPS, true, "If Wings should sometimes drop from Bats"), - PREVENT_OIL_OVERRIDE("Oil Fluid Override", ConfigCategories.FLUIDS, false, "If not registering Oil Fluids from Actually Additions if other Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING), - PREVENT_CANOLA_OVERRIDE("Canola Oil Fluid Override", ConfigCategories.FLUIDS, false, "If not registering Canola Oil Fluids from Actually Additions if other Canola Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING), - PREVENT_OIL_BLOCK_OVERRIDE("Oil Block Override", ConfigCategories.FLUIDS, false, "If not registering Oil Blocks from Actually Additions if other Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING), - PREVENT_CANOLA_BLOCK_OVERRIDE("Canola Oil Block Override", ConfigCategories.FLUIDS, false, "If not registering Canola Oil Blocks from Actually Additions if other Canola Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING), - CTRL_EXTRA_INFO("Advanced Info", ConfigCategories.OTHER, true, "Show Advanced Item Info when holding Control on every Item"), CTRL_INFO_FOR_EXTRA_INFO("Advanced Info Tooltips", ConfigCategories.OTHER, true, "Show the 'Press Control for more Info'-Text on Item Tooltips"), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 1a77d0b76..2ea772e42 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -18,6 +18,9 @@ import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.ForgeModContainer; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.UniversalBucket; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -153,8 +156,6 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemWaterRemovalRing); this.add(InitItems.itemPhantomConnector); - this.add(InitItems.itemBucketCanolaOil); - this.add(InitItems.itemBucketOil); this.add(InitItems.itemWingsOfTheBats); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java deleted file mode 100644 index d3bd5b97a..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BucketFillEvent.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file ("BucketFillEvent.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - - -import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.event.entity.player.FillBucketEvent; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -public class BucketFillEvent{ - - @SubscribeEvent - public void onBucketFilled(FillBucketEvent event){ - this.fillBucket(event, InitItems.itemBucketOil, InitFluids.blockOil); - this.fillBucket(event, InitItems.itemBucketCanolaOil, InitFluids.blockCanolaOil); - } - - private void fillBucket(FillBucketEvent event, Item item, Block fluid){ - if(event.getTarget() != null && event.getTarget().getBlockPos() != null){ - Block block = PosUtil.getBlock(event.getTarget().getBlockPos(), event.getWorld()); - if(block == fluid){ - event.getWorld().setBlockToAir(event.getTarget().getBlockPos()); - event.setFilledBucket(new ItemStack(item)); - event.setResult(Event.Result.ALLOW); - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java index 1ddf59809..fc53bd2d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java @@ -26,7 +26,6 @@ public class InitEvents{ Util.registerEvent(new PlayerObtainEvents()); Util.registerEvent(new LivingDropEvent()); Util.registerEvent(new EntityLivingEvent()); - Util.registerEvent(new BucketFillEvent()); Util.registerEvent(new LogoutEvent()); Util.registerEvent(new WorldLoadingEvents()); MinecraftForge.TERRAIN_GEN_BUS.register(new WorldDecorationEvent()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java index 69c39bbdf..2e26ad67e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java @@ -11,14 +11,14 @@ package de.ellpeck.actuallyadditions.mod.fluids; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockFluidFlowing; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.EnumRarity; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; +import java.util.Locale; + public class InitFluids{ public static Fluid fluidCanolaOil; @@ -28,48 +28,22 @@ public class InitFluids{ public static Block blockOil; public static void init(){ - //Canola Fluid - String canolaOil = "canolaoil"; - if(!FluidRegistry.isFluidRegistered(canolaOil) || ConfigBoolValues.PREVENT_CANOLA_OVERRIDE.isEnabled()){ - fluidCanolaOil = new FluidAA(canolaOil, "blockCanolaOil").setRarity(EnumRarity.UNCOMMON); - FluidRegistry.registerFluid(fluidCanolaOil); - } - else{ - errorAlreadyRegistered("Canola Oil Fluid"); - } - fluidCanolaOil = FluidRegistry.getFluid(canolaOil); + fluidCanolaOil = registerFluid("canolaoil", "blockCanolaOil", EnumRarity.UNCOMMON); + fluidOil = registerFluid("oil", "blockOil", EnumRarity.UNCOMMON); - //Canola Block - if(fluidCanolaOil.getBlock() == null || ConfigBoolValues.PREVENT_CANOLA_BLOCK_OVERRIDE.isEnabled()){ - blockCanolaOil = new BlockFluidFlowing(fluidCanolaOil, Material.WATER, "blockCanolaOil"); - } - else{ - errorAlreadyRegistered("Canola Oil Block"); - } - blockCanolaOil = fluidCanolaOil.getBlock(); - - //Oil Fluid - String oil = "oil"; - if(!FluidRegistry.isFluidRegistered(oil) || ConfigBoolValues.PREVENT_OIL_OVERRIDE.isEnabled()){ - fluidOil = new FluidAA(oil, "blockOil").setRarity(EnumRarity.UNCOMMON); - FluidRegistry.registerFluid(fluidOil); - } - else{ - errorAlreadyRegistered("Oil Fluid"); - } - fluidOil = FluidRegistry.getFluid(oil); - - //Oil Block - if(fluidOil.getBlock() == null || ConfigBoolValues.PREVENT_OIL_BLOCK_OVERRIDE.isEnabled()){ - blockOil = new BlockFluidFlowing(fluidOil, Material.WATER, "blockOil"); - } - else{ - errorAlreadyRegistered("Oil Block"); - } - blockOil = fluidOil.getBlock(); + blockCanolaOil = registerFluidBlock(fluidCanolaOil, Material.WATER, "blockCanolaOil"); + blockOil = registerFluidBlock(fluidOil, Material.WATER, "blockOil"); } - public static void errorAlreadyRegistered(String str){ - ModUtil.LOGGER.warn(str+" from "+ModUtil.NAME+" is not getting used as it has already been registered by another Mod! If this causes Issues (which it shouldn't!), you can turn this off in the Config File!"); + private static Fluid registerFluid(String fluidName, String fluidTextureName, EnumRarity rarity){ + Fluid fluid = new FluidAA(fluidName.toLowerCase(Locale.ROOT), fluidTextureName).setRarity(rarity); + FluidRegistry.registerFluid(fluid); + FluidRegistry.addBucketForFluid(fluid); + + return fluid; + } + + private static Block registerFluidBlock(Fluid fluid, Material material, String name){ + return new BlockFluidFlowing(fluid, material, name); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 2967ad146..d95fe1b37 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -28,7 +28,6 @@ import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fml.common.Loader; public class InitItems{ @@ -90,8 +89,6 @@ public class InitItems{ public static Item itemCoffeeSeed; public static Item itemResonantRice; - public static Item itemBucketOil; - public static Item itemBucketCanolaOil; public static Item itemPhantomConnector; @@ -252,10 +249,6 @@ public class InitItems{ itemDrillUpgradeThreeByThree = new ItemDrillUpgrade(ItemDrillUpgrade.UpgradeType.THREE_BY_THREE, "itemDrillUpgradeThreeByThree"); itemDrillUpgradeFiveByFive = new ItemDrillUpgrade(ItemDrillUpgrade.UpgradeType.FIVE_BY_FIVE, "itemDrillUpgradeFiveByFive"); itemDrillUpgradeBlockPlacing = new ItemDrillUpgrade(ItemDrillUpgrade.UpgradeType.PLACER, "itemDrillUpgradeBlockPlacing"); - itemBucketOil = new ItemBucketAA(InitFluids.blockOil, "itemBucketOil"); - FluidContainerRegistry.registerFluidContainer(InitFluids.fluidOil, new ItemStack(itemBucketOil), FluidContainerRegistry.EMPTY_BUCKET); - itemBucketCanolaOil = new ItemBucketAA(InitFluids.blockCanolaOil, "itemBucketCanolaOil"); - FluidContainerRegistry.registerFluidContainer(InitFluids.fluidCanolaOil, new ItemStack(itemBucketCanolaOil), FluidContainerRegistry.EMPTY_BUCKET); itemFertilizer = new ItemFertilizer("itemFertilizer"); itemCoffee = new ItemCoffee("itemCoffee"); itemPhantomConnector = new ItemPhantomConnector("itemPhantomConnector"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java deleted file mode 100644 index d2a468e02..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBucketAA.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * This file ("ItemBucketAA.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items.base; - -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.init.Items; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.ItemBucket; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class ItemBucketAA extends ItemBucket{ - - private String name; - - public ItemBucketAA(Block block, String unlocName){ - super(block); - this.name = unlocName; - this.setContainerItem(Items.BUCKET); - - this.register(); - } - - private void register(){ - ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); - - this.registerRendering(); - } - - protected String getBaseName(){ - return this.name; - } - - public boolean shouldAddCreative(){ - return true; - } - - protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); - } - - @Override - public EnumRarity getRarity(ItemStack stack){ - return EnumRarity.UNCOMMON; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java deleted file mode 100644 index 2fe187db9..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerEmptyBucket.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file ("DispenserHandlerEmptyBucket.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.misc; - - -import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import net.minecraft.block.BlockDispenser; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.init.Items; -import net.minecraft.item.ItemBucket; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; - -public class DispenserHandlerEmptyBucket extends BehaviorDefaultDispenseItem{ - - @Override - public ItemStack dispenseStack(IBlockSource source, ItemStack bucket){ - EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); - int x = source.getBlockTileEntity().getPos().getX()+facing.getFrontOffsetX(); - int y = source.getBlockTileEntity().getPos().getY()+facing.getFrontOffsetY(); - int z = source.getBlockTileEntity().getPos().getZ()+facing.getFrontOffsetZ(); - BlockPos pos = new BlockPos(x, y, z); - - if(source.getWorld().isAirBlock(pos) && !PosUtil.getMaterial(pos, source.getWorld()).isSolid() && ((ItemBucket)bucket.getItem()).tryPlaceContainedLiquid(FakePlayerUtil.getFakePlayer(source.getWorld()), source.getWorld(), pos)){ - return new ItemStack(Items.BUCKET); - } - - return new BehaviorDefaultDispenseItem().dispense(source, bucket); - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java deleted file mode 100644 index 726dc44d7..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFillBucket.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * This file ("DispenserHandlerFillBucket.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.misc; - - -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import net.minecraft.block.Block; -import net.minecraft.block.BlockDispenser; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityDispenser; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.IFluidBlock; - -public class DispenserHandlerFillBucket extends BehaviorDefaultDispenseItem{ - - @Override - public ItemStack dispenseStack(IBlockSource source, ItemStack emptyBucket){ - EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); - int x = source.getBlockTileEntity().getPos().getX()+facing.getFrontOffsetX(); - int y = source.getBlockTileEntity().getPos().getY()+facing.getFrontOffsetY(); - int z = source.getBlockTileEntity().getPos().getZ()+facing.getFrontOffsetZ(); - - ItemStack filledBucket = this.tryFillBucket(source, x, y, z, emptyBucket); - - //Bucket couldn't be filled - if(filledBucket == null){ - return new BehaviorDefaultDispenseItem().dispense(source, emptyBucket); - } - - emptyBucket.stackSize--; - //Only one bucket was there -> new bucket gets placed in slot - if(emptyBucket.stackSize <= 0){ - emptyBucket = filledBucket.copy(); - } - //Not enough space for the bucket in the inventory? - else if(((TileEntityDispenser)source.getBlockTileEntity()).addItemStack(filledBucket.copy()) < 0){ - new BehaviorDefaultDispenseItem().dispense(source, filledBucket.copy()); - } - //Filled Bucket or Empty Buckets because either they weren't filled or the full one was dispensed out because of missing space - return emptyBucket; - } - - private ItemStack tryFillBucket(IBlockSource source, int x, int y, int z, ItemStack bucket){ - BlockPos pos = new BlockPos(x, y, z); - Block block = PosUtil.getBlock(pos, source.getWorld()); - - if(block == Blocks.WATER || block == Blocks.FLOWING_WATER){ - if(PosUtil.getMetadata(pos, source.getWorld()) == 0){ - source.getWorld().setBlockToAir(pos); - return new ItemStack(Items.WATER_BUCKET); - } - } - else if(block == Blocks.LAVA || block == Blocks.FLOWING_LAVA){ - if(PosUtil.getMetadata(pos, source.getWorld()) == 0){ - source.getWorld().setBlockToAir(pos); - return new ItemStack(Items.LAVA_BUCKET); - } - } - else if(block instanceof IFluidBlock && ((IFluidBlock)block).canDrain(source.getWorld(), pos)){ - ItemStack stack = FluidContainerRegistry.fillFluidContainer(((IFluidBlock)block).drain(source.getWorld(), pos, false), bucket); - if(stack != null){ - ((IFluidBlock)block).drain(source.getWorld(), pos, true); - return stack; - } - } - return null; - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 3c99a2d16..d8cef0142 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -26,6 +26,7 @@ public class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; + public static final int BUCKET = 1000; public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); From b8e08d582bea53995faee2caf55ef620ec4cdf61 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 22:27:38 +0200 Subject: [PATCH 097/322] Add new buckets to creative --- .../ellpeck/actuallyadditions/mod/creative/CreativeTab.java | 6 +++++- .../java/de/ellpeck/actuallyadditions/mod/util/Util.java | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 2ea772e42..ca94fda11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.creative; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.items.InitForeignPaxels; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -29,7 +30,7 @@ import java.util.List; public class CreativeTab extends CreativeTabs{ public static CreativeTab instance = new CreativeTab(); - private List list; + private List list; public CreativeTab(){ super(ModUtil.MOD_ID); @@ -155,6 +156,9 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemMagnetRing); this.add(InitItems.itemWaterRemovalRing); + this.list.add(UniversalBucket.getFilledBucket(ForgeModContainer.getInstance().universalBucket, InitFluids.fluidCanolaOil)); + this.list.add(UniversalBucket.getFilledBucket(ForgeModContainer.getInstance().universalBucket, InitFluids.fluidOil)); + this.add(InitItems.itemPhantomConnector); this.add(InitItems.itemWingsOfTheBats); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index d8cef0142..3c99a2d16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -26,7 +26,6 @@ public class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; - public static final int BUCKET = 1000; public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); From 89963a23fba81a1b0f49ae6bcaee711f76bdf395 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 6 May 2016 23:23:29 +0200 Subject: [PATCH 098/322] Replaced bucket slots in GUIs with right click functionality --- .../mod/blocks/BlockCanolaPress.java | 4 +- .../mod/blocks/BlockCoffeeMachine.java | 4 +- .../mod/blocks/BlockFermentingBarrel.java | 4 +- .../mod/blocks/BlockFluidCollector.java | 4 +- .../mod/blocks/BlockOilGenerator.java | 4 +- .../mod/blocks/base/BlockContainerBase.java | 9 ++- .../mod/inventory/ContainerCanolaPress.java | 9 +-- .../mod/inventory/ContainerCoffeeMachine.java | 10 +-- .../inventory/ContainerFermentingBarrel.java | 24 +------ .../inventory/ContainerFluidCollector.java | 17 +---- .../mod/inventory/ContainerOilGenerator.java | 23 ++----- .../inventory/gui/GuiFermentingBarrel.java | 2 +- .../mod/inventory/gui/GuiFluidCollector.java | 2 +- .../mod/inventory/gui/GuiOilGenerator.java | 2 +- .../mod/tile/TileEntityBase.java | 11 +++ .../mod/tile/TileEntityCanolaPress.java | 11 ++- .../mod/tile/TileEntityCoffeeMachine.java | 13 ++-- .../mod/tile/TileEntityFermentingBarrel.java | 27 ++------ .../mod/tile/TileEntityFireworkBox.java | 4 ++ .../mod/tile/TileEntityFishingNet.java | 4 ++ .../mod/tile/TileEntityFluidCollector.java | 63 +++++------------ .../mod/tile/TileEntityFurnaceSolar.java | 4 ++ .../mod/tile/TileEntityGreenhouseGlass.java | 4 ++ .../mod/tile/TileEntityHeatCollector.java | 4 ++ .../mod/tile/TileEntityInventoryBase.java | 7 +- .../mod/tile/TileEntityLaserRelay.java | 4 ++ .../tile/TileEntityLavaFactoryController.java | 4 ++ .../mod/tile/TileEntityLeafGenerator.java | 4 ++ .../mod/tile/TileEntityOilGenerator.java | 24 ++----- .../mod/tile/TileEntityPhantomBooster.java | 3 + .../mod/tile/TileEntitySmileyCloud.java | 4 ++ .../actuallyadditions/mod/util/Util.java | 2 + .../actuallyadditions/mod/util/WorldUtil.java | 64 +++--------------- .../textures/gui/guiCanolaPress.png | Bin 2441 -> 3050 bytes .../textures/gui/guiCoffeeMachine.png | Bin 2563 -> 3686 bytes .../textures/gui/guiFermentingBarrel.png | Bin 2459 -> 2941 bytes .../textures/gui/guiFluidCollector.png | Bin 1890 -> 1366 bytes .../textures/gui/guiOilGenerator.png | Bin 2121 -> 2634 bytes 38 files changed, 138 insertions(+), 241 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 78bb4be1f..27bd04c36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -46,7 +46,9 @@ public class BlockCanolaPress extends BlockContainerBase{ if(!world.isRemote){ TileEntityCanolaPress press = (TileEntityCanolaPress)world.getTileEntity(pos); if(press != null){ - player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CANOLA_PRESS.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + if(!this.tryUseItemOnTank(player, stack, side, press)){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CANOLA_PRESS.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + } } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 08d4f9c75..106879a53 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -66,7 +66,9 @@ public class BlockCoffeeMachine extends BlockContainerBase{ if(!world.isRemote){ TileEntityCoffeeMachine machine = (TileEntityCoffeeMachine)world.getTileEntity(pos); if(machine != null){ - player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.COFFEE_MACHINE.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + if(!this.tryUseItemOnTank(player, stack, f6, machine)){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.COFFEE_MACHINE.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + } } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index d8794f597..532b85d4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -52,7 +52,9 @@ public class BlockFermentingBarrel extends BlockContainerBase{ if(!world.isRemote){ TileEntityFermentingBarrel press = (TileEntityFermentingBarrel)world.getTileEntity(pos); if(press != null){ - player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FERMENTING_BARREL.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + if(!this.tryUseItemOnTank(player, heldItem, par6, press)){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FERMENTING_BARREL.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + } } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 7f4f5ad2f..6596e80f1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -59,7 +59,9 @@ public class BlockFluidCollector extends BlockContainerBase{ if(!world.isRemote){ TileEntityFluidCollector collector = (TileEntityFluidCollector)world.getTileEntity(pos); if(collector != null){ - player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FLUID_COLLECTOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + if(!this.tryUseItemOnTank(player, stack, par6, collector)){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FLUID_COLLECTOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + } } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 12ba314e2..ada610e7b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -68,7 +68,9 @@ public class BlockOilGenerator extends BlockContainerBase{ if(!world.isRemote){ TileEntityOilGenerator generator = (TileEntityOilGenerator)world.getTileEntity(pos); if(generator != null){ - player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.OIL_GENERATOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + if(!this.tryUseItemOnTank(player, stack, par6, generator)){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.OIL_GENERATOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + } } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 69efb8475..9c438c630 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; @@ -33,11 +32,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidUtil; +import net.minecraftforge.fluids.IFluidHandler; import java.util.ArrayList; import java.util.Random; @@ -174,6 +175,10 @@ public abstract class BlockContainerBase extends BlockContainer{ } } + protected boolean tryUseItemOnTank(EntityPlayer player, ItemStack heldItem, EnumFacing sideHit, IFluidHandler tank){ + return heldItem != null && FluidUtil.interactWithTank(heldItem, player, tank, sideHit); + } + @Override public void onBlockAdded(World world, BlockPos pos, IBlockState state){ this.updateRedstoneState(world, pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index dc636f81f..ef0f9321b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -34,8 +34,6 @@ public class ContainerCanolaPress extends Container{ this.press = (TileEntityCanolaPress)tile; this.addSlotToContainer(new Slot(this.press, 0, 81, 10)); - this.addSlotToContainer(new Slot(this.press, 1, 136, 73)); - this.addSlotToContainer(new SlotOutput(this.press, 2, 136, 42)); for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ @@ -49,7 +47,7 @@ public class ContainerCanolaPress extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 3; + final int inventoryStart = 1; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; @@ -68,11 +66,6 @@ public class ContainerCanolaPress extends Container{ return null; } } - else if(FluidContainerRegistry.getContainerCapacity(new FluidStack(InitFluids.fluidCanolaOil, 1), newStack) > 0){ - if(!this.mergeItemStack(newStack, 1, 2, false)){ - return null; - } - } // else if(slot >= inventoryStart && slot <= inventoryEnd){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index 9aa870112..ecbe9a177 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -44,9 +44,6 @@ public class ContainerCoffeeMachine extends Container{ } } - this.addSlotToContainer(new Slot(this.machine, TileEntityCoffeeMachine.SLOT_WATER_INPUT, 26, 73)); - this.addSlotToContainer(new SlotOutput(this.machine, TileEntityCoffeeMachine.SLOT_WATER_OUTPUT, 45, 73)); - for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 97+i*18)); @@ -59,7 +56,7 @@ public class ContainerCoffeeMachine extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 13; + final int inventoryStart = 11; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; @@ -85,11 +82,6 @@ public class ContainerCoffeeMachine extends Container{ return null; } } - else if(FluidContainerRegistry.containsFluid(newStack, new FluidStack(FluidRegistry.WATER, 1))){ - if(!this.mergeItemStack(newStack, TileEntityCoffeeMachine.SLOT_WATER_INPUT, TileEntityCoffeeMachine.SLOT_WATER_INPUT+1, false)){ - return null; - } - } else if(ItemCoffee.getIngredientFromStack(newStack) != null){ if(!this.mergeItemStack(newStack, 3, 11, false)){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index 6a23ad5df..c0dba6b6a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -31,11 +31,6 @@ public class ContainerFermentingBarrel extends Container{ public ContainerFermentingBarrel(InventoryPlayer inventory, TileEntityBase tile){ this.barrel = (TileEntityFermentingBarrel)tile; - this.addSlotToContainer(new Slot(this.barrel, 0, 42, 74)); - this.addSlotToContainer(new SlotOutput(this.barrel, 1, 42, 43)); - this.addSlotToContainer(new Slot(this.barrel, 2, 118, 74)); - this.addSlotToContainer(new SlotOutput(this.barrel, 3, 118, 43)); - for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 97+i*18)); @@ -48,7 +43,7 @@ public class ContainerFermentingBarrel extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 4; + final int inventoryStart = 0; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; @@ -61,20 +56,7 @@ public class ContainerFermentingBarrel extends Container{ //Other Slots in Inventory excluded if(slot >= inventoryStart){ - //Shift from Inventory - if(FluidContainerRegistry.containsFluid(newStack, new FluidStack(InitFluids.fluidCanolaOil, 1))){ - if(!this.mergeItemStack(newStack, 0, 1, false)){ - return null; - } - } - else if(FluidContainerRegistry.getContainerCapacity(new FluidStack(InitFluids.fluidOil, 1), newStack) > 0){ - if(!this.mergeItemStack(newStack, 2, 3, false)){ - return null; - } - } - // - - else if(slot >= inventoryStart && slot <= inventoryEnd){ + if(slot >= inventoryStart && slot <= inventoryEnd){ if(!this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false)){ return null; } @@ -106,6 +88,6 @@ public class ContainerFermentingBarrel extends Container{ @Override public boolean canInteractWith(EntityPlayer player){ - return this.barrel.isUseableByPlayer(player); + return this.barrel.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 7dcc3499a..7dafd4566 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -29,9 +29,6 @@ public class ContainerFluidCollector extends Container{ public ContainerFluidCollector(InventoryPlayer inventory, TileEntityBase tile){ this.collector = (TileEntityFluidCollector)tile; - this.addSlotToContainer(new Slot(this.collector, 0, 90, 73)); - this.addSlotToContainer(new SlotOutput(this.collector, 1, 90, 42)); - for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 97+i*18)); @@ -44,7 +41,7 @@ public class ContainerFluidCollector extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 2; + final int inventoryStart = 0; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; @@ -64,15 +61,7 @@ public class ContainerFluidCollector extends Container{ } //Other Slots in Inventory excluded else if(slot >= inventoryStart){ - //Shift from Inventory - if(FluidContainerRegistry.isEmptyContainer(newStack)){ - if(!this.mergeItemStack(newStack, 0, 1, false)){ - return null; - } - } - // - - else if(slot >= inventoryStart && slot <= inventoryEnd){ + if(slot >= inventoryStart && slot <= inventoryEnd){ if(!this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false)){ return null; } @@ -104,6 +93,6 @@ public class ContainerFluidCollector extends Container{ @Override public boolean canInteractWith(EntityPlayer player){ - return this.collector.isUseableByPlayer(player); + return this.collector.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index a41d04864..8b4a1e05c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -10,8 +10,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; -import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityOilGenerator; import invtweaks.api.container.InventoryContainer; @@ -20,8 +18,6 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; @InventoryContainer public class ContainerOilGenerator extends Container{ @@ -31,9 +27,6 @@ public class ContainerOilGenerator extends Container{ public ContainerOilGenerator(InventoryPlayer inventory, TileEntityBase tile){ this.generator = (TileEntityOilGenerator)tile; - this.addSlotToContainer(new Slot(this.generator, 0, 98, 74)); - this.addSlotToContainer(new SlotOutput(this.generator, 1, 98, 43)); - for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 97+i*18)); @@ -46,12 +39,12 @@ public class ContainerOilGenerator extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 2; + final int inventoryStart = 0; final int inventoryEnd = inventoryStart+26; final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); @@ -59,15 +52,7 @@ public class ContainerOilGenerator extends Container{ //Other Slots in Inventory excluded if(slot >= inventoryStart){ - //Shift from Inventory - if(FluidContainerRegistry.containsFluid(newStack, new FluidStack(InitFluids.fluidOil, 1))){ - if(!this.mergeItemStack(newStack, 0, 1, false)){ - return null; - } - } - // - - else if(slot >= inventoryStart && slot <= inventoryEnd){ + if(slot >= inventoryStart && slot <= inventoryEnd){ if(!this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false)){ return null; } @@ -99,6 +84,6 @@ public class ContainerOilGenerator extends Container{ @Override public boolean canInteractWith(EntityPlayer player){ - return this.generator.isUseableByPlayer(player); + return this.generator.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java index 061999f80..59bd13efb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java @@ -54,7 +54,7 @@ public class GuiFermentingBarrel extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press.name); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java index 3644aa6ea..e19eab4df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java @@ -49,7 +49,7 @@ public class GuiFluidCollector extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector.name); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index 14c78bf42..4938c3ebe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -52,7 +52,7 @@ public class GuiOilGenerator extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator.name); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index fc082c81a..90a9f2f5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketUpdateTileEntity; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -30,7 +31,13 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public boolean isRedstonePowered; protected int ticksElapsed; + public String name; + public TileEntityBase(String name){ + this.name = "container."+ModUtil.MOD_ID+"."+name; + } + + //TODO Change for next major update to use the name variable automatically public static void init(){ ModUtil.LOGGER.info("Registering TileEntities..."); @@ -151,6 +158,10 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.markDirty(); } + public boolean canPlayerUse(EntityPlayer player){ + return player.getDistanceSq(this.getPos().getX()+0.5D, this.pos.getY()+0.5D, this.pos.getZ()+0.5D) <= 64 && !this.isInvalid() && this.worldObj.getTileEntity(this.pos) == this; + } + protected final boolean sendUpdateWithInterval(){ if(this.ticksElapsed%ConfigIntValues.TILE_ENTITY_UPDATE_INTERVAL.getValue() == 0){ this.sendUpdate(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index a038b524c..e59983c75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -15,6 +15,7 @@ import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -30,14 +31,14 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE public static final int ENERGY_USE = 35; private static final int TIME = 30; public EnergyStorage storage = new EnergyStorage(40000); - public FluidTank tank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); + public FluidTank tank = new FluidTank(2*Util.BUCKET); public int currentProcessTime; private int lastEnergyStored; private int lastTankAmount; private int lastProcessTime; public TileEntityCanolaPress(){ - super(3, "canolaPress"); + super(1, "canolaPress"); } @SideOnly(Side.CLIENT) @@ -97,8 +98,6 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE this.currentProcessTime = 0; } - WorldUtil.fillBucket(this.tank, this.slots, 1, 2); - if(this.tank.getFluidAmount() > 0){ WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.tank); if(!this.isRedstonePowered){ @@ -119,7 +118,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()) || (i == 1 && stack.getItem() == Items.BUCKET); + return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()); } public boolean isCanola(int slot){ @@ -133,7 +132,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE @Override public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ - return slot == 2 && FluidContainerRegistry.containsFluid(this.slots[0], new FluidStack(InitFluids.fluidCanolaOil, FluidContainerRegistry.BUCKET_VOLUME)); + return false; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 49ca1c558..7c2996d3b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -19,6 +19,7 @@ import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -34,15 +35,13 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements public static final int SLOT_COFFEE_BEANS = 0; public static final int SLOT_INPUT = 1; public static final int SLOT_OUTPUT = 2; - public static final int SLOT_WATER_INPUT = 11; - public static final int SLOT_WATER_OUTPUT = 12; public static final int CACHE_USE = 15; public static final int ENERGY_USED = 150; public static final int WATER_USE = 500; public static final int COFFEE_CACHE_MAX_AMOUNT = 300; private static final int TIME_USED = 500; public EnergyStorage storage = new EnergyStorage(300000); - public FluidTank tank = new FluidTank(4*FluidContainerRegistry.BUCKET_VOLUME); + public FluidTank tank = new FluidTank(4*Util.BUCKET); public int coffeeCacheAmount; public int brewTime; private int lastEnergy; @@ -51,7 +50,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements private int lastBrewTime; public TileEntityCoffeeMachine(){ - super(13, "coffeeMachine"); + super(11, "coffeeMachine"); } @SideOnly(Side.CLIENT) @@ -113,7 +112,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i >= 3 && ItemCoffee.getIngredientFromStack(stack) != null) || (i == SLOT_COFFEE_BEANS && stack.getItem() == InitItems.itemCoffeeBean) || (i == SLOT_INPUT && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CUP.ordinal()) || (i == SLOT_WATER_INPUT && FluidContainerRegistry.containsFluid(stack, new FluidStack(FluidRegistry.WATER, 1))); + return (i >= 3 && ItemCoffee.getIngredientFromStack(stack) != null) || (i == SLOT_COFFEE_BEANS && stack.getItem() == InitItems.itemCoffeeBean) || (i == SLOT_INPUT && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CUP.ordinal()); } public void storeCoffee(){ @@ -127,8 +126,6 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements this.coffeeCacheAmount += toAdd; } } - - WorldUtil.emptyBucket(this.tank, this.slots, SLOT_WATER_INPUT, SLOT_WATER_OUTPUT, FluidRegistry.WATER); } public void brew(){ @@ -180,7 +177,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements @Override public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ - return slot == SLOT_OUTPUT || (slot >= 3 && slot < this.slots.length-2 && ItemCoffee.getIngredientFromStack(stack) == null) || slot == SLOT_WATER_OUTPUT; + return slot == SLOT_OUTPUT || (slot >= 3 && slot < this.slots.length-2 && ItemCoffee.getIngredientFromStack(stack) == null); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index ab8f4c0c2..a615575b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; @@ -20,18 +21,18 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFermentingBarrel extends TileEntityInventoryBase implements IFluidHandler, IFluidSaver{ +public class TileEntityFermentingBarrel extends TileEntityBase implements IFluidHandler, IFluidSaver{ private static final int PROCESS_TIME = 100; - public FluidTank canolaTank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); - public FluidTank oilTank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); + public FluidTank canolaTank = new FluidTank(2*Util.BUCKET); + public FluidTank oilTank = new FluidTank(2*Util.BUCKET); public int currentProcessTime; private int lastCanola; private int lastOil; private int lastProcessTime; public TileEntityFermentingBarrel(){ - super(4, "fermentingBarrel"); + super("fermentingBarrel"); } @Override @@ -72,9 +73,6 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen this.currentProcessTime = 0; } - WorldUtil.emptyBucket(this.canolaTank, this.slots, 0, 1, InitFluids.fluidCanolaOil); - WorldUtil.fillBucket(this.oilTank, this.slots, 2, 3); - if(this.oilTank.getFluidAmount() > 0){ WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.oilTank); if(!this.isRedstonePowered){ @@ -93,11 +91,6 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen } } - @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return (i == 0 && FluidContainerRegistry.containsFluid(stack, new FluidStack(InitFluids.fluidCanolaOil, FluidContainerRegistry.BUCKET_VOLUME))) || (i == 2 && stack.getItem() == Items.BUCKET); - } - @SideOnly(Side.CLIENT) public int getProcessScaled(int i){ return this.currentProcessTime*i/PROCESS_TIME; @@ -113,16 +106,6 @@ public class TileEntityFermentingBarrel extends TileEntityInventoryBase implemen return this.canolaTank.getFluidAmount()*i/this.canolaTank.getCapacity(); } - @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ - return this.isItemValidForSlot(slot, stack); - } - - @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ - return (slot == 1 && stack.getItem() == Items.BUCKET) || (slot == 3 && FluidContainerRegistry.containsFluid(stack, new FluidStack(InitFluids.fluidOil, FluidContainerRegistry.BUCKET_VOLUME))); - } - @Override public int fill(EnumFacing from, FluidStack resource, boolean doFill){ if(from != EnumFacing.DOWN && resource.getFluid() == InitFluids.fluidCanolaOil){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index b25f87e19..fd3729b9b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -32,6 +32,10 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece private boolean activateOnceWithSignal; private int oldEnergy; + public TileEntityFireworkBox(){ + super("fireworkBox"); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index a43ffb12a..ce0cb97e8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -32,6 +32,10 @@ public class TileEntityFishingNet extends TileEntityBase{ public int timeUntilNextDrop; + public TileEntityFishingNet(){ + super("fishingNet"); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 5c40f980c..605012c44 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -12,11 +12,10 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -24,20 +23,20 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFluidCollector extends TileEntityInventoryBase implements IFluidHandler, IFluidSaver, IRedstoneToggle{ +public class TileEntityFluidCollector extends TileEntityBase implements IFluidHandler, IFluidSaver, IRedstoneToggle{ - public FluidTank tank = new FluidTank(8*FluidContainerRegistry.BUCKET_VOLUME); + public FluidTank tank = new FluidTank(8*Util.BUCKET); public boolean isPlacer; private int lastTankAmount; private int currentTime; private boolean activateOnceWithSignal; - public TileEntityFluidCollector(int slots, String name){ - super(slots, name); + public TileEntityFluidCollector(String name){ + super(name); } public TileEntityFluidCollector(){ - super(2, "fluidCollector"); + this("fluidCollector"); this.isPlacer = false; } @@ -62,28 +61,28 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements if(coordsBlock != null){ Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); - if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, this.worldObj) == 0 && FluidContainerRegistry.BUCKET_VOLUME <= this.tank.getCapacity()-this.tank.getFluidAmount()){ + if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, this.worldObj) == 0 && Util.BUCKET <= this.tank.getCapacity()-this.tank.getFluidAmount()){ if(blockToBreak instanceof IFluidBlock && ((IFluidBlock)blockToBreak).getFluid() != null){ - if(this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ - this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), FluidContainerRegistry.BUCKET_VOLUME), true); + if(this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), true); WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } else if(blockToBreak == Blocks.LAVA || blockToBreak == Blocks.FLOWING_LAVA){ - if(this.tank.fill(new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ - this.tank.fill(new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), true); + if(this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), true); WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } else if(blockToBreak == Blocks.WATER || blockToBreak == Blocks.FLOWING_WATER){ - if(this.tank.fill(new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), false) >= FluidContainerRegistry.BUCKET_VOLUME){ - this.tank.fill(new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), true); + if(this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), true); WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } } else if(this.isPlacer && PosUtil.getBlock(coordsBlock, this.worldObj).isReplaceable(this.worldObj, coordsBlock)){ - if(this.tank.getFluidAmount() >= FluidContainerRegistry.BUCKET_VOLUME){ + if(this.tank.getFluidAmount() >= Util.BUCKET){ Block block = this.tank.getFluid().getFluid().getBlock(); if(block != null){ BlockPos offsetPos = this.pos.offset(sideToManipulate); @@ -91,7 +90,7 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements boolean replaceable = blockPresent.isReplaceable(this.worldObj, offsetPos); if(replaceable){ PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); - this.tank.drain(FluidContainerRegistry.BUCKET_VOLUME, true); + this.tank.drain(Util.BUCKET, true); } } } @@ -169,13 +168,6 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements } } - if(!this.isPlacer){ - WorldUtil.fillBucket(this.tank, this.slots, 0, 1); - } - else{ - WorldUtil.emptyBucket(this.tank, this.slots, 0, 1); - } - if(!this.isPlacer && this.tank.getFluidAmount() > 0){ WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.tank); if(!this.isRedstonePowered){ @@ -192,34 +184,11 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements } } - @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - if(i == 0){ - if(this.isPlacer){ - return FluidContainerRegistry.isFilledContainer(stack); - } - else{ - return stack.isItemEqual(FluidContainerRegistry.EMPTY_BUCKET); - } - } - return false; - } - @SideOnly(Side.CLIENT) public int getTankScaled(int i){ return this.tank.getFluidAmount()*i/this.tank.getCapacity(); } - @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ - return this.isItemValidForSlot(slot, stack); - } - - @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ - return slot == 1; - } - @Override public FluidStack[] getFluids(){ return new FluidStack[]{this.tank.getFluid()}; @@ -233,7 +202,7 @@ public class TileEntityFluidCollector extends TileEntityInventoryBase implements public static class TileEntityFluidPlacer extends TileEntityFluidCollector{ public TileEntityFluidPlacer(){ - super(2, "fluidPlacer"); + super("fluidPlacer"); this.isPlacer = true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index ed4227725..ed4740804 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -26,6 +26,10 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro public EnergyStorage storage = new EnergyStorage(30000); private int oldEnergy; + public TileEntityFurnaceSolar(){ + super("solarPanel"); + } + @Override public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate){ return this.storage.extractEnergy(maxExtract, simulate); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index ca7d95dc5..4dfdaac40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -24,6 +24,10 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ private int timeUntilNextFert; + public TileEntityGreenhouseGlass(){ + super("greenhouseGlass"); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.writeSyncableNBT(compound, isForSync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index fa38e1cf1..04703218f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -32,6 +32,10 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr public EnergyStorage storage = new EnergyStorage(30000); private int oldEnergy; + public TileEntityHeatCollector(){ + super("heatCollector"); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.writeSyncableNBT(compound, isForSync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index b464c1f81..66512d9a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -27,12 +27,12 @@ import net.minecraftforge.items.wrapper.SidedInvWrapper; public abstract class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ public ItemStack slots[]; - public String name; private SidedInvWrapper[] invWrappers = new SidedInvWrapper[6]; public TileEntityInventoryBase(int slots, String name){ + super(name); + this.initializeSlots(slots); - this.name = "container."+ModUtil.MOD_ID+"."+name; for(int i = 0; i < this.invWrappers.length; i++){ this.invWrappers[i] = new SidedInvWrapper(this, EnumFacing.values()[i]); @@ -109,10 +109,9 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public boolean isUseableByPlayer(EntityPlayer player){ - return player.getDistanceSq(this.getPos().getX()+0.5D, this.pos.getY()+0.5D, this.pos.getZ()+0.5D) <= 64 && !this.isInvalid() && this.worldObj.getTileEntity(this.pos) == this; + return this.canPlayerUse(player); } - @Override public void openInventory(EntityPlayer player){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 3a1541e35..d07fe7f0e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -31,6 +31,10 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei public static final int MAX_DISTANCE = 15; private static final float[] COLOR = new float[]{1F, 0F, 0F}; + public TileEntityLaserRelay(){ + super("laserRelay"); + } + @Override public void receiveSyncCompound(NBTTagCompound compound){ BlockPos thisPos = this.pos; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 4100ffce9..df91f798e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -33,6 +33,10 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I private int currentWorkTime; private int oldEnergy; + public TileEntityLavaFactoryController(){ + super("lavaFactory"); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 7e88f279f..e95cf7373 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -37,6 +37,10 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr private int nextUseCounter; private int oldEnergy; + public TileEntityLeafGenerator(){ + super("leafGenerator"); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 0aa93cef3..0f36ed4c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -14,6 +14,7 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -22,19 +23,19 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityOilGenerator extends TileEntityInventoryBase implements IEnergyProvider, IFluidHandler, IEnergySaver, IFluidSaver{ +public class TileEntityOilGenerator extends TileEntityBase implements IEnergyProvider, IFluidHandler, IEnergySaver, IFluidSaver{ public static final int ENERGY_PRODUCED = 76; private static final int BURN_TIME = 100; public EnergyStorage storage = new EnergyStorage(50000); - public FluidTank tank = new FluidTank(2*FluidContainerRegistry.BUCKET_VOLUME); + public FluidTank tank = new FluidTank(2*Util.BUCKET); public int currentBurnTime; private int lastEnergy; private int lastTank; private int lastBurnTime; public TileEntityOilGenerator(){ - super(2, "oilGenerator"); + super("oilGenerator"); } @SideOnly(Side.CLIENT) @@ -88,8 +89,6 @@ public class TileEntityOilGenerator extends TileEntityInventoryBase implements I } } - WorldUtil.emptyBucket(this.tank, this.slots, 0, 1, InitFluids.fluidOil); - if(this.storage.getEnergyStored() > 0){ WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); } @@ -115,21 +114,6 @@ public class TileEntityOilGenerator extends TileEntityInventoryBase implements I } } - @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ - return FluidContainerRegistry.containsFluid(stack, new FluidStack(InitFluids.fluidOil, FluidContainerRegistry.BUCKET_VOLUME)) && i == 0; - } - - @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ - return this.isItemValidForSlot(slot, stack); - } - - @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ - return slot == 1; - } - @Override public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate){ return this.storage.extractEnergy(maxExtract, simulate); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java index f6d4c700c..b2e5a5753 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java @@ -12,4 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityPhantomBooster extends TileEntityBase{ + public TileEntityPhantomBooster(){ + super("phantomBooster"); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 549b7cacb..6a54495ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -22,6 +22,10 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac public String name; private String nameBefore; + public TileEntitySmileyCloud(){ + super("smileyCloud"); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 3c99a2d16..612fd438b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -17,6 +17,7 @@ import net.minecraft.item.Item; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.oredict.OreDictionary; import java.util.Random; @@ -26,6 +27,7 @@ public class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; + public static final int BUCKET = FluidContainerRegistry.BUCKET_VOLUME; public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index a1fb2f1df..b56a92ba5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -120,9 +120,17 @@ public class WorldUtil{ boolean replaceable = block.isReplaceable(world, offsetPos); //Fluids - if(replaceable && FluidContainerRegistry.isFilledContainer(stack) && !(block instanceof IFluidBlock) && !(block instanceof BlockLiquid)){ - FluidStack fluid = FluidContainerRegistry.getFluidForFilledItem(stack); - if(fluid != null && fluid.getFluid().getBlock() != null && fluid.getFluid().getBlock().canPlaceBlockAt(world, offsetPos)){ + if(replaceable && !(block instanceof IFluidBlock) && !(block instanceof BlockLiquid)){ + FluidStack fluid = null; + //TODO Remove when FluidContainerRegistry is gone + if(FluidContainerRegistry.isFilledContainer(stack)){ + fluid = FluidContainerRegistry.getFluidForFilledItem(stack); + } + else if(stack.getItem() instanceof IFluidContainerItem){ + fluid = ((IFluidContainerItem)stack.getItem()).getFluid(stack); + } + + if(fluid != null && fluid.amount >= Util.BUCKET && fluid.getFluid().getBlock() != null && fluid.getFluid().getBlock().canPlaceBlockAt(world, offsetPos)){ if(PosUtil.setBlock(offsetPos, world, fluid.getFluid().getBlock(), 0, 2)){ return stack.getItem().getContainerItem(stack); } @@ -170,56 +178,6 @@ public class WorldUtil{ } } - public static void fillBucket(FluidTank tank, ItemStack[] slots, int inputSlot, int outputSlot){ - if(slots[inputSlot] != null && tank.getFluid() != null){ - ItemStack filled = FluidContainerRegistry.fillFluidContainer(tank.getFluid(), slots[inputSlot].copy()); - if(filled != null && FluidContainerRegistry.isEmptyContainer(slots[inputSlot]) && (slots[outputSlot] == null || (slots[outputSlot].isItemEqual(filled) && slots[outputSlot].stackSize < slots[outputSlot].getMaxStackSize()))){ - int cap = FluidContainerRegistry.getContainerCapacity(tank.getFluid(), slots[inputSlot]); - if(cap > 0 && cap <= tank.getFluidAmount()){ - if(slots[outputSlot] == null){ - slots[outputSlot] = FluidContainerRegistry.fillFluidContainer(tank.getFluid(), slots[inputSlot].copy()); - } - else{ - slots[outputSlot].stackSize++; - } - - if(slots[outputSlot] != null){ - tank.drain(cap, true); - slots[inputSlot].stackSize--; - if(slots[inputSlot].stackSize <= 0){ - slots[inputSlot] = null; - } - } - } - } - } - } - - public static void emptyBucket(FluidTank tank, ItemStack[] slots, int inputSlot, int outputSlot){ - emptyBucket(tank, slots, inputSlot, outputSlot, null); - } - - public static void emptyBucket(FluidTank tank, ItemStack[] slots, int inputSlot, int outputSlot, Fluid containedFluid){ - if(slots[inputSlot] != null && FluidContainerRegistry.isFilledContainer(slots[inputSlot]) && (slots[outputSlot] == null || (slots[outputSlot].isItemEqual(FluidContainerRegistry.drainFluidContainer(slots[inputSlot].copy())) && slots[outputSlot].stackSize < slots[outputSlot].getMaxStackSize()))){ - if(containedFluid == null || FluidContainerRegistry.containsFluid(slots[inputSlot], new FluidStack(containedFluid, 0))){ - if((tank.getFluid() == null || FluidContainerRegistry.getFluidForFilledItem(slots[inputSlot]).isFluidEqual(tank.getFluid())) && tank.getCapacity()-tank.getFluidAmount() >= FluidContainerRegistry.getContainerCapacity(slots[inputSlot])){ - if(slots[outputSlot] == null){ - slots[outputSlot] = FluidContainerRegistry.drainFluidContainer(slots[inputSlot].copy()); - } - else{ - slots[outputSlot].stackSize++; - } - - tank.fill(FluidContainerRegistry.getFluidForFilledItem(slots[inputSlot]), true); - slots[inputSlot].stackSize--; - if(slots[inputSlot].stackSize <= 0){ - slots[inputSlot] = null; - } - } - } - } - } - public static EnumFacing getDirectionBySidesInOrder(int side){ switch(side){ case 0: diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiCanolaPress.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiCanolaPress.png index 4472e793fc42833b3afb92a9f9192c6991fc7f18..329ca83de04c7b164c6bcc882e00b9394ea9216f 100644 GIT binary patch literal 3050 zcmds3ZBSEZ7QPo7Rt+hNJ3wKDRtt8fKx`^l2TW9SDP;w;C@?}0K@bRpj{pe?NvK`g ztY9kc8U?AftRsfuOKO58kSIuW1H?)hVgpGaAu*aD5Dr?)fy+1Z`VOy(x< zd){--^PF>@_p+iR!%%BI)&c;43jcKPK>z@upCGW>5qc!#*QY^`x6*g--wgn*Y@|6E z0sUW-`)Pau0KCn$f5C(XUw3HHowP5G^f@t&RGgfD9LP=1$RP#f94EcIEnsWF4#LOu zNB}^d2;aLqhKx6kJjo*rt#^$6A{R&n-`eANx@;3d@kiUAm~~TVlP~Ifm47VJ*qyBn z;$~#AwS5{G$-k43z#-$Ch zxjtLbDLSn`ja0H>Vq#{p?Q??vfU^^ zB2^8|UDtuP(-gO3k*Y?%qNHdX@%@NX*k9)IiqBrUdL#}wGuZ3^MbXv}t>(B*CQMO| zqE{HeWC(56wkm0G<~U_>SZAXho-vU=Oaf^$_qH^ns3G*l4P}&fg11+1C2SvX_yj%A z1G=n>Prj03mkc-D%sg@TQ^>*8XtA>8fVmL-K`6K zm$Hd9oYn#p&&UAxCQAGNHS9Ys$gB^(CmmF{?V?=}`j<6oYJH{Z_ zT~1R4*RMBGj{pbM`gyB7MecG}l8o;isPuJ`SGEBIlFk4o8)scWOS_dju@H5C-cWAr zjR$lS3Rh8(W;z~=l@kkzY@K)+^R{GJ&P7Bneli;*bPHK!>@l{kkctxV0e<>Od&}r2 zNR?nj?jZYCNNCup(0<62ZzEno-0$!7XOi#Wy4K1xx=md!cWpR~y-LO(fFJEh0}r3{ zV(FgEX4`3f6(SFeVd>^(B{qAlJ@>owJk!C8Zb(($0^iNC(=oTEw;#ET;S^%(JQ;7< zF=h04Va1{1f$3vM1s|MW?xa_zIn+d8I!ie1RwhrfSQ51m<0o#v$Xf02^_cCs?o!z3 z*b-C}NkP@e_8c4SIf@bMaF0*nY?cX565f-Ja}?~aThm>n_G6mz*~oVfS^`8o_wlH5 zzW6nlPaNu9y1kVi=BaLH1~%v=yT(G0u*#e;^w1XN#}xNW*=7f$)F~__Le>>{9;&js z_piqC$wJWJ?<#5_M2KP`a$mCI$GmD!>(^CcC~2m#9nWWQHuB-Lcl?5?w`zKu%6~jd zQyfSEXAhzZx3oFALj2{Y#DaalkE6NU8Amfxt>h5AbG?FxaovT64r3%oTYviUz3oNN5sfL}9}5bh zM=nx@;a;Bn=Wk#|Z0Rzv+3y|fEIs7M#6u>j=WZRVTN9dNun(YaV<4>03(=kH+#|h@ zY(##?f$T0EZ;_q2{f%b_8E7pvDF2P3Kfh$pj?tu_&hu=zD^7(GToy%{ofQ!i)h;U-`!1;vlvIp1b>mT{R zr+80k5_|vQ(9?ozu-HjWADP#~(H2$-msys^2k+Jb*V7Lu*M<>rHA~z)jRq4J3&A&! zQrG+D*kLEE7`BOnGvV@s@2S%s{|D(_WtsRr!jaEArT(zpl)<~j4w<7<*>I&Ej02jh zaCD?f|N5Z+?z#rC&Q>b13z9h`9*9a`nOv{?%adE{JD_wGHD0xkq$w2)sa;V-%C2Qa zEcQUE4#BNg&nu`zfn_zM1n(21(B(r~kwHQwS&zv5dygr`ED7O})L*rX zY7$f10*{%`Pl~-6(8~xVtpBl2p9&g$7+i>iWg!|7eUJiv?xd(Dlkm1TLr1E$ru%bZ7mEB_>hM86WGBsd0`oHBEdiVVw`lya7 a$ZAHvzea2BOL=HdEPP+&-ljcAzxX#PbgK;j literal 2441 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 diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiFermentingBarrel.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiFermentingBarrel.png index 68f68415e534fc4ceb53daa50221b30a34fda130..a50af9b9847246687a660989131c9849f157ff7a 100644 GIT binary patch literal 2941 zcmds(YfzJC7RR4A5JUrwI8zYI5-3{SZAe5KHCjSYTcEoF+8rfa!Zk80NHCxvxpuc| zn9{P~VidL9oQfkxE@FrR!9s-?Fr``|RxZk|at&a(B_aF7T6EaAvmbUp>}+N-@0+~O z^PKSX;qMIH&X=yjaHj?(qenA{%Fj#=_4l zll>Vf0K9d@{6;3%tT+n4T$}n)Nb0BTgQ;oJ92Q89{!3CSDT$Tp@&RcRiJIso2n1l2 zK47=+pVOIRPxf$}n(eHDfA?)#PWoz(>g3PWg?S{par2F7My;EUYy0)iV*fiiCl1~6 z_NSbSp#1DSTqhxl^G;t!cL0OP$i|F_6=3>>I|7dJ)*fz;L(hm1Eqwbr#{Sj;(h>rw525nU5yn9Jfgqo4(ACo$K3SdOUUW zWv*?Q(*AWvFY=M5E(2>NkFj3qd1pCwY*WqlbgiPbR08` zYv&plg5#Sor33rz8#IwZW8uu`jQPlXY8jsWF;NtHzaE@%&7PQ=>=Inz%K7}TOObb# z)d$}iX*_R-D?C$07P00WJhh&N$$aqu72uJipdB^kNp~G9z#*z0BlcC?cvug^4LyLF zEbI*hd5{|1m44S}982t|Zub66XUcx5^1^GCtybP^W&x?E18xfSI;DHsW=`LOC?a-t znf!l&N5Ut60O84MK+K%P-O77K^7+S4PyD*H$3i>OAiGLQsrj&>Jp@!g`2iz#x9AJF zqkCCDF!No<#BS#*z%zcn!9xedqJH?tt1B8O znnkiJl#~!ccUEf%a3hN3XSP>qFvKrh1*~-WwO2qbF6J}YjOxR(Q& zhk&1+voZk=}wGI|;kfna`EBIr~By4}%eRXfmIzP7fJ$gahrYzt38J|Do+Cy$WWkv+#8 z(bS8vt2@^%q9Nh5VOM9)nxxTcG)3WDq{(YhsEaAMh6Y^21dN+Zq^1e;$Q|;8ST8M= z$MI2Yd9C$ETGGtS2DF^)W#b$WXp^Lzu}-Rc5!Z?aI_~5b#I?D z{pg$Vtv zdXRd)%ynQgWlQ_@*~1A)>-UPXpO15gm3jD7#*T{`{r+}lq|EdfR6%qOLs>7^`H5DJk$UH literal 2459 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6ySlo%ySsaOdU|_%`}+F& z`}-$Mm@sM5q(g@e9X@>c$dMyQj~+dC?AY<+$4{I%aq{HJM~@!;`0?ZC&!4}3{rdg; z_n$w1{{H>@@87@w|NjH+8U>>vFsMSH{O0sUpo~%y7ttJ5!lqhkHC<)F_D=AMbN@XZW%*-p%%S$a$Fwry6GfizZN@ZYRW%P7$ z45^5FJLh%TEjI~Q-&-boIUbv_sj6o3RQ*pcNndjIxT?`S(V04J#oze(yn9;CZIck# zRQo;V*xjWME8~{t-tIrEbXP6Hr1OyazSnxbD;ux;pTF++x5=zA`|7WYNqPL;o>`IK z;5u1D{DSpYi2zSLECC1IcQgRke$G`RTX^CBs zXYzlmwHBztNBF~U&c}=EtP@K@ehL=M-);ZQoJq`gkrm_VcANjY^1IHe`!e#+&bzE9 zo+))BgR7$E#uDZSc6&wbI?pjyvSoySzx|}qb@GaU12+8c^CL|g5-yw6|2tI69U%Il z@Ao98X`3Tu7-mg=pxDIpOaJZdJnNXlJ46|4&hA`Z>3QJW`ai$!o7MJkC2&{Il4AK_ z8b3koqO}Bz&hJO*tQ$HP?ABytUVSrX$6_r70g(&wJF?5ozOa<|PVW1scRwYBb<3Ci zv5YV8cHd)k|C{$qdPgK9XB9g~1n>L?hX4ou`ONtd4%_1{TU!WhxO=v-Y4QVyGt8@) zm|PhTzf|Dh@>u`>?)r}^BK-}A|IK60b9MM1ead~0Qi8c)4~N9fYhSq~94@)|WOwMX4#-F06@5;|-eozp-mE**3nQGg>0~fbx2^zfloVR{C zXF_n!YqsYNvgT&&5e=++losqiSKKkD;m^Tu0^AGA6Bum*RyHul30;W)aM$^LLP_*> z{RXq@xE(hC?yk%O3y5+o@cVG+Wx+%SInKP7+!OidJY-kaZ=5amK~~J+{Q)K&hZu*t z+t!ZW46o&r7^8|E{w=*P3fke&;xXKb4JylVl(>gqo>90^dEdjIp^-`{Tup5V08F%ye!Z-NBZk|O4UlQK1mAY0iUOtSpp zl%z4?6z>7m;t#DLhe(DppT zf!NQ5c5$^X=ZzT(uGh@z50}6AnTO$ysr>WDSKYtZFf)|Hm0o!Bod3m}-!FmUd)CMA z-}m>&$KGelHqvzj$ z`}_R#wR67SU2m^-{`Y>{|DS<{${+`RzrVb+=gHkV_siWxK9E~IUHx3vIVCg!0CZ3E AkN^Mx literal 1890 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6RR|Q5mXMsm#F#`kN1`uZSJN?%VC@4|l8c`CQpH@rz;wdX#WAEJ?(Lk5eo>Ah3~P`6`X8U8Y#l4rWHx8DXK7lTn_oil`G$QB zHhW|qBr^5S{ZzyH*wB65^TzBQ{mrZvsfR1hG@hRM_Wz%fH4MvhB>F8S9=xoRljj$W z$c|62c^1J?wyQf|;=ys#<)-`3mh%+sdUQA3jgc#WfluP#J?Ue~Tn+3Z3m8}JpLxlrSX~Wha#v9ea4W|2jiPw0*p6Ns7LhhQP6T%JB((hs$ zm_!)`Y{pjQ8e=0c`~GEfQF&^CkL!?qN`0_u+$cO)eoGH51;e={T^Gpw(fr(a&hxdXl5_2et1yWZsCE~pDkKj-?g>#Tl`ph zX1fLZgG2x7?H;~Ap8hAQR+Fn?s|Z83Cd0KLhBZqWBD@(lOk+yWWjzoz0wk91+4F}j X@X0EFiABrmL8YIktDnm{r-UW|KwL*= diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiOilGenerator.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiOilGenerator.png index 79b7459c7768278b3e87149330896abe6e551702..117ca75a8e5f0ab0059f571ed413159f549f591e 100644 GIT binary patch literal 2634 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&2?&#~tz_78O`%fY(kk47* z5n0T@z_$#98Qbry%m)fel(rIsj|=o#o)<`~!c0rj2m zba4!+h+pJvCsv>GPyz=3My<9q9+Q zNfp~AYT~bICrsZReE4=YL|2xk(TmHBE@7I3+qWbe=eEt7LYqCFxS3LUKd;a0K zLYrmlu6XVWQjffzu-UY3&$jsbzh4(lcL;x_61#Hpn(PfXrS{J@Z24sM^I^Mu+OhPa z-x+e=2+39ZKJ72lX*i!A+k7_cuf0yg`~Cm_b$|Z$_I7{U?;|Du?`OU`f0F4(%{9{- zIamKbX8rJfe*M2iS3dil{bBj{)9L>BDZh$0G1$#7j43a@=B5B`dM3bEx?y*a`pV~XrMMM9&Ur1BW7b}<@<;R##T$*Ziau?g|vx+jW63UnQ1)aAx6?2#dlm@wv?_mJ@ zZtc=ZRrgkIWY|=))Nj+egK5Pa?N&E{ZUH*EmvzEYp!BFy6E=^A>HwrwZ&0@S_Vc&R z_tN@MY&pb4tbz4HDoXzNJM+%;-~Dp?-LR>*7v_HO5tz;~a)r0?sk@?k?7pwOz9$8n zMl2So?(C|KfA{;j-Pc{yd$44b=}&@}zMJ>|N_M;!mK+y1>AdLQ;Pcm?#~ERjUH2yT z;_mBvORzfT`_Xq@_iVpk!j@?-0li;!$F|(It`}RG;At2B&A#g0($S)2v=pSMZh00R z&G5MI|L^DacE2QRw7!B5nD_7VvvThR)i!bEe|Pu7WErC% zvTklW*Wa&yw~_Tj=?rI!82JUPANJIAb0_?J`R~j2{(qs*KJKXF-ci5j-nnKeV~be% z8BqB@FYER*tb2a{|G&HS>-(?Yt_%RySFf2jGt8TwU&Po`v_Dw2_uK7FU+;Wfo3K~*$E>@jYK!+X99u6hcHr#SSzpT@WPkg&`tR=e`}z&vuAA9`VX8S!pU}I|Vf)AyYpP&7Y{kr|*{7)feAa{DY`njxgN@xNA D>xkMO literal 2121 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~61dt{?4unj9bnEkH}&M2EOGW%osY`yBjDdQQ{g= z5}cn_Ql40p%21G)nOCBhms+A=qGzCIn%ZiV3M^38d%8G=RK&fV!yP<3K!SDaw~5pL z{IAcpKT+hn_~>fGz9(o&aJBc&}+P=9V- zcD?zZzv-`hvIRc;?%}^L`rZEg3S&(NMy`YnsZiqr8FuzCi7a4X)o@_^lBdyN_udUe z1JwjHFo_&UI1M#+F+-6gNDWB%#oYjg+Izhq8mI=Ox8dNlh2_onc==vG`^EG_?uzkm z6UN`hZPB71{;b_uzt4U-LzQ`6*nun6aq|Kh_DXNJW?lAZt5x0^jfQ)@Rq9L1AFHv1 zY|XUIKf6aD;KJ@gWu{wJ5e`#lo2SRwG0Vxnyt_k?G4%J5Lq6A>1sIRZx?f^BBPM0Y zwCdK&RTGQZ|FE-O*ga7#q5jX&6T*jB_BbtTn5>?>q@nQJW=YM2sy}Dhm{?_gpJ%IK zyRds9*rQwl49&XE@7eZB%UnBqozp_m`@l!zkHUW{Vi>s=lsiNGzJP%(y6qlsmAS>5 z*;hF&axC5_-bs4Sy2k%NnTdh!?b;;`hqw7v#Tc>XlzlD!x-PG=FcBgvVsMXXchrqa z#@E6dq`eMU{BJipc#eBT;LrKJ;*zX?s%#z~W{R^8=B${#>%rM|yRNU^zdkzgvnJE3 z81^kc8P?a>{L}jLP$@ORI_F#a*&na^wK57BA9vqo6t4`G$m%?N_p%A|tE1~nBNrTH z^_#|t_yMHguZd^@C06NFd;p~*a19@|d;=l7R%s)~l zai8JXr>#>p9t7ksdAwZbxTv*$LMfA-H0y+o8Vx Date: Sat, 7 May 2016 02:49:03 +0200 Subject: [PATCH 099/322] Cleanup! ~ --- .../actuallyadditions/mod/ActuallyAdditions.java | 5 +++-- .../mod/blocks/BlockColoredLamp.java | 1 - .../actuallyadditions/mod/blocks/BlockMisc.java | 2 -- .../mod/blocks/BlockPhantom.java | 2 -- .../mod/blocks/BlockWallAA.java | 5 +++-- .../mod/blocks/BlockWildPlant.java | 2 -- .../mod/blocks/base/BlockBase.java | 2 -- .../mod/blocks/base/BlockBushBase.java | 2 -- .../mod/blocks/base/BlockPlant.java | 2 -- .../mod/blocks/base/BlockStair.java | 2 -- .../mod/config/values/ConfigBoolValues.java | 1 - .../mod/creative/CreativeTab.java | 1 - .../mod/inventory/ContainerCanolaPress.java | 6 +----- .../mod/inventory/ContainerCoffeeMachine.java | 3 --- .../mod/inventory/ContainerEnergizer.java | 2 +- .../mod/inventory/ContainerFermentingBarrel.java | 6 +----- .../mod/inventory/ContainerFluidCollector.java | 2 -- .../actuallyadditions/mod/items/InitItems.java | 6 ++++-- .../actuallyadditions/mod/items/ItemCrystal.java | 1 - .../actuallyadditions/mod/items/ItemDust.java | 2 -- .../actuallyadditions/mod/items/ItemFoods.java | 1 - .../actuallyadditions/mod/items/ItemJams.java | 2 -- .../actuallyadditions/mod/items/ItemMisc.java | 1 - .../mod/items/ItemPotionRing.java | 2 -- .../mod/items/base/ItemArmorAA.java | 3 --- .../mod/items/base/ItemEnergy.java | 2 -- .../mod/items/base/ItemFoodBase.java | 2 -- .../mod/items/base/ItemHoeAA.java | 2 -- .../mod/items/base/ItemSeed.java | 2 -- .../mod/items/base/ItemSwordAA.java | 2 -- .../mod/items/lens/LensColor.java | 3 --- .../mod/jei/JEIActuallyAdditionsPlugin.java | 3 +-- .../actuallyadditions/mod/proxy/ServerProxy.java | 1 - .../mod/tile/TileEntityAtomicReconstructor.java | 16 ++++++++-------- .../mod/tile/TileEntityBase.java | 2 +- .../mod/tile/TileEntityCanolaPress.java | 1 - .../mod/tile/TileEntityCoffeeMachine.java | 1 - .../mod/tile/TileEntityFermentingBarrel.java | 2 -- .../mod/tile/TileEntityInventoryBase.java | 1 - .../mod/tile/TileEntityMiner.java | 3 --- .../mod/tile/TileEntityOilGenerator.java | 1 - .../mod/tile/TileEntityPhantomRedstoneface.java | 1 - .../mod/tile/TileEntityPhantomface.java | 1 - .../actuallyadditions/mod/util/WorldUtil.java | 2 +- 44 files changed, 24 insertions(+), 88 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index b171a028d..96e72c757 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -28,7 +28,9 @@ import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; -import de.ellpeck.actuallyadditions.mod.misc.*; +import de.ellpeck.actuallyadditions.mod.misc.DispenserHandlerFertilize; +import de.ellpeck.actuallyadditions.mod.misc.DungeonLoot; +import de.ellpeck.actuallyadditions.mod.misc.WorldData; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.ore.InitOreDict; import de.ellpeck.actuallyadditions.mod.proxy.IProxy; @@ -40,7 +42,6 @@ import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; -import net.minecraft.init.Items; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 913c54c9c..eeb54a9ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -30,7 +30,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index 041d56c53..1e986cbb0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -25,7 +24,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index 6bde56158..776752fc3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -17,8 +17,6 @@ import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index e75e7b0c4..43024f909 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -34,10 +34,11 @@ import java.util.List; public class BlockWallAA extends BlockBase{ - protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; - protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] {AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)}; + protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[]{new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; + protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[]{AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)}; private int meta; + public BlockWallAA(String name, Block base){ this(name, base, 0); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index ccdfd082a..e51460d6f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBushBase; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheWildPlants; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; @@ -31,7 +30,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.IBlockAccess; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index c37f09f56..c4f68b925 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -21,7 +20,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class BlockBase extends Block{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index 8d1cecb11..e2760b900 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.BlockBush; import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyInteger; @@ -21,7 +20,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class BlockBushBase extends BlockBush{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 39b90257d..68025798e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.BlockCrops; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -23,7 +22,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index 2a4b4c7e9..9635e8238 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -13,13 +13,11 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockStairs; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class BlockStair extends BlockStairs{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 94baf19d2..f1fc862da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.config.values; import de.ellpeck.actuallyadditions.mod.config.ConfigCategories; -import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; public enum ConfigBoolValues{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index ca94fda11..cd9153477 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -20,7 +20,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.ForgeModContainer; -import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.UniversalBucket; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index ef0f9321b..42af51022 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -10,8 +10,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; -import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; @@ -22,8 +20,6 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; @InventoryContainer public class ContainerCanolaPress extends Container{ @@ -52,7 +48,7 @@ public class ContainerCanolaPress extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index ecbe9a177..c07c0d0bc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -22,9 +22,6 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; @InventoryContainer public class ContainerCoffeeMachine extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 08942436b..5259de3b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -28,7 +28,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @InventoryContainer public class ContainerEnergizer extends Container{ - public static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[] {EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; + public static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[]{EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; private TileEntityEnergizer energizer; public ContainerEnergizer(final EntityPlayer player, TileEntityBase tile){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index c0dba6b6a..bdd5eb37c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -10,8 +10,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; -import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFermentingBarrel; import invtweaks.api.container.InventoryContainer; @@ -20,8 +18,6 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; @InventoryContainer public class ContainerFermentingBarrel extends Container{ @@ -48,7 +44,7 @@ public class ContainerFermentingBarrel extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 7dafd4566..3d14d6010 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; -import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidCollector; import invtweaks.api.container.InventoryContainer; @@ -19,7 +18,6 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; @InventoryContainer public class ContainerFluidCollector extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index d95fe1b37..e6038a4ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -11,8 +11,10 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.items.base.*; +import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; +import de.ellpeck.actuallyadditions.mod.items.base.ItemHoeAA; +import de.ellpeck.actuallyadditions.mod.items.base.ItemSeed; +import de.ellpeck.actuallyadditions.mod.items.base.ItemSwordAA; import de.ellpeck.actuallyadditions.mod.items.lens.ItemLens; import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 0ae367752..a18fe5d08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.BlockCrystal; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 2bf2c4e04..1abfdd164 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; @@ -22,7 +21,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 4acc25e4f..bc5d797b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 8c6b53d09..39aa9b4f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheJams; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; @@ -28,7 +27,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 00999d360..e32d56e64 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index cec98f1e3..9fe1c4f14 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.ThePotionRings; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; @@ -26,7 +25,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 34b8e751f..8a1a8ae15 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -12,14 +12,11 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnergizer; -import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnervator; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class ItemArmorAA extends ItemArmor{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 4a9ac52bf..98634a849 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -13,14 +13,12 @@ package de.ellpeck.actuallyadditions.mod.items.base; import cofh.api.energy.ItemEnergyContainer; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index 1fce35a81..8312c2da7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -12,11 +12,9 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class ItemFoodBase extends ItemFood{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index d7db327b8..8bc6bfdcc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -12,13 +12,11 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; public class ItemHoeAA extends ItemHoe{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 452a609f3..1ff8c36a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -22,7 +21,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemSeeds; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index 892f2cf71..573bfa58a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -13,12 +13,10 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; -import net.minecraft.util.ResourceLocation; public class ItemSwordAA extends ItemSword{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index a6ed85598..905e27d74 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -15,14 +15,11 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; -import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index a4a60486f..1d45ffa0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -32,7 +32,6 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import mezz.jei.api.*; import mezz.jei.api.recipe.VanillaRecipeCategoryUid; import mezz.jei.api.recipe.transfer.IRecipeTransferRegistry; -import net.minecraft.inventory.ContainerWorkbench; import net.minecraft.item.ItemStack; @JEIPlugin @@ -41,7 +40,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ @Override public void register(IModRegistry registry){ IJeiHelpers helpers = registry.getJeiHelpers(); - + registry.addRecipeCategories( new BookletRecipeCategory(helpers.getGuiHelper()), new CoffeeMachineRecipeCategory(helpers.getGuiHelper()), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index b7c17bdd4..e00ad7c7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.proxy; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index f9f655bb9..49c5760e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -36,15 +36,22 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple public static final int ENERGY_USE = 1000; public EnergyStorage storage = new EnergyStorage(300000); + public int counter; private int currentTime; private boolean activateOnceWithSignal; private int oldEnergy; - public int counter; public TileEntityAtomicReconstructor(){ super(1, "reconstructor"); } + public static void shootLaser(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, Lens currentLens){ + if(!ConfigValues.lessSound){ + world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); + } + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 64)); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); @@ -122,13 +129,6 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return this.counter >= 500 ? Lenses.LENS_DISRUPTION : Lenses.LENS_NONE; } - public static void shootLaser(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, Lens currentLens){ - if(!ConfigValues.lessSound){ - world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); - } - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 64)); - } - @Override public int getX(){ return this.getPos().getX(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 90a9f2f5f..5cbaa5750 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -30,8 +30,8 @@ import net.minecraftforge.fml.common.registry.GameRegistry; public abstract class TileEntityBase extends TileEntity implements ITickable{ public boolean isRedstonePowered; - protected int ticksElapsed; public String name; + protected int ticksElapsed; public TileEntityBase(String name){ this.name = "container."+ModUtil.MOD_ID+"."+name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index e59983c75..d11cfdab2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 7c2996d3b..3dffad89f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -20,7 +20,6 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index a615575b6..b2775098e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -13,8 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.*; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 66512d9a2..bd3b368f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index ad8ea4dcc..71218f421 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -26,16 +26,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.world.BlockEvent; import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; -import java.util.ArrayList; import java.util.List; public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyReceiver, IButtonReactor, IEnergySaver, IEnergyDisplay{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 0f36ed4c8..970dd4a83 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.*; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java index 2d3e9e0c8..bda187eec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -1,6 +1,5 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index c8232f301..bcd426668 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index b56a92ba5..d8e407ad9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -124,7 +124,7 @@ public class WorldUtil{ FluidStack fluid = null; //TODO Remove when FluidContainerRegistry is gone if(FluidContainerRegistry.isFilledContainer(stack)){ - fluid = FluidContainerRegistry.getFluidForFilledItem(stack); + fluid = FluidContainerRegistry.getFluidForFilledItem(stack); } else if(stack.getItem() instanceof IFluidContainerItem){ fluid = ((IFluidContainerItem)stack.getItem()).getFluid(stack); From 4b548dd0a926a2412439f9bbb2838965e54b0c89 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 7 May 2016 12:55:59 +0200 Subject: [PATCH 100/322] Re-implemented village structures Villager and chest still to go --- .../mod/gen/InitVillager.java | 8 +- .../mod/gen/JamVillagerTradeHandler.java | 2 - .../gen/VillageComponentCustomCropField.java | 76 +++--- .../mod/gen/VillageComponentJamHouse.java | 226 ++++++++++-------- .../gen/VillageCustomCropFieldHandler.java | 14 +- .../mod/gen/VillageJamHouseHandler.java | 14 +- .../mod/proxy/ClientProxy.java | 1 - 7 files changed, 185 insertions(+), 156 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java index fdb8f3731..46c9cefe3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.gen; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.world.gen.structure.MapGenStructureIO; +import net.minecraftforge.fml.common.registry.VillagerRegistry; public class InitVillager{ @@ -42,15 +43,14 @@ public class InitVillager{ ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(InitItems.itemJams, 1, i), 1, 1, 10)); } ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(Items.glass_bottle), 1, 2, 30)); - ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(Items.potionitem), 1, 1, 20)); + ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(Items.potionitem), 1, 1, 20));*/ VillagerRegistry.instance().registerVillageCreationHandler(new VillageJamHouseHandler()); - MapGenStructureIO.func_143031_a(VillageComponentJamHouse.class, ModUtil.MOD_ID+":jamHouseStructure");*/ + MapGenStructureIO.registerStructureComponent(VillageComponentJamHouse.class, ModUtil.MOD_ID+":jamHouseStructure"); } private static void initCustomCropFieldPart(){ - //TODO Fix village - //VillagerRegistry.instance().registerVillageCreationHandler(new VillageCustomCropFieldHandler()); + VillagerRegistry.instance().registerVillageCreationHandler(new VillageCustomCropFieldHandler()); MapGenStructureIO.registerStructureComponent(VillageComponentCustomCropField.class, ModUtil.MOD_ID+":customCropFieldStructure"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index a576cd9e5..5e3bdb36f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -23,7 +23,6 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.Random; -//TODO Fix the villager public class JamVillagerTradeHandler{ private ArrayList trades = new ArrayList(); @@ -49,7 +48,6 @@ public class JamVillagerTradeHandler{ this.trades.add(new Trade(stack, minSize, maxSize)); } - //TODO Fix the Villager //@Override @SuppressWarnings("all") public void manipulateTradesForVillager(EntityVillager villager, MerchantRecipeList recipeList, Random rand){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index 2106b9729..53207952f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -10,8 +10,20 @@ package de.ellpeck.actuallyadditions.mod.gen; +import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; +import java.util.List; +import java.util.Random; + public class VillageComponentCustomCropField extends StructureVillagePieces.House1{ private static final int xSize = 13; @@ -25,13 +37,12 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous } - //TODO Fix village - /*public VillageComponentCustomCropField(StructureBoundingBox boundingBox, int par5){ - this.coordBaseMode = par5; + public VillageComponentCustomCropField(StructureBoundingBox boundingBox, EnumFacing par5){ + this.setCoordBaseMode(par5); this.boundingBox = boundingBox; } - public static VillageComponentCustomCropField buildComponent(List pieces, int p1, int p2, int p3, int p4){ + public static VillageComponentCustomCropField buildComponent(List pieces, int p1, int p2, int p3, EnumFacing p4){ StructureBoundingBox boundingBox = StructureBoundingBox.getComponentToAddBoundingBox(p1, p2, p3, 0, 0, 0, xSize, ySize, zSize, p4); return canVillageGoDeeper(boundingBox) && StructureComponent.findIntersecting(pieces, boundingBox) == null ? new VillageComponentCustomCropField(boundingBox, p4) : null; } @@ -46,13 +57,13 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous this.boundingBox.offset(0, this.averageGroundLevel-this.boundingBox.maxY+ySize-1, 0); } - this.fillWithBlocks(world, sbb, 0, 0, 0, xSize-1, ySize-1, zSize-1, Blocks.air); + this.fillWithBlocks(world, sbb, 0, 0, 0, xSize-1, ySize-1, zSize-1, Blocks.AIR); this.spawnActualHouse(world, rand, sbb); for(int i = 0; i < xSize; i++){ for(int j = 0; j < zSize; j++){ this.clearCurrentPositionBlocksUpwards(world, i, ySize, j, sbb); - this.func_151554_b(world, Blocks.dirt, 0, i, -1, j, sbb); + this.replaceAirAndLiquidDownwards(world, Blocks.DIRT.getDefaultState(), i, -1, j, sbb); } } @@ -60,44 +71,45 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous } public void fillWithBlocks(World world, StructureBoundingBox sbb, int minX, int minY, int minZ, int maxX, int maxY, int maxZ, Block block){ - this.fillWithBlocks(world, sbb, minX, minY, minZ, maxX, maxY, maxZ, block, block, false); + this.fillWithBlocks(world, sbb, minX, minY, minZ, maxX, maxY, maxZ, block.getDefaultState(), block.getDefaultState(), false); } public void spawnActualHouse(World world, Random rand, StructureBoundingBox sbb){ - this.fillWithBlocks(world, sbb, 1, 0, 1, 2, 0, 7, Blocks.farmland); - this.fillWithBlocks(world, sbb, 4, 0, 1, 5, 0, 7, Blocks.farmland); - this.fillWithBlocks(world, sbb, 7, 0, 1, 8, 0, 7, Blocks.farmland); - this.fillWithBlocks(world, sbb, 10, 0, 1, 11, 0, 7, Blocks.farmland); - this.fillWithBlocks(world, sbb, 0, 0, 0, 0, 0, 8, Blocks.log); - this.fillWithBlocks(world, sbb, 6, 0, 0, 6, 0, 8, Blocks.log); - this.fillWithBlocks(world, sbb, 12, 0, 0, 12, 0, 8, Blocks.log); - this.fillWithBlocks(world, sbb, 1, 0, 0, 11, 0, 0, Blocks.log); - this.fillWithBlocks(world, sbb, 1, 0, 8, 11, 0, 8, Blocks.log); - this.fillWithBlocks(world, sbb, 3, 0, 1, 3, 0, 7, Blocks.water); - this.fillWithBlocks(world, sbb, 9, 0, 1, 9, 0, 7, Blocks.water); + this.fillWithBlocks(world, sbb, 1, 0, 1, 2, 0, 7, Blocks.FARMLAND); + this.fillWithBlocks(world, sbb, 4, 0, 1, 5, 0, 7, Blocks.FARMLAND); + this.fillWithBlocks(world, sbb, 7, 0, 1, 8, 0, 7, Blocks.FARMLAND); + this.fillWithBlocks(world, sbb, 10, 0, 1, 11, 0, 7, Blocks.FARMLAND); + this.fillWithBlocks(world, sbb, 0, 0, 0, 0, 0, 8, Blocks.LOG); + this.fillWithBlocks(world, sbb, 6, 0, 0, 6, 0, 8, Blocks.LOG); + this.fillWithBlocks(world, sbb, 12, 0, 0, 12, 0, 8, Blocks.LOG); + this.fillWithBlocks(world, sbb, 1, 0, 0, 11, 0, 0, Blocks.LOG); + this.fillWithBlocks(world, sbb, 1, 0, 8, 11, 0, 8, Blocks.LOG); + this.fillWithBlocks(world, sbb, 3, 0, 1, 3, 0, 7, Blocks.WATER); + this.fillWithBlocks(world, sbb, 9, 0, 1, 9, 0, 7, Blocks.WATER); for(int i = 1; i <= 7; ++i){ - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 1, 1, i, sbb); - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 2, 1, i, sbb); - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 4, 1, i, sbb); - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 5, 1, i, sbb); - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 7, 1, i, sbb); - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 8, 1, i, sbb); - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 10, 1, i, sbb); - this.placeBlockAtCurrentPosition(world, this.getRandomCropType(rand), MathHelper.getRandomIntegerInRange(rand, 1, 7), 11, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 1, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 2, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 4, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 5, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 7, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 8, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 10, 1, i, sbb); + this.setBlockState(world, this.getRandomCropType(rand), 11, 1, i, sbb); } } - private Block getRandomCropType(Random rand){ + private IBlockState getRandomCropType(Random rand){ + int randomMeta = MathHelper.getRandomIntegerInRange(rand, 1, 7); switch(rand.nextInt(4)){ case 0: - return InitBlocks.blockFlax; + return InitBlocks.blockFlax.getStateFromMeta(randomMeta); case 1: - return InitBlocks.blockCoffee; + return InitBlocks.blockCoffee.getStateFromMeta(randomMeta); case 2: - return InitBlocks.blockRice; + return InitBlocks.blockRice.getStateFromMeta(randomMeta); default: - return InitBlocks.blockCanola; + return InitBlocks.blockCanola.getStateFromMeta(randomMeta); } - }*/ + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index 7fe2d8b9e..a836e2abf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -10,8 +10,23 @@ package de.ellpeck.actuallyadditions.mod.gen; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; +import net.minecraft.block.*; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.WeightedRandomChestContent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; +import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; +import java.util.List; +import java.util.Random; + public class VillageComponentJamHouse extends StructureVillagePieces.House1{ private static final int xSize = 11; @@ -25,13 +40,12 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ } - //TODO Fix village - /*public VillageComponentJamHouse(StructureBoundingBox boundingBox, int par5){ - this.coordBaseMode = par5; + public VillageComponentJamHouse(StructureBoundingBox boundingBox, EnumFacing par5){ + this.setCoordBaseMode(par5); this.boundingBox = boundingBox; } - public static VillageComponentJamHouse buildComponent(List pieces, int p1, int p2, int p3, int p4){ + public static VillageComponentJamHouse buildComponent(List pieces, int p1, int p2, int p3, EnumFacing p4){ StructureBoundingBox boundingBox = StructureBoundingBox.getComponentToAddBoundingBox(p1, p2, p3, 0, 0, 0, xSize, ySize, zSize, p4); return canVillageGoDeeper(boundingBox) && StructureComponent.findIntersecting(pieces, boundingBox) == null ? new VillageComponentJamHouse(boundingBox, p4) : null; } @@ -46,13 +60,13 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ this.boundingBox.offset(0, this.averageGroundLevel-this.boundingBox.maxY+ySize-1, 0); } - this.fillWithBlocks(world, sbb, 0, 0, 0, xSize-1, ySize-1, zSize-1, Blocks.air); + this.fillWithBlocks(world, sbb, 0, 0, 0, xSize-1, ySize-1, zSize-1, Blocks.AIR); this.spawnActualHouse(world, rand, sbb); for(int i = 0; i < xSize; i++){ for(int j = 0; j < zSize; j++){ this.clearCurrentPositionBlocksUpwards(world, i, ySize, j, sbb); - this.func_151554_b(world, Blocks.cobblestone, 0, i, -1, j, sbb); + this.replaceAirAndLiquidDownwards(world, Blocks.COBBLESTONE.getDefaultState(), i, -1, j, sbb); } } @@ -62,131 +76,133 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ } public void fillWithBlocks(World world, StructureBoundingBox sbb, int minX, int minY, int minZ, int maxX, int maxY, int maxZ, Block block){ - this.fillWithBlocks(world, sbb, minX, minY, minZ, maxX, maxY, maxZ, block, block, false); + this.fillWithBlocks(world, sbb, minX, minY, minZ, maxX, maxY, maxZ, block.getDefaultState(), block.getDefaultState(), false); } public void spawnActualHouse(World world, Random rand, StructureBoundingBox sbb){ //Base - this.fillWithBlocks(world, sbb, 1, 0, 8, 9, 0, 10, Blocks.grass); - this.fillWithBlocks(world, sbb, 0, 0, 0, 1, 0, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 2, 0, 0, 4, 0, 1, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 9, 0, 0, 10, 0, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 6, 0, 0, 8, 0, 1, Blocks.cobblestone); - this.placeBlockAtCurrentPosition(world, Blocks.stone_stairs, this.getMetadataWithOffset(Blocks.stone_stairs, 3), 5, 0, 0, sbb); - this.fillWithBlocks(world, sbb, 2, 0, 7, 3, 0, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 5, 0, 7, 8, 0, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 10, 0, 8, 10, 0, 11, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 0, 0, 8, 0, 0, 11, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 0, 0, 11, 10, 0, 11, Blocks.cobblestone); - this.fillWithMetadataBlocks(world, sbb, 2, 0, 2, 8, 0, 6, Blocks.planks, 1, Blocks.planks, 1, false); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 1, 5, 0, 1, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 1, 4, 0, 7, sbb); + this.fillWithBlocks(world, sbb, 1, 0, 8, 9, 0, 10, Blocks.GRASS); + this.fillWithBlocks(world, sbb, 0, 0, 0, 1, 0, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 2, 0, 0, 4, 0, 1, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 9, 0, 0, 10, 0, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 6, 0, 0, 8, 0, 1, Blocks.COBBLESTONE); + this.setBlockState(world, Blocks.STONE_STAIRS.getStateFromMeta(3), 5, 0, 0, sbb); + this.fillWithBlocks(world, sbb, 2, 0, 7, 3, 0, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 5, 0, 7, 8, 0, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 10, 0, 8, 10, 0, 11, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 0, 0, 8, 0, 0, 11, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 0, 0, 11, 10, 0, 11, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 2, 0, 2, 8, 0, 6, Blocks.PLANKS.getStateFromMeta(1), Blocks.PLANKS.getStateFromMeta(1), false); + this.setBlockState(world, Blocks.PLANKS.getStateFromMeta(1), 5, 0, 1, sbb); + this.setBlockState(world, Blocks.PLANKS.getStateFromMeta(1), 4, 0, 7, sbb); - //Garden Fence - this.fillWithBlocks(world, sbb, 0, 1, 8, 0, 1, 11, Blocks.fence); - this.fillWithBlocks(world, sbb, 10, 1, 8, 10, 1, 11, Blocks.fence); - this.fillWithBlocks(world, sbb, 1, 1, 11, 9, 1, 11, Blocks.fence); + //Garden FENCE + this.fillWithBlocks(world, sbb, 0, 1, 8, 0, 1, 11, Blocks.OAK_FENCE); + this.fillWithBlocks(world, sbb, 10, 1, 8, 10, 1, 11, Blocks.OAK_FENCE); + this.fillWithBlocks(world, sbb, 1, 1, 11, 9, 1, 11, Blocks.OAK_FENCE); //Side Walls for(int i = 0; i < 2; i++){ - this.fillWithBlocks(world, sbb, 1+i*8, 1, 1, 1+i*8, 1, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 1+i*8, 1, 1, 1+i*8, 4, 1, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 1+i*8, 1, 7, 1+i*8, 4, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 1+i*8, 4, 2, 1+i*8, 5, 6, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 1+i*8, 3, 2, 1+i*8, 3, 6, Blocks.planks); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 1+i*8, 2, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 1+i*8, 2, 6, sbb); - this.fillWithBlocks(world, sbb, 1+i*8, 2, 3, 1+i*8, 2, 5, Blocks.glass_pane); + this.fillWithBlocks(world, sbb, 1+i*8, 1, 1, 1+i*8, 1, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 1+i*8, 1, 1, 1+i*8, 4, 1, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 1+i*8, 1, 7, 1+i*8, 4, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 1+i*8, 4, 2, 1+i*8, 5, 6, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 1+i*8, 3, 2, 1+i*8, 3, 6, Blocks.PLANKS); + this.setBlockState(world, Blocks.PLANKS.getStateFromMeta(0), 1+i*8, 2, 2, sbb); + this.setBlockState(world, Blocks.PLANKS.getStateFromMeta(0), 1+i*8, 2, 6, sbb); + this.fillWithBlocks(world, sbb, 1+i*8, 2, 3, 1+i*8, 2, 5, Blocks.GLASS_PANE); } //Front Wall - this.fillWithBlocks(world, sbb, 7, 1, 1, 8, 4, 1, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 2, 1, 1, 3, 4, 1, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 4, 4, 1, 7, 4, 1, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 6, 1, 1, 6, 3, 1, Blocks.planks); - this.fillWithBlocks(world, sbb, 4, 1, 1, 4, 3, 1, Blocks.planks); - this.fillWithBlocks(world, sbb, 5, 3, 1, 5, 3, 1, Blocks.planks); - this.placeDoorAtCurrentPosition(world, sbb, rand, 5, 1, 1, this.getMetadataWithOffset(Blocks.wooden_door, 1)); + this.fillWithBlocks(world, sbb, 7, 1, 1, 8, 4, 1, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 2, 1, 1, 3, 4, 1, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 4, 4, 1, 7, 4, 1, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 6, 1, 1, 6, 3, 1, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 4, 1, 1, 4, 3, 1, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 5, 3, 1, 5, 3, 1, Blocks.PLANKS); + this.setBlockState(world, Blocks.SPRUCE_DOOR.getDefaultState(), 5, 1, 1, sbb); + this.setBlockState(world, Blocks.SPRUCE_DOOR.getDefaultState().withProperty(BlockDoor.HALF, BlockDoor.EnumDoorHalf.UPPER), 5, 2, 1, sbb); + //Back Wall - this.fillWithBlocks(world, sbb, 2, 1, 7, 2, 4, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 3, 1, 7, 3, 3, 7, Blocks.planks); - this.fillWithBlocks(world, sbb, 4, 3, 7, 8, 3, 7, Blocks.planks); - this.fillWithBlocks(world, sbb, 3, 4, 7, 8, 4, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 5, 1, 7, 5, 2, 7, Blocks.planks); - this.fillWithBlocks(world, sbb, 6, 1, 7, 8, 1, 7, Blocks.cobblestone); - this.fillWithBlocks(world, sbb, 6, 2, 7, 7, 2, 7, Blocks.glass_pane); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 8, 2, 7, sbb); - this.placeDoorAtCurrentPosition(world, sbb, rand, 4, 1, 7, this.getMetadataWithOffset(Blocks.wooden_door, 1)); + this.fillWithBlocks(world, sbb, 2, 1, 7, 2, 4, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 3, 1, 7, 3, 3, 7, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 4, 3, 7, 8, 3, 7, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 3, 4, 7, 8, 4, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 5, 1, 7, 5, 2, 7, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 6, 1, 7, 8, 1, 7, Blocks.COBBLESTONE); + this.fillWithBlocks(world, sbb, 6, 2, 7, 7, 2, 7, Blocks.GLASS_PANE); + this.setBlockState(world, Blocks.PLANKS.getStateFromMeta(0), 8, 2, 7, sbb); + this.setBlockState(world, Blocks.SPRUCE_DOOR.getDefaultState().withProperty(BlockDoor.FACING, EnumFacing.SOUTH), 4, 1, 7, sbb); + this.setBlockState(world, Blocks.SPRUCE_DOOR.getDefaultState().withProperty(BlockDoor.FACING, EnumFacing.SOUTH).withProperty(BlockDoor.HALF, BlockDoor.EnumDoorHalf.UPPER), 4, 2, 7, sbb); - //Fence Supports - this.fillWithBlocks(world, sbb, 0, 1, 8, 0, 3, 8, Blocks.fence); - this.fillWithBlocks(world, sbb, 10, 1, 8, 10, 3, 8, Blocks.fence); - this.fillWithBlocks(world, sbb, 0, 1, 0, 0, 3, 0, Blocks.fence); - this.fillWithBlocks(world, sbb, 10, 1, 0, 10, 3, 0, Blocks.fence); + //FENCE Supports + this.fillWithBlocks(world, sbb, 0, 1, 8, 0, 3, 8, Blocks.OAK_FENCE); + this.fillWithBlocks(world, sbb, 10, 1, 8, 10, 3, 8, Blocks.OAK_FENCE); + this.fillWithBlocks(world, sbb, 0, 1, 0, 0, 3, 0, Blocks.OAK_FENCE); + this.fillWithBlocks(world, sbb, 10, 1, 0, 10, 3, 0, Blocks.OAK_FENCE); //Roof - this.fillWithBlocks(world, sbb, 1, 6, 3, 9, 6, 5, Blocks.planks); - this.fillWithMetadataBlocks(world, sbb, 0, 4, 0, 10, 4, 0, Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 3), Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 3), false); - this.fillWithMetadataBlocks(world, sbb, 0, 5, 1, 10, 5, 1, Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 3), Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 3), false); - this.fillWithMetadataBlocks(world, sbb, 0, 6, 2, 10, 6, 2, Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 3), Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 3), false); - this.fillWithMetadataBlocks(world, sbb, 0, 4, 8, 10, 4, 8, Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 2), Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 2), false); - this.fillWithMetadataBlocks(world, sbb, 0, 5, 7, 10, 5, 7, Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 2), Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 2), false); - this.fillWithMetadataBlocks(world, sbb, 0, 6, 6, 10, 6, 6, Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 2), Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 2), false); - this.fillWithBlocks(world, sbb, 0, 7, 3, 10, 7, 5, Blocks.wooden_slab); + this.fillWithBlocks(world, sbb, 1, 6, 3, 9, 6, 5, Blocks.PLANKS); + IBlockState stairSouth = Blocks.OAK_STAIRS.getDefaultState().withProperty(BlockStairs.FACING, EnumFacing.SOUTH); + IBlockState stairNorth = Blocks.OAK_STAIRS.getDefaultState().withProperty(BlockStairs.FACING, EnumFacing.NORTH); + this.fillWithBlocks(world, sbb, 0, 4, 0, 10, 4, 0, stairNorth, stairNorth, false); + this.fillWithBlocks(world, sbb, 0, 5, 1, 10, 5, 1, stairNorth, stairNorth, false); + this.fillWithBlocks(world, sbb, 0, 6, 2, 10, 6, 2, stairNorth, stairNorth, false); + this.fillWithBlocks(world, sbb, 0, 4, 8, 10, 4, 8, stairSouth, stairSouth, false); + this.fillWithBlocks(world, sbb, 0, 5, 7, 10, 5, 7, stairSouth, stairSouth, false); + this.fillWithBlocks(world, sbb, 0, 6, 6, 10, 6, 6, stairSouth, stairSouth, false); + this.fillWithBlocks(world, sbb, 0, 7, 3, 10, 7, 5, Blocks.WOODEN_SLAB); //Roof Gadgets - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 0, 4, 1, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 0, 5, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 10, 4, 1, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 10, 5, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 0, 4, 7, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 0, 5, 6, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 10, 4, 7, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.planks, 0, 10, 5, 6, sbb); - this.fillWithBlocks(world, sbb, 0, 6, 3, 0, 6, 5, Blocks.planks); - this.fillWithBlocks(world, sbb, 10, 6, 3, 10, 6, 5, Blocks.planks); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 0, 4, 1, sbb); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 0, 5, 2, sbb); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 10, 4, 1, sbb); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 10, 5, 2, sbb); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 0, 4, 7, sbb); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 0, 5, 6, sbb); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 10, 4, 7, sbb); + this.setBlockState(world, Blocks.PLANKS.getDefaultState(), 10, 5, 6, sbb); + this.fillWithBlocks(world, sbb, 0, 6, 3, 0, 6, 5, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 10, 6, 3, 10, 6, 5, Blocks.PLANKS); //Counter - this.fillWithMetadataBlocks(world, sbb, 6, 3, 2, 6, 3, 4, Blocks.wooden_slab, 8, Blocks.wooden_slab, 8, false); - this.fillWithMetadataBlocks(world, sbb, 5, 3, 4, 5, 3, 6, Blocks.wooden_slab, 8, Blocks.wooden_slab, 8, false); - this.fillWithBlocks(world, sbb, 6, 1, 2, 6, 1, 4, Blocks.planks); - this.fillWithBlocks(world, sbb, 5, 1, 4, 5, 1, 5, Blocks.planks); - this.fillWithBlocks(world, sbb, 6, 4, 2, 6, 5, 2, Blocks.fence); - this.fillWithBlocks(world, sbb, 5, 4, 4, 5, 5, 4, Blocks.fence); - this.fillWithBlocks(world, sbb, 5, 4, 6, 5, 5, 6, Blocks.fence); + this.fillWithBlocks(world, sbb, 6, 3, 2, 6, 3, 4, Blocks.WOODEN_SLAB.getStateFromMeta(8), Blocks.WOODEN_SLAB.getStateFromMeta(8), false); + this.fillWithBlocks(world, sbb, 5, 3, 4, 5, 3, 6, Blocks.WOODEN_SLAB.getStateFromMeta(8), Blocks.WOODEN_SLAB.getStateFromMeta(8), false); + this.fillWithBlocks(world, sbb, 6, 1, 2, 6, 1, 4, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 5, 1, 4, 5, 1, 5, Blocks.PLANKS); + this.fillWithBlocks(world, sbb, 6, 4, 2, 6, 5, 2, Blocks.OAK_FENCE); + this.fillWithBlocks(world, sbb, 5, 4, 4, 5, 5, 4, Blocks.OAK_FENCE); + this.fillWithBlocks(world, sbb, 5, 4, 6, 5, 5, 6, Blocks.OAK_FENCE); //Decoration - this.placeBlockAtCurrentPosition(world, Blocks.fence, 0, 2, 1, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.leaves, 0, 2, 2, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.fence, 0, 8, 1, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.leaves, 0, 8, 2, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.fence, 0, 2, 1, 6, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.leaves, 0, 2, 2, 6, sbb); - this.fillWithMetadataBlocks(world, sbb, 2, 1, 3, 2, 1, 5, Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 1), Blocks.oak_stairs, this.getMetadataWithOffset(Blocks.oak_stairs, 1), false); - this.fillWithMetadataBlocks(world, sbb, 3, 1, 2, 5, 1, 3, Blocks.carpet, 10, Blocks.carpet, 10, false); - this.fillWithMetadataBlocks(world, sbb, 3, 1, 4, 4, 1, 6, Blocks.carpet, 10, Blocks.carpet, 10, false); + this.setBlockState(world, Blocks.OAK_FENCE.getDefaultState(), 2, 1, 2, sbb); + this.setBlockState(world, Blocks.LEAVES.getDefaultState().withProperty(BlockLeaves.DECAYABLE, false), 2, 2, 2, sbb); + this.setBlockState(world, Blocks.OAK_FENCE.getDefaultState(), 8, 1, 2, sbb); + this.setBlockState(world, Blocks.LEAVES.getDefaultState().withProperty(BlockLeaves.DECAYABLE, false), 8, 2, 2, sbb); + this.setBlockState(world, Blocks.OAK_FENCE.getDefaultState(), 2, 1, 6, sbb); + this.setBlockState(world, Blocks.LEAVES.getDefaultState().withProperty(BlockLeaves.DECAYABLE, false), 2, 2, 6, sbb); + IBlockState stairWest = Blocks.OAK_STAIRS.getDefaultState().withProperty(BlockStairs.FACING, EnumFacing.WEST); + this.fillWithBlocks(world, sbb, 2, 1, 3, 2, 1, 5, stairWest, stairWest, false); + this.fillWithBlocks(world, sbb, 3, 1, 2, 5, 1, 3, Blocks.CARPET.getStateFromMeta(10), Blocks.CARPET.getStateFromMeta(10), false); + this.fillWithBlocks(world, sbb, 3, 1, 4, 4, 1, 6, Blocks.CARPET.getStateFromMeta(10), Blocks.CARPET.getStateFromMeta(10), false); //Loot Chest - this.placeBlockAtCurrentPosition(world, Blocks.chest, 0, 8, 1, 6, sbb); - TileEntity chest = world.getTileEntity(this.getXWithOffset(8, 6), this.getYWithOffset(1), this.getZWithOffset(8, 6)); - if(chest != null && chest instanceof TileEntityChest){ + this.setBlockState(world, Blocks.CHEST.getDefaultState(), 8, 1, 6, sbb); + TileEntity chest = world.getTileEntity(new BlockPos(this.getXWithOffset(8, 6), this.getYWithOffset(1), this.getZWithOffset(8, 6))); + //TODO Chest content + /*if(chest != null && chest instanceof TileEntityChest){ WeightedRandomChestContent.generateChestContents(rand, ChestGenHooks.getItems(InitVillager.JAM_HOUSE_CHEST_NAME, rand), (TileEntityChest)chest, ChestGenHooks.getCount(InitVillager.JAM_HOUSE_CHEST_NAME, rand)); - } + }*/ //Torches - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 6, 2, 0, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 4, 2, 0, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 5, 2, 8, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 3, 2, 8, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 2, 3, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 2, 3, 6, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 8, 3, 2, sbb); - this.placeBlockAtCurrentPosition(world, Blocks.torch, 0, 8, 3, 6, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.SOUTH), 6, 2, 0, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.SOUTH), 4, 2, 0, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.NORTH), 5, 2, 8, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.NORTH), 3, 2, 8, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.EAST), 2, 3, 2, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.EAST), 2, 3, 6, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.WEST), 8, 3, 2, sbb); + this.setBlockState(world, Blocks.TORCH.getDefaultState().withProperty(BlockTorch.FACING, EnumFacing.WEST), 8, 3, 6, sbb); } - - @Override - protected int getVillagerType(int par1){ - return ConfigIntValues.JAM_VILLAGER_ID.getValue(); - }*/ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java index f5d6af12d..2c1cad542 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java @@ -10,13 +10,15 @@ package de.ellpeck.actuallyadditions.mod.gen; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; import net.minecraftforge.fml.common.registry.VillagerRegistry; +import java.util.List; import java.util.Random; -//TODO Fix village -public abstract class VillageCustomCropFieldHandler implements VillagerRegistry.IVillageCreationHandler{ +public class VillageCustomCropFieldHandler implements VillagerRegistry.IVillageCreationHandler{ @Override public StructureVillagePieces.PieceWeight getVillagePieceWeight(Random random, int i){ @@ -28,8 +30,8 @@ public abstract class VillageCustomCropFieldHandler implements VillagerRegistry. return VillageComponentCustomCropField.class; } - /*@Override - public Object buildComponent(StructureVillagePieces.PieceWeight villagePiece, StructureVillagePieces.Start startPiece, List pieces, Random random, int p1, int p2, int p3, int p4, int p5){ - return VillageComponentCustomCropField.buildComponent(pieces, p1, p2, p3, p4); - }*/ + @Override + public StructureVillagePieces.Village buildComponent(StructureVillagePieces.PieceWeight villagePiece, StructureVillagePieces.Start startPiece, List pieces, Random random, int p1, int p2, int p3, EnumFacing facing, int p5){ + return VillageComponentCustomCropField.buildComponent(pieces, p1, p2, p3, facing); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java index f847cdd2a..2aeab7dc7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java @@ -10,13 +10,15 @@ package de.ellpeck.actuallyadditions.mod.gen; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; import net.minecraftforge.fml.common.registry.VillagerRegistry; +import java.util.List; import java.util.Random; -//TODO Fix village -public abstract class VillageJamHouseHandler implements VillagerRegistry.IVillageCreationHandler{ +public class VillageJamHouseHandler implements VillagerRegistry.IVillageCreationHandler{ @Override public StructureVillagePieces.PieceWeight getVillagePieceWeight(Random random, int i){ @@ -28,8 +30,8 @@ public abstract class VillageJamHouseHandler implements VillagerRegistry.IVillag return VillageComponentJamHouse.class; } - /*@Override - public Object buildComponent(StructureVillagePieces.PieceWeight villagePiece, StructureVillagePieces.Start startPiece, List pieces, Random random, int p1, int p2, int p3, int p4, int p5){ - return VillageComponentJamHouse.buildComponent(pieces, p1, p2, p3, p4); - }*/ + @Override + public StructureVillagePieces.Village buildComponent(StructureVillagePieces.PieceWeight villagePiece, StructureVillagePieces.Start startPiece, List pieces, Random random, int p1, int p2, int p3, EnumFacing facing, int p5){ + return VillageComponentJamHouse.buildComponent(pieces, p1, p2, p3, facing); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 053b8a57e..70e5418a0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -145,7 +145,6 @@ public class ClientProxy implements IProxy{ ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud()); - //TODO Fix villager, doesn't work in this Version of Forge //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png")); for(Item item : colorProdividingItemsForRegistering){ From 9d1cb8e45a76192aaecccd294fe12f5baecb3da0 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 7 May 2016 20:23:50 +0200 Subject: [PATCH 101/322] Fixed a bug with fluid placers replacing fluids in front of them --- .../actuallyadditions/mod/tile/TileEntityFluidCollector.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 605012c44..7b94a173e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -87,7 +88,7 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa if(block != null){ BlockPos offsetPos = this.pos.offset(sideToManipulate); Block blockPresent = PosUtil.getBlock(offsetPos, this.worldObj); - boolean replaceable = blockPresent.isReplaceable(this.worldObj, offsetPos); + boolean replaceable = !(blockPresent instanceof BlockLiquid) && !(blockPresent instanceof IFluidBlock) && !blockPresent.isReplaceable(this.worldObj, offsetPos); if(replaceable){ PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); this.tank.drain(Util.BUCKET, true); From bddce5fcd6efccedb3e0941bbf70c6b25cde001a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 7 May 2016 20:24:56 +0200 Subject: [PATCH 102/322] Fix the fix --- .../actuallyadditions/mod/tile/TileEntityFluidCollector.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 7b94a173e..0b6f2fec9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -88,8 +88,8 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa if(block != null){ BlockPos offsetPos = this.pos.offset(sideToManipulate); Block blockPresent = PosUtil.getBlock(offsetPos, this.worldObj); - boolean replaceable = !(blockPresent instanceof BlockLiquid) && !(blockPresent instanceof IFluidBlock) && !blockPresent.isReplaceable(this.worldObj, offsetPos); - if(replaceable){ + boolean placeable = !(blockPresent instanceof BlockLiquid) && !(blockPresent instanceof IFluidBlock) && blockPresent.isReplaceable(this.worldObj, offsetPos); + if(placeable){ PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); this.tank.drain(Util.BUCKET, true); } From 19d11e783b462ee40ffc19699ed9cd2de597150c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 7 May 2016 21:36:41 +0200 Subject: [PATCH 103/322] Removed unneded parts of the InvTweaks API. Why did I have these again..? --- src/main/java/invtweaks/api/IItemTree.java | 68 -------------- .../java/invtweaks/api/IItemTreeCategory.java | 46 ---------- .../java/invtweaks/api/IItemTreeItem.java | 33 ------- .../java/invtweaks/api/IItemTreeListener.java | 29 ------ src/main/java/invtweaks/api/InvTweaksAPI.java | 84 ------------------ .../java/invtweaks/api/SortingMethod.java | 45 ---------- .../api/container/ContainerSection.java | 88 ------------------- .../container/ContainerSectionCallback.java | 16 ---- .../api/container/IgnoreContainer.java | 15 ---- 9 files changed, 424 deletions(-) delete mode 100644 src/main/java/invtweaks/api/IItemTree.java delete mode 100644 src/main/java/invtweaks/api/IItemTreeCategory.java delete mode 100644 src/main/java/invtweaks/api/IItemTreeItem.java delete mode 100644 src/main/java/invtweaks/api/IItemTreeListener.java delete mode 100644 src/main/java/invtweaks/api/InvTweaksAPI.java delete mode 100644 src/main/java/invtweaks/api/SortingMethod.java delete mode 100644 src/main/java/invtweaks/api/container/ContainerSection.java delete mode 100644 src/main/java/invtweaks/api/container/ContainerSectionCallback.java delete mode 100644 src/main/java/invtweaks/api/container/IgnoreContainer.java diff --git a/src/main/java/invtweaks/api/IItemTree.java b/src/main/java/invtweaks/api/IItemTree.java deleted file mode 100644 index 5b6c0a805..000000000 --- a/src/main/java/invtweaks/api/IItemTree.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2013 Andrew Crocker - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package invtweaks.api; - -import java.util.Collection; -import java.util.List; -import java.util.Random; - -public interface IItemTree { - public void registerOre(String category, String name, String oreName, int order); - - boolean matches(List items, String keyword); - - boolean isKeywordValid(String keyword); - - Collection getAllCategories(); - - IItemTreeCategory getRootCategory(); - - IItemTreeCategory getCategory(String keyword); - - boolean isItemUnknown(String id, int damage); - - List getItems(String id, int damage); - - List getItems(String name); - - IItemTreeItem getRandomItem(Random r); - - boolean containsItem(String name); - - boolean containsCategory(String name); - - void setRootCategory(IItemTreeCategory category); - - IItemTreeCategory addCategory(String parentCategory, String newCategory) throws NullPointerException; - - void addCategory(String parentCategory, IItemTreeCategory newCategory) throws NullPointerException; - - IItemTreeItem addItem(String parentCategory, String name, String id, int damage, int order) - throws NullPointerException; - - void addItem(String parentCategory, IItemTreeItem newItem) throws NullPointerException; - - int getKeywordDepth(String keyword); - - int getKeywordOrder(String keyword); -} diff --git a/src/main/java/invtweaks/api/IItemTreeCategory.java b/src/main/java/invtweaks/api/IItemTreeCategory.java deleted file mode 100644 index f1b5e9554..000000000 --- a/src/main/java/invtweaks/api/IItemTreeCategory.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2013 Andrew Crocker - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package invtweaks.api; - -import java.util.Collection; -import java.util.List; - -public interface IItemTreeCategory { - boolean contains(IItemTreeItem item); - - void addCategory(IItemTreeCategory category); - - void addItem(IItemTreeItem item); - - Collection getSubCategories(); - - Collection> getItems(); - - String getName(); - - int getCategoryOrder(); - - int findCategoryOrder(String keyword); - - int findKeywordDepth(String keyword); -} diff --git a/src/main/java/invtweaks/api/IItemTreeItem.java b/src/main/java/invtweaks/api/IItemTreeItem.java deleted file mode 100644 index 2b6ae2db5..000000000 --- a/src/main/java/invtweaks/api/IItemTreeItem.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2013 Andrew Crocker - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package invtweaks.api; - -public interface IItemTreeItem extends Comparable { - String getName(); - - String getId(); - - int getDamage(); - - int getOrder(); -} diff --git a/src/main/java/invtweaks/api/IItemTreeListener.java b/src/main/java/invtweaks/api/IItemTreeListener.java deleted file mode 100644 index 73a5815d5..000000000 --- a/src/main/java/invtweaks/api/IItemTreeListener.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2013 Andrew Crocker - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package invtweaks.api; - -import java.util.EventListener; - -public interface IItemTreeListener extends EventListener { - void onTreeLoaded(IItemTree tree); -} diff --git a/src/main/java/invtweaks/api/InvTweaksAPI.java b/src/main/java/invtweaks/api/InvTweaksAPI.java deleted file mode 100644 index 33f259e4d..000000000 --- a/src/main/java/invtweaks/api/InvTweaksAPI.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2013 Andrew Crocker - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package invtweaks.api; - -import invtweaks.api.container.ContainerSection; -import net.minecraft.item.ItemStack; - -/** - * Interface to access functions exposed by Inventory Tweaks - *

- * The main @Mod instance of the mod implements this interface, so a refernce to it can - * be obtained via @Instance("inventorytweaks") or methods in cpw.mods.fml.common.Loader - *

- * All of these functions currently have no effect if called on a dedicated server. - */ -public interface InvTweaksAPI { - /** - * Add a listener for ItemTree load events - * - * @param listener - */ - void addOnLoadListener(IItemTreeListener listener); - - /** - * Remove a listener for ItemTree load events - * - * @param listener - * @return true if the listener was previously added - */ - boolean removeOnLoadListener(IItemTreeListener listener); - - /** - * Toggle sorting shortcut state. - * - * @param enabled - */ - void setSortKeyEnabled(boolean enabled); - - /** - * Toggle sorting shortcut supression. - * Unlike setSortKeyEnabled, this flag is automatically cleared when GUIs are closed. - * - * @param enabled - */ - void setTextboxMode(boolean enabled); - - /** - * Compare two items using the default (non-rule based) algorithm, - * sutable for an implementation of Comparator<ItemStack>. - * - * @param i - * @param j - * @return A value with a sign representing the relative order of the item stacks - */ - int compareItems(ItemStack i, ItemStack j); - - /** - * Initiate a sort as if the player had clicked on a sorting button or pressed the sort key. - * - * @param section - * @param method - */ - void sort(ContainerSection section, SortingMethod method); -} diff --git a/src/main/java/invtweaks/api/SortingMethod.java b/src/main/java/invtweaks/api/SortingMethod.java deleted file mode 100644 index 895b1713d..000000000 --- a/src/main/java/invtweaks/api/SortingMethod.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2013 Andrew Crocker - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package invtweaks.api; - -public enum SortingMethod { - /** Standard 'r' sorting for generic inventories */ - DEFAULT, - /** Sort method creating vertical columns of items. - * Used for chests only, requires container to have a valid row size for correct results. - */ - VERTICAL, - /** Sort method creating horizontal rows of items. - * Used for chests only, requires container to have a valid row size for correct results. - */ - HORIZONTAL, - /** Sort method for player inventory. - * Applies to extra player-specified sorting rules for the main inventory. - * Will always operate on main inventory. - */ - INVENTORY, - /** Attempts to even the number of items in each stack of the same type of item, without moving full stacks. - * Used in crafting grid sorting. - */ - EVEN_STACKS, -} diff --git a/src/main/java/invtweaks/api/container/ContainerSection.java b/src/main/java/invtweaks/api/container/ContainerSection.java deleted file mode 100644 index 83c2e08a4..000000000 --- a/src/main/java/invtweaks/api/container/ContainerSection.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2013 Andrew Crocker - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package invtweaks.api.container; - -/** - * Names for specific parts of containers. For unknown container types (such as mod containers), only INVENTORY and - * CHEST sections are available. - */ -public enum ContainerSection { - /** - * The player's inventory - */ - INVENTORY, - /** - * The player's inventory (only the hotbar) - */ - INVENTORY_HOTBAR, - /** - * The player's inventory (all except the hotbar) - */ - INVENTORY_NOT_HOTBAR, - /** - * The chest or dispenser contents. Also used for unknown container contents. - */ - CHEST, - /** - * The crafting input - */ - CRAFTING_IN, - /** - * The crafting input, for containters that store it internally - */ - CRAFTING_IN_PERSISTENT, - /** - * The crafting output - */ - CRAFTING_OUT, - /** - * The armor slots - */ - ARMOR, - /** - * The furnace input - */ - FURNACE_IN, - /** - * The furnace output - */ - FURNACE_OUT, - /** - * The furnace fuel - */ - FURNACE_FUEL, - /** - * The enchantment table slot - */ - ENCHANTMENT, - /** - * The three bottles slots in brewing tables - * NOTE: Do not use without also using BREWING_INGREDIENT. - */ - BREWING_BOTTLES, - /** - * The top slot in brewing tables - * NOTE: Do not use without also using BREWING_BOTTLES. - */ - BREWING_INGREDIENT -} diff --git a/src/main/java/invtweaks/api/container/ContainerSectionCallback.java b/src/main/java/invtweaks/api/container/ContainerSectionCallback.java deleted file mode 100644 index 379206b37..000000000 --- a/src/main/java/invtweaks/api/container/ContainerSectionCallback.java +++ /dev/null @@ -1,16 +0,0 @@ -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 a method to call which returns the set of ContainerSections for this container. - *

- * Signature of the method should be Map> func() - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.METHOD) -public @interface ContainerSectionCallback { -} diff --git a/src/main/java/invtweaks/api/container/IgnoreContainer.java b/src/main/java/invtweaks/api/container/IgnoreContainer.java deleted file mode 100644 index 86e8aea12..000000000 --- a/src/main/java/invtweaks/api/container/IgnoreContainer.java +++ /dev/null @@ -1,15 +0,0 @@ -package invtweaks.api.container; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Use this annotation to override inherited annotation properties and mark a Container as unsortable. - * This effect is inherited as well. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface IgnoreContainer { -} From 1f6f3152edeb4560d76b43aa0be5a8a2000e1699 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 7 May 2016 23:38:50 +0200 Subject: [PATCH 104/322] Added max damage display to the advanced tooltip --- .../de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index 49dae44e4..334f28ff8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -63,8 +63,9 @@ public class TooltipEvent{ //Metadata int meta = event.getItemStack().getItemDamage(); + int max = event.getItemStack().getMaxDamage(); event.getToolTip().add(ADVANCED_INFO_HEADER_PRE+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".meta.desc")+":"); - event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+meta); + event.getToolTip().add(ADVANCED_INFO_TEXT_PRE+meta+(max > 0 ? "/"+max : "")); //Unlocalized Name String metaName = event.getItemStack().getItem().getUnlocalizedName(event.getItemStack()); From 8e8b59034b34e3115ff81abf3359c872b5ce8fb2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 7 May 2016 23:43:14 +0200 Subject: [PATCH 105/322] This doesn't make any sense --- .../actuallyadditions/api/ActuallyAdditionsAPI.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index d777424fd..7df7fbf6f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -201,15 +201,4 @@ public class ActuallyAdditionsAPI{ public static void addPageWithItemStackData(BookletPage page){ bookletPagesWithItemStackData.add(page); } - - /** - * This can be used for checking if the API is a certain version for - * compatibility's sake. - * Will always return an integer equivalent to the text in API_VERSION - * - * @return The API's version as an integer - */ - public static int getAPIVersionInt(){ - return Integer.parseInt(API_VERSION); - } } From c7f5455862feaac71c327bae088310948968c81f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 8 May 2016 02:55:59 +0200 Subject: [PATCH 106/322] Spawner Changer --- .../mod/config/ConfigValues.java | 3 + .../mod/crafting/ItemCrafting.java | 1 + .../mod/items/InitItems.java | 3 + .../mod/items/ItemSpawnerChanger.java | 120 ++++++++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 1 + .../models/item/itemSpawnerChanger.json | 6 + .../textures/items/itemSpawnerChanger.png | Bin 0 -> 532 bytes 7 files changed, 134 insertions(+) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemSpawnerChanger.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index 7f56d2ac0..22f03b52c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -35,6 +35,8 @@ public class ConfigValues{ public static String[] repairerExtraWhitelist; + public static String[] spawnerChangerBlacklist; + public static boolean lessSound; public static boolean lessParticles; public static boolean lessBlockBreakingEffects; @@ -60,6 +62,7 @@ public class ConfigValues{ minerExtraWhitelist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Extra Whitelist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode.").getStringList(); minerBlacklist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Blacklist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes.").getStringList(); repairerExtraWhitelist = config.get(ConfigCategories.MACHINE_VALUES.name, "Item Repairer Extra Whitelist", new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable.").getStringList(); + spawnerChangerBlacklist = config.get(ConfigCategories.OTHER.name, "Spawner Changer Blacklist", new String[]{"VillagerGolem"}, "By default, the Spawner Changer allows every living entity to be put into a spawner. If there is one that shouldn't be able to, put its MAPPING NAME here.").getStringList(); lessSound = config.get(ConfigCategories.PERFORMANCE.name, "Less Sound", false, "If blocks in Actually Additions should have less sounds").getBoolean(); lessParticles = config.get(ConfigCategories.PERFORMANCE.name, "Less Particles", false, "If blocks in Actually Additions should have less particles").getBoolean(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 27c63cff4..92b7731b9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -105,6 +105,7 @@ public class ItemCrafting{ //Clearing NBT Storage GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemLaserWrench), new ItemStack(InitItems.itemLaserWrench)); GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPhantomConnector), new ItemStack(InitItems.itemPhantomConnector)); + GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemSpawnerChanger), new ItemStack(InitItems.itemSpawnerChanger)); //Chest To Crate Upgrade if(ConfigCrafting.CHEST_TO_CRATE_UPGRADE.isEnabled()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index e6038a4ee..669ee19cc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -133,6 +133,8 @@ public class InitItems{ public static Item itemChestToCrateUpgrade; public static Item itemCrateKeeper; + public static Item itemSpawnerChanger; + public static Item itemLaserWrench; public static Item itemCrystal; public static Item itemColorLens; @@ -210,6 +212,7 @@ public class InitItems{ public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); itemCrateKeeper = new ItemGeneric("itemCrateKeeper"); itemColorLens = new ItemLens("itemColorLens", Lenses.LENS_COLOR); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java new file mode 100644 index 000000000..42f775947 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -0,0 +1,120 @@ +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.MobSpawnerBaseLogic; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class ItemSpawnerChanger extends ItemBase{ + + public ItemSpawnerChanger(String name){ + super(name); + this.setMaxStackSize(1); + } + + @Override + public EnumActionResult onItemUse(ItemStack aStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + if(!world.isRemote){ + ItemStack stack = player.getHeldItemMainhand(); + if(player.canPlayerEdit(pos.offset(facing), facing, stack)){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityMobSpawner){ + String entity = this.getStoredEntity(stack); + if(entity != null){ + MobSpawnerBaseLogic logic = ((TileEntityMobSpawner)tile).getSpawnerBaseLogic(); + logic.setEntityName(entity); + + tile.markDirty(); + + IBlockState state = world.getBlockState(pos); + world.notifyBlockUpdate(pos, state, state, 3); + + ItemPhantomConnector.clearStorage(stack); + + if(!player.capabilities.isCreativeMode){ + stack.stackSize--; + } + + return EnumActionResult.SUCCESS; + } + } + } + } + return EnumActionResult.FAIL; + } + + @Override + public boolean itemInteractionForEntity(ItemStack aStack, EntityPlayer player, EntityLivingBase entity, EnumHand hand){ + if(!player.worldObj.isRemote){ + ItemStack stack = player.getHeldItemMainhand(); + if(this.getStoredEntity(stack) == null){ + if(this.storeClickedEntity(stack, entity)){ + entity.setDead(); + } + } + return true; + } + return false; + } + + private boolean storeClickedEntity(ItemStack stack, Entity entity){ + if(!entity.worldObj.isRemote){ + if(!stack.hasTagCompound()){ + stack.setTagCompound(new NBTTagCompound()); + } + + String entityName = EntityList.getEntityString(entity); + if(entityName != null && !entityName.isEmpty()){ + for(String name : ConfigValues.spawnerChangerBlacklist){ + if(entityName.equals(name)){ + return false; + } + } + + stack.getTagCompound().setString("Entity", entityName); + return true; + } + } + return false; + } + + private String getStoredEntity(ItemStack stack){ + if(stack.hasTagCompound()){ + String entity = stack.getTagCompound().getString("Entity"); + if(entity != null && !entity.isEmpty()){ + return entity; + } + } + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ + String entity = this.getStoredEntity(stack); + if(entity != null){ + list.add("Entity: "+entity); + list.add(TextFormatting.ITALIC+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".clearStorage.desc")); + } + } +} diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 0eb232c96..f4e03eefa 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -410,6 +410,7 @@ item.actuallyadditions.itemPaxelCrystalWhite.name=Enori Crystal AIOT item.actuallyadditions.itemPaxelCrystalGreen.name=Emeradic Crystal AIOT item.actuallyadditions.itemFoodBacon.name=Bacon item.actuallyadditions.itemMiscEnderStar.name=Ender Star +item.actuallyadditions.itemSpawnerChanger.name=Spawner Changer #Tooltips tooltip.actuallyadditions.onSuffix.desc=On diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json b/src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json new file mode 100644 index 000000000..cbba29e26 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemSpawnerChanger" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemSpawnerChanger.png b/src/main/resources/assets/actuallyadditions/textures/items/itemSpawnerChanger.png new file mode 100644 index 0000000000000000000000000000000000000000..9175733e13530ff35d4ea195fa08f10cab1394f6 GIT binary patch literal 532 zcmV+v0_**WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Ra2Mhr! zIFaFba{vGU7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M_a!Eu%R5(wS zlD}%gP#DGCJ9l+$pP*0R(xtE95TqSMCkcX@Oo1-Ggkanp-5kV04f+C-_y@#fNyNeR zH0QHdyv7Rs;N;%i-1GbXkQ{)FEXzWh*ehGaDL!*}B~>27>{n(~>5oRE41kpui^VK} z4>d$)?)7?F?_8;BwW^sJsucl@$73-lGye+(sMTtyR4RW17#t9#N~R{02@Jy!^Vdfn zulXkpq5)J8!i=VAikWAHLLvA5_Kfe(7Y%Y3aQ83`1-Y)|UjW8!C6Det3_{KT Date: Sun, 8 May 2016 11:07:19 +0200 Subject: [PATCH 107/322] Just in case --- .../mod/items/ItemSpawnerChanger.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index 42f775947..31cdb9117 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -5,7 +5,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -77,12 +76,12 @@ public class ItemSpawnerChanger extends ItemBase{ return false; } - private boolean storeClickedEntity(ItemStack stack, Entity entity){ - if(!entity.worldObj.isRemote){ - if(!stack.hasTagCompound()){ - stack.setTagCompound(new NBTTagCompound()); - } + private boolean storeClickedEntity(ItemStack stack, EntityLivingBase entity){ + if(!stack.hasTagCompound()){ + stack.setTagCompound(new NBTTagCompound()); + } + if(!(entity instanceof EntityPlayer)){ String entityName = EntityList.getEntityString(entity); if(entityName != null && !entityName.isEmpty()){ for(String name : ConfigValues.spawnerChangerBlacklist){ From 9c40296db0bc2f8ec29e55d96a9bdecbac7cc9f9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 8 May 2016 14:11:24 +0200 Subject: [PATCH 108/322] Spawner Shards + Spawner Changer recipe and doc --- .../mod/booklet/InitBooklet.java | 3 +++ .../mod/config/values/ConfigCrafting.java | 3 ++- .../mod/crafting/ItemCrafting.java | 11 +++++++++ .../mod/event/BreakEvent.java | 21 ++++++++++++++++++ .../mod/event/InitEvents.java | 1 + .../mod/items/metalists/TheMiscItems.java | 3 ++- .../assets/actuallyadditions/lang/en_US.lang | 9 +++++++- .../models/item/itemMiscSpawnerShard.json | 6 +++++ .../textures/items/itemMiscSpawnerShard.png | Bin 0 -> 375 bytes 9 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMiscSpawnerShard.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscSpawnerShard.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index cb4655401..7c1c9538b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; @@ -80,6 +81,7 @@ public class InitBooklet{ } new BookletChapter("lamps", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockColoredLampOn, 1, TheColoredLampColors.GREEN.ordinal()), lampPages.toArray(new BookletPage[lampPages.size()])); new BookletChapter("enderStar", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal()), new PageCrafting(1, ItemCrafting.recipeEnderStar)); + new BookletChapter("spawnerShard", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()))); new BookletChapter("treasureChest", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTreasureChest), new PagePicture(1, "pageTreasureChest", 150).setStack(new ItemStack(InitBlocks.blockTreasureChest)), new PageTextOnly(2)).setSpecial(); new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStack(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); @@ -137,6 +139,7 @@ public class InitBooklet{ potionRingPages.add(new PageCrafting(potionRingPages.size()+1, recipe).setNoText()); } new BookletChapter("potionRings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemPotionRing), potionRingPages.toArray(new BookletPage[potionRingPages.size()])); + new BookletChapter("spawnerChanger", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemSpawnerChanger), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeSpawnerChanger).setNoText()); //RF Using Items new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(3, ItemCrafting.recipesDrillColoring), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index dda70f30a..250eefb2a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -156,7 +156,8 @@ public enum ConfigCrafting{ ATOMIC_RECONSTRUCTOR("Atomic Reconstructor", ConfigCategories.BLOCKS_CRAFTING), MINER("Miner", ConfigCategories.BLOCKS_CRAFTING), FIREWORK_BOX("Firework Box", ConfigCategories.BLOCKS_CRAFTING), - ENDER_STAR("Ender Star", ConfigCategories.ITEMS_CRAFTING); + ENDER_STAR("Ender Star", ConfigCategories.ITEMS_CRAFTING), + SPAWNER_CHANGER("Spawner Changer", ConfigCategories.ITEMS_CRAFTING); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 92b7731b9..7eeac6768 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -84,6 +84,7 @@ public class ItemCrafting{ public static IRecipe recipeCrateKeeper; public static IRecipe recipeEnderStar; public static IRecipe recipeRarmorModuleReconstructor; + public static IRecipe recipeSpawnerChanger; public static void init(){ @@ -126,6 +127,16 @@ public class ItemCrafting{ recipeCrateKeeper = RecipeUtil.lastIRecipe(); } + //Spawner Changer + if(ConfigCrafting.SPAWNER_CHANGER.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemSpawnerChanger), + "MSM", "SDS", "MSM", + 'M', new ItemStack(Items.MAGMA_CREAM), + 'S', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()), + 'D', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()))); + recipeSpawnerChanger = RecipeUtil.lastIRecipe(); + } + //Laser Wrench if(ConfigCrafting.LASER_WRENCH.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemLaserWrench), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java new file mode 100644 index 000000000..3b6e3919d --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java @@ -0,0 +1,21 @@ +package de.ellpeck.actuallyadditions.mod.event; + +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class BreakEvent{ + + @SubscribeEvent + public void onBlockBreakEvent(BlockEvent.HarvestDropsEvent event){ + IBlockState state = event.getState(); + if(state != null && state.getBlock() == Blocks.MOB_SPAWNER){ + event.getDrops().add(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal())); + } + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java index fc53bd2d4..0e6df4853 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java @@ -28,6 +28,7 @@ public class InitEvents{ Util.registerEvent(new EntityLivingEvent()); Util.registerEvent(new LogoutEvent()); Util.registerEvent(new WorldLoadingEvents()); + Util.registerEvent(new BreakEvent()); MinecraftForge.TERRAIN_GEN_BUS.register(new WorldDecorationEvent()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java index 4f7e5317d..556ceb3b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java @@ -33,7 +33,8 @@ public enum TheMiscItems{ DRILL_CORE("DrillCore", EnumRarity.UNCOMMON), BLACK_DYE("BlackDye", EnumRarity.EPIC), LENS("Lens", EnumRarity.UNCOMMON), - ENDER_STAR("EnderStar", EnumRarity.EPIC); + ENDER_STAR("EnderStar", EnumRarity.EPIC), + SPAWNER_SHARD("SpawnerShard", EnumRarity.EPIC); public final String name; public final EnumRarity rarity; diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index f4e03eefa..4b64811c4 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -411,6 +411,7 @@ item.actuallyadditions.itemPaxelCrystalGreen.name=Emeradic Crystal AIOT item.actuallyadditions.itemFoodBacon.name=Bacon item.actuallyadditions.itemMiscEnderStar.name=Ender Star item.actuallyadditions.itemSpawnerChanger.name=Spawner Changer +item.actuallyadditions.itemMiscSpawnerShard.name=Spawner Shards #Tooltips tooltip.actuallyadditions.onSuffix.desc=On @@ -781,4 +782,10 @@ booklet.actuallyadditions.chapter.phantomRedstoneface.name=Phantom Redstoneface booklet.actuallyadditions.chapter.phantomRedstoneface.text.1=If you don't know what Phantomfaces are, check the Phantomfaces Entry first. The Phantom Redstoneface can be used to transmit redstone signals. This one, however, works differently to the other Phantomfaces as it only works in one direction. What this means is that the connected block has to provide redstone power for redstone next to the Redstoneface to become powered. It does not work the other way around. booklet.actuallyadditions.chapter.rarmorModuleReconstructor.name=Reconstruction Module -booklet.actuallyadditions.chapter.rarmorModuleReconstructor.text.1=The Reconstruction Module can be used in the Rarmor. The Rarmor is a type of configurable armor that is added by the Rarmor Mod. If you want to use this module, place it inside the Rarmor GUI that is accessed by wearing the armor and opening your inventory. The module, when the player is sneaking, will shoot out a reconstruction beam that would be created by the Atomic Reconstructor without a lens. This will cause blocks that are hit to be reconstructed. \ No newline at end of file +booklet.actuallyadditions.chapter.rarmorModuleReconstructor.text.1=The Reconstruction Module can be used in the Rarmor. The Rarmor is a type of configurable armor that is added by the Rarmor Mod. If you want to use this module, place it inside the Rarmor GUI that is accessed by wearing the armor and opening your inventory. The module, when the player is sneaking, will shoot out a reconstruction beam that would be created by the Atomic Reconstructor without a lens. This will cause blocks that are hit to be reconstructed. + +booklet.actuallyadditions.chapter.spawnerShard.name=Spawner Shards +booklet.actuallyadditions.chapter.spawnerShard.text.1=The Spawner Shards are a crafting ingredient found by breaking spawners. Once a spawner in the world is broken, it will always drop one Shard. + +booklet.actuallyadditions.chapter.spawnerChanger.name=Spawner Changer +booklet.actuallyadditions.chapter.spawnerChanger.text.1=The Spawner Changer is an item that can be used to manipulate the mobs that spawners spawn. This can be accomplished by first of all picking up the desired mob to spawn with the Changer, killing it in the process. Next, the Changer can be right-clicked on the spawner, causing the spawner to be changed. This process probably won't work with every type of mob though. \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMiscSpawnerShard.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscSpawnerShard.json new file mode 100644 index 000000000..9373701b2 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscSpawnerShard.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemMiscSpawnerShard" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscSpawnerShard.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscSpawnerShard.png new file mode 100644 index 0000000000000000000000000000000000000000..2829b049006063701628e1a57fe958f91dd7c699 GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjGK$vmro+3}6phSslL`iUdT1k0gQ7S`0VrE{6US4X6f{C7io@I`4ogYxmS5Ftm z5DWjML8tke3R4W~4?xNtl!JvaHPNZr+JK-|LS~ z_@eQ;J;&_q<>$}CJ_TQ9JNd&P$)ieS`nl)P%a823Q(eIEW+#(!bI1vqy9uf{Qd1K0 zS<_mDnLD0`%3eL-EHC-NtigPR#(~m&&z$s$j1A1%<&)2TDwukB4P)l?pv4{MuKrck zu4J*=WX}8`pqnRPgOZf!?!`shyiI4!GO7?{-N4-PHi&20vL2bzH{!qD<{vnm#ZWVQ zljtP>>@0>Q!N>MDSSi=8nsYQg>r}+r##$}QpFX}f|8XnvJqVt Date: Sun, 8 May 2016 21:09:58 +0200 Subject: [PATCH 109/322] Item Phantom Networks, part 1 --- .../mod/blocks/BlockItemViewer.java | 31 + .../mod/blocks/BlockLaserRelay.java | 7 +- .../mod/blocks/InitBlocks.java | 6 +- .../mod/creative/CreativeTab.java | 2 + .../mod/inventory/ContainerDrill.java | 2 +- .../mod/items/ItemLaserWrench.java | 3 +- .../mod/misc/LaserRelayConnectionHandler.java | 40 - .../mod/tile/TileEntityBase.java | 4 +- .../mod/tile/TileEntityInventoryBase.java | 18 +- .../mod/tile/TileEntityItemViewer.java | 163 ++++ .../mod/tile/TileEntityLaserRelay.java | 147 ++- .../mod/tile/TileEntityPhantomItemface.java | 5 - .../blockstates/blockLaserRelayItem.json | 19 + .../assets/actuallyadditions/lang/en_US.lang | 4 +- .../models/block/blockLaserRelayItem.json | 880 ++++++++++++++++++ .../blocks/models/modelLaserRelayItem.png | Bin 0 -> 279 bytes 16 files changed, 1240 insertions(+), 91 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItem.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItem.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayItem.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java new file mode 100644 index 000000000..139007ade --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -0,0 +1,31 @@ +package de.ellpeck.actuallyadditions.mod.blocks; + +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockItemViewer extends BlockContainerBase{ + + public BlockItemViewer(String name){ + super(Material.ROCK, name); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.5F); + this.setResistance(10.0F); + this.setSoundType(SoundType.STONE); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta){ + return new TileEntityItemViewer(); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 09737b255..579bb611b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -27,13 +27,16 @@ import net.minecraft.world.World; public class BlockLaserRelay extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); + private boolean isItem; - public BlockLaserRelay(String name){ + public BlockLaserRelay(String name, boolean isItem){ super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); this.setSoundType(SoundType.STONE); + + this.isItem = isItem; } @Override @@ -63,6 +66,6 @@ public class BlockLaserRelay extends BlockContainerBase{ @Override public TileEntity createNewTileEntity(World world, int i){ - return new TileEntityLaserRelay(); + return this.isItem ? new TileEntityLaserRelay.TileEntityLaserRelayItem() : new TileEntityLaserRelay.TileEntityLaserRelayEnergy(); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index caa146106..60fd1d39e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -92,6 +92,8 @@ public class InitBlocks{ public static Block blockRangedCollector; public static Block blockLaserRelay; + public static Block blockLaserRelayItem; + public static Block blockItemViewer; public static Block blockBlackLotus; public static Block blockCrystal; @@ -114,12 +116,14 @@ public class InitBlocks{ public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockItemViewer = new BlockItemViewer("blockItemViewer"); blockFireworkBox = new BlockFireworkBox("blockFireworkBox"); blockMiner = new BlockMiner("blockMiner"); blockAtomicReconstructor = new BlockAtomicReconstructor("blockAtomicReconstructor"); blockCrystal = new BlockCrystal("blockCrystal"); blockBlackLotus = new BlockBlackLotus("blockBlackLotus"); - blockLaserRelay = new BlockLaserRelay("blockLaserRelay"); + blockLaserRelay = new BlockLaserRelay("blockLaserRelay", false); + blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", true); blockRangedCollector = new BlockRangedCollector("blockRangedCollector"); blockDirectionalBreaker = new BlockDirectionalBreaker("blockDirectionalBreaker"); blockLeafGenerator = new BlockLeafGenerator("blockLeafGenerator"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index cd9153477..32578b166 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -55,6 +55,8 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockFireworkBox); this.add(InitBlocks.blockLaserRelay); + this.add(InitBlocks.blockLaserRelayItem); + this.add(InitBlocks.blockItemViewer); this.add(InitBlocks.blockAtomicReconstructor); this.add(InitBlocks.blockPhantomface); this.add(InitBlocks.blockPhantomEnergyface); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index a9277b1e2..a34c2e0a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -244,7 +244,7 @@ public class ContainerDrill extends Container{ } else{ stackAt = this.slots[i].splitStack(j); - if(this.slots[i].stackSize == 0){ + if(this.slots[i].stackSize <= 0){ this.slots[i] = null; } this.markDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 743afdce1..2e723e48d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -50,7 +50,8 @@ public class ItemLaserWrench extends ItemBase{ } else{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); - if(ItemPhantomConnector.getStoredWorld(stack) == world && world.getTileEntity(savedPos) instanceof TileEntityLaserRelay && LaserRelayConnectionHandler.getInstance().addConnection(savedPos, pos)){ + TileEntity savedTile = world.getTileEntity(savedPos); + if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.getInstance().addConnection(savedPos, pos)){ ItemPhantomConnector.clearStorage(stack); ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 565dd461d..6b6441e23 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -161,46 +161,6 @@ public class LaserRelayConnectionHandler{ //System.out.println("Merged Two Networks!"); } - public int transferEnergyToReceiverInNeed(World world, BlockPos energyGottenFrom, Network network, int maxTransfer, boolean simulate){ - int transmitted = 0; - //Go through all of the connections in the network - for(ConnectionPair pair : network.connections){ - BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; - //Go through both relays in the connection - for(BlockPos relay : relays){ - if(relay != null){ - //Get every side of the relay - for(int i = 0; i <= 5; i++){ - EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - //Get the Position at the side - BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); - if(!PosUtil.areSamePos(pos, energyGottenFrom)){ - TileEntity tile = world.getTileEntity(pos); - if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ - IEnergyReceiver receiver = (IEnergyReceiver)tile; - if(receiver.canConnectEnergy(side.getOpposite())){ - //Transfer the energy (with the energy loss!) - int theoreticalReceived = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), maxTransfer-transmitted, true); - //The amount of energy lost during a transfer - int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); - - transmitted += ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), theoreticalReceived-deduct, simulate); - transmitted += deduct; - - //If everything that could be transmitted was transmitted - if(transmitted >= maxTransfer){ - return transmitted; - } - } - } - } - } - } - } - } - return transmitted; - } - public static class ConnectionPair{ public BlockPos firstRelay; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 5cbaa5750..7273cf793 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -78,11 +78,13 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityLeafGenerator.class, ModUtil.MOD_ID+":tileEntityLeafGenerator"); GameRegistry.registerTileEntity(TileEntityDirectionalBreaker.class, ModUtil.MOD_ID+":tileEntityDirectionalBreaker"); GameRegistry.registerTileEntity(TileEntityRangedCollector.class, ModUtil.MOD_ID+":tileEntityRangedCollector"); - GameRegistry.registerTileEntity(TileEntityLaserRelay.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); GameRegistry.registerTileEntity(TileEntityAtomicReconstructor.class, ModUtil.MOD_ID+":tileEntityAtomicReconstructor"); GameRegistry.registerTileEntity(TileEntityMiner.class, ModUtil.MOD_ID+":tileEntityMiner"); GameRegistry.registerTileEntity(TileEntityFireworkBox.class, ModUtil.MOD_ID+":tileEntityFireworkBox"); GameRegistry.registerTileEntity(TileEntityPhantomRedstoneface.class, ModUtil.MOD_ID+":tileEntityPhantomRedstoneface"); + GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayItem.class, ModUtil.MOD_ID+":tileEntityLaserRelayItem"); + GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayEnergy.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); + GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index bd3b368f3..73a6056a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -33,8 +33,10 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements this.initializeSlots(slots); - for(int i = 0; i < this.invWrappers.length; i++){ - this.invWrappers[i] = new SidedInvWrapper(this, EnumFacing.values()[i]); + if(this.hasInvWrapperCapabilities()){ + for(int i = 0; i < this.invWrappers.length; i++){ + this.invWrappers[i] = new SidedInvWrapper(this, EnumFacing.values()[i]); + } } } @@ -82,15 +84,11 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } - @Override - public void updateEntity(){ - super.updateEntity(); - } - @Override public int[] getSlotsForFace(EnumFacing side){ - if(this.slots.length > 0){ - int[] theInt = new int[this.slots.length]; + int invSize = this.getSizeInventory(); + if(invSize > 0){ + int[] theInt = new int[invSize]; for(int i = 0; i < theInt.length; i++){ theInt[i] = i; } @@ -177,7 +175,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } else{ stackAt = this.slots[i].splitStack(j); - if(this.slots[i].stackSize == 0){ + if(this.slots[i].stackSize <= 0){ this.slots[i] = null; } this.markDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java new file mode 100644 index 000000000..da5186ba4 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -0,0 +1,163 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.items.IItemHandler; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.List; + +public class TileEntityItemViewer extends TileEntityInventoryBase{ + + public TileEntityItemViewer(){ + super(0, "itemViewer"); + } + + private List getItemHandlers(){ + TileEntityLaserRelay.TileEntityLaserRelayItem relay = this.getConnectedRelay(); + if(relay != null){ + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(relay.getPos()); + if(network != null){ + return relay.getItemHandlersInNetwork(network); + } + } + return null; + } + + private Pair getSwitchedIndexHandler(int i){ + List handlers = this.getItemHandlers(); + int currentI = 0; + if(handlers != null && !handlers.isEmpty()){ + for(IItemHandler handler : handlers){ + int slotAmount = handler.getSlots(); + if(currentI+slotAmount > i){ + return Pair.of(handler, i-currentI); + } + else{ + currentI += slotAmount; + } + } + } + return null; + } + + private TileEntityLaserRelay.TileEntityLaserRelayItem getConnectedRelay(){ + TileEntityLaserRelay.TileEntityLaserRelayItem tileFound = null; + if(this.worldObj != null){ //Why is that even possible..? + for(int i = 0; i <= 5; i++){ + EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); + BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); + TileEntity tile = this.worldObj.getTileEntity(pos); + + if(tile instanceof TileEntityLaserRelay.TileEntityLaserRelayItem){ + if(tileFound != null){ + return null; + } + else{ + tileFound = (TileEntityLaserRelay.TileEntityLaserRelayItem)tile; + } + } + } + } + return tileFound; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction){ + return this.isItemValidForSlot(index, stack); + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ + Pair handler = this.getSwitchedIndexHandler(index); + if(handler != null){ + if(ItemStack.areItemsEqual(handler.getKey().getStackInSlot(handler.getValue()), stack)){ + ItemStack gaveBack = handler.getKey().extractItem(handler.getValue(), stack.stackSize, true); + return gaveBack != null; + } + } + return false; + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ + Pair handler = this.getSwitchedIndexHandler(index); + if(handler != null){ + ItemStack gaveBack = handler.getKey().insertItem(handler.getValue(), stack, true); + return !ItemStack.areItemStacksEqual(gaveBack, stack); + } + return false; + } + + @Override + public void clear(){ + for(int i = 0; i < this.getSizeInventory(); i++){ + this.removeStackFromSlot(i); + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack){ + if(stack != null){ + Pair handler = this.getSwitchedIndexHandler(i); + if(handler != null){ + ItemStack toInsert = stack.copy(); + ItemStack inSlot = handler.getKey().getStackInSlot(handler.getValue()); + if(inSlot != null){ + toInsert.stackSize -= inSlot.stackSize; + } + handler.getKey().insertItem(handler.getValue(), toInsert, false); + } + } + else{ + this.removeStackFromSlot(i); + } + } + + @Override + public int getSizeInventory(){ + int size = 0; + List handlers = this.getItemHandlers(); + if(handlers != null){ + for(IItemHandler handler : handlers){ + size += handler.getSlots(); + } + } + return size; + } + + @Override + public ItemStack getStackInSlot(int i){ + Pair handler = this.getSwitchedIndexHandler(i); + if(handler != null){ + return handler.getKey().getStackInSlot(handler.getValue()); + } + return null; + } + + @Override + public ItemStack decrStackSize(int i, int j){ + Pair handler = this.getSwitchedIndexHandler(i); + if(handler != null){ + return handler.getKey().extractItem(handler.getValue(), j, false); + } + return null; + } + + @Override + public ItemStack removeStackFromSlot(int index){ + Pair handler = this.getSwitchedIndexHandler(index); + if(handler != null){ + ItemStack stackInSlot = handler.getKey().getStackInSlot(handler.getValue()); + if(stackInSlot != null){ + handler.getKey().extractItem(handler.getValue(), stackInSlot.stackSize, false); + } + return stackInSlot; + } + return null; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index d07fe7f0e..0f09451f0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -21,18 +21,28 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; -public class TileEntityLaserRelay extends TileEntityBase implements IEnergyReceiver{ +import java.util.ArrayList; +import java.util.List; + +public abstract class TileEntityLaserRelay extends TileEntityBase{ public static final int MAX_DISTANCE = 15; private static final float[] COLOR = new float[]{1F, 0F, 0F}; + private static final float[] COLOR_ITEM = new float[]{139F/255F, 94F/255F, 1F}; - public TileEntityLaserRelay(){ - super("laserRelay"); + public boolean isItem; + + public TileEntityLaserRelay(String name, boolean isItem){ + super(name); + this.isItem = isItem; } @Override @@ -86,7 +96,7 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ - PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 2 : Util.RANDOM.nextInt(6)+1, 0.6F, COLOR, 1F); + PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 2 : Util.RANDOM.nextInt(6)+1, 0.6F, this.isItem ? COLOR_ITEM : COLOR, 1F); } } } @@ -99,34 +109,113 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos); } - @Override - public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ - return this.transmitEnergy(WorldUtil.getCoordsFromSide(from, this.pos, 0), maxReceive, simulate); - } + public static class TileEntityLaserRelayItem extends TileEntityLaserRelay{ - @Override - public int getEnergyStored(EnumFacing from){ - return 0; - } - - @Override - public int getMaxEnergyStored(EnumFacing from){ - return 0; - } - - public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ - int transmitted = 0; - if(maxTransmit > 0){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(this.pos); - if(network != null){ - transmitted = LaserRelayConnectionHandler.getInstance().transferEnergyToReceiverInNeed(this.worldObj, blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); - } + public TileEntityLaserRelayItem(){ + super("laserRelayItem", true); + } + + public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ + List handlers = new ArrayList(); + for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ + BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; + for(BlockPos relay : relays){ + if(relay != null){ + for(int i = 0; i <= 5; i++){ + EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); + BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); + TileEntity tile = this.worldObj.getTileEntity(pos); + if(tile != null && !(tile instanceof TileEntityItemViewer)){ + IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); + if(handler != null && !handlers.contains(handler)){ + handlers.add(handler); + } + } + } + } + } + } + return handlers; } - return transmitted; } - @Override - public boolean canConnectEnergy(EnumFacing from){ - return true; + public static class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements IEnergyReceiver{ + + public TileEntityLaserRelayEnergy(){ + super("laserRelay", false); + } + + @Override + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ + return this.transmitEnergy(WorldUtil.getCoordsFromSide(from, this.pos, 0), maxReceive, simulate); + } + + @Override + public int getEnergyStored(EnumFacing from){ + return 0; + } + + @Override + public int getMaxEnergyStored(EnumFacing from){ + return 0; + } + + public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ + int transmitted = 0; + if(maxTransmit > 0){ + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(this.pos); + if(network != null){ + transmitted = this.transferEnergyToReceiverInNeed(blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); + } + } + return transmitted; + } + + @Override + public boolean canConnectEnergy(EnumFacing from){ + return true; + } + + private int transferEnergyToReceiverInNeed(BlockPos energyGottenFrom, LaserRelayConnectionHandler.Network network, int maxTransfer, boolean simulate){ + int transmitted = 0; + List alreadyChecked = new ArrayList(); + //Go through all of the connections in the network + for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ + BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; + //Go through both relays in the connection + for(BlockPos relay : relays){ + if(relay != null && !alreadyChecked.contains(relay)){ + alreadyChecked.add(relay); + //Get every side of the relay + for(int i = 0; i <= 5; i++){ + EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); + //Get the Position at the side + BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); + if(!PosUtil.areSamePos(pos, energyGottenFrom)){ + TileEntity tile = this.worldObj.getTileEntity(pos); + if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ + IEnergyReceiver receiver = (IEnergyReceiver)tile; + if(receiver.canConnectEnergy(side.getOpposite())){ + //Transfer the energy (with the energy loss!) + int theoreticalReceived = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), maxTransfer-transmitted, true); + //The amount of energy lost during a transfer + int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); + + transmitted += ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), theoreticalReceived-deduct, simulate); + transmitted += deduct; + + //If everything that could be transmitted was transmitted + if(transmitted >= maxTransfer){ + return transmitted; + } + } + } + } + } + } + } + } + return transmitted; + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 44b407a54..145c3378a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -85,11 +85,6 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ return null; } - @Override - public String getName(){ - return this.name; - } - public ISidedInventory getSided(){ return this.getInventory() instanceof ISidedInventory ? (ISidedInventory)this.getInventory() : null; } diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItem.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItem.json new file mode 100644 index 000000000..122532146 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItem.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockLaserRelayItem", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x": 180 }, + "1": {}, + "2": { "x": 90 }, + "3": { "x": 270 }, + "4": { "x": 90, "y": 270 }, + "5": { "x": 270, "y": 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 4b64811c4..cd42519c5 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -134,6 +134,8 @@ tile.actuallyadditions.blockChiseledQuartzSlab.name=Chiseled Black Quartz Slab tile.actuallyadditions.blockPillarQuartzWall.name=Black Quartz Pillar Wall tile.actuallyadditions.blockPillarQuartzStair.name=Black Quartz Pillar Stairs tile.actuallyadditions.blockPillarQuartzSlab.name=Black Quartz Pillar Slab +tile.actuallyadditions.blockLaserRelayItem.name=Item Laser Relay +tile.actuallyadditions.blockItemViewer.name=Item Interface #ESD tile.actuallyadditions.blockInputter.name=ESD @@ -440,7 +442,7 @@ tooltip.actuallyadditions.extraInfo.desc=Advanced Info tooltip.actuallyadditions.blockPhantomRange.desc=Range tooltip.actuallyadditions.laser.stored.desc= tooltip.actuallyadditions.laser.connected.desc= -tooltip.actuallyadditions.laser.cantConnect.desc=Can't connect: The relays are either part of the same network, the stored relay doesn't exist anymore or it is too far away! +tooltip.actuallyadditions.laser.cantConnect.desc=Can't connect: The relays are either part of the same network, the stored relay isn't the same type or doesn't exist anymore or it is too far away! tooltip.actuallyadditions.itemBooklet.desc=Or "Booklet", if you will #Gui Information diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItem.json b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItem.json new file mode 100644 index 000000000..0a39a5a03 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItem.json @@ -0,0 +1,880 @@ +{ + "__createdBy": "canitzp", + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/models/modelLaserRelayItem", + "laserRelay": "actuallyadditions:blocks/models/modelLaserRelayItem" + }, + "elements": [ + { + "from": [4,0,4], + "to": [12,1,12], + "faces": { + "up": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,3], + "to": [12,4,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,12], + "to": [12,4,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,12], + "to": [12,14,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,3], + "to": [12,14,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,2], + "to": [12,5,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,2], + "to": [12,11,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,13], + "to": [12,11,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,13], + "to": [12,5,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [5.5,1,5.5], + "to": [10.5,3,10.5], + "faces": { + "up": { + "uv": [13.5,13.5,16,16], + "texture": "#laserRelay" + }, + "down": { + "uv": [0.0,0.0,5.0,5.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [7,3,7], + "to": [9,14,9], + "faces": { + "up": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "west": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,14,4], + "to": [12,15,12], + "faces": { + "up": { + "uv": [1,12,5,15], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [6.5,6.5,6.5], + "to": [9.5,9.5,9.5], + "faces": { + "up": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "down": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "west": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,2], + "to": [5,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,2], + "to": [12,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,13], + "to": [12,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,13], + "to": [5,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,1,4], + "to": [4,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,1,4], + "to": [13,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,11,4], + "to": [13,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,11,4], + "to": [4,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,4,4], + "to": [3,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,10,4], + "to": [3,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,10,4], + "to": [14,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,4,4], + "to": [14,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,4], + "to": [3,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,11], + "to": [3,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,11], + "to": [14,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,4], + "to": [14,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayItem.png b/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayItem.png new file mode 100644 index 0000000000000000000000000000000000000000..1d1a654dedcc15ae4d78dab729d87e6f12c98d23 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSK$uZf!>a)($X?><>&pIsk&9nLzjW>z3!sohiEBhjaDG}z zd16s2LqTF@UWr~_YKel0o`Ifaj&YqIP)(_)i(^QHd$NI%(Jz1hGrNk_x#UU@oG51a z{rkH{#TCZId=jMxRxrECI+U|7NZw`f;LuXb*u@<37xx|u&D?y`LF-Mey4&Mr%b zC)ae>yqPG>y2GH2x!|biS{QYAF~d$ZmXGdWLy{K%XQ=yeDQ-)r=|!Le7(8A5T-G@y GGywpZCS3~v literal 0 HcmV?d00001 From b0ecc87a238574677263e48125922fd691beae53 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 9 May 2016 19:05:20 +0200 Subject: [PATCH 110/322] Reworked item system a bit to allow for black- and whitelisting --- .../mod/tile/TileEntityItemViewer.java | 118 ++++++++++++------ .../mod/tile/TileEntityLaserRelay.java | 30 +++-- 2 files changed, 102 insertions(+), 46 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index da5186ba4..6d238157c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -1,14 +1,15 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItem; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; -import org.apache.commons.lang3.tuple.Pair; +import java.util.ArrayList; import java.util.List; public class TileEntityItemViewer extends TileEntityInventoryBase{ @@ -17,8 +18,8 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ super(0, "itemViewer"); } - private List getItemHandlers(){ - TileEntityLaserRelay.TileEntityLaserRelayItem relay = this.getConnectedRelay(); + private List getItemHandlerInfos(){ + TileEntityLaserRelayItem relay = this.getConnectedRelay(); if(relay != null){ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(relay.getPos()); if(network != null){ @@ -28,37 +29,39 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ return null; } - private Pair getSwitchedIndexHandler(int i){ - List handlers = this.getItemHandlers(); + private SpecificItemHandlerInfo getSwitchedIndexHandler(int i){ + List infos = this.getItemHandlerInfos(); int currentI = 0; - if(handlers != null && !handlers.isEmpty()){ - for(IItemHandler handler : handlers){ - int slotAmount = handler.getSlots(); - if(currentI+slotAmount > i){ - return Pair.of(handler, i-currentI); - } - else{ - currentI += slotAmount; + if(infos != null && !infos.isEmpty()){ + for(GenericItemHandlerInfo info : infos){ + for(IItemHandler handler : info.handlers){ + int slotAmount = handler.getSlots(); + if(currentI+slotAmount > i){ + return new SpecificItemHandlerInfo(handler, i-currentI, info.relayInQuestion); + } + else{ + currentI += slotAmount; + } } } } return null; } - private TileEntityLaserRelay.TileEntityLaserRelayItem getConnectedRelay(){ - TileEntityLaserRelay.TileEntityLaserRelayItem tileFound = null; + private TileEntityLaserRelayItem getConnectedRelay(){ + TileEntityLaserRelayItem tileFound = null; if(this.worldObj != null){ //Why is that even possible..? for(int i = 0; i <= 5; i++){ EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); TileEntity tile = this.worldObj.getTileEntity(pos); - if(tile instanceof TileEntityLaserRelay.TileEntityLaserRelayItem){ + if(tile instanceof TileEntityLaserRelayItem){ if(tileFound != null){ return null; } else{ - tileFound = (TileEntityLaserRelay.TileEntityLaserRelayItem)tile; + tileFound = (TileEntityLaserRelayItem)tile; } } } @@ -73,10 +76,10 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ @Override public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ - Pair handler = this.getSwitchedIndexHandler(index); + SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - if(ItemStack.areItemsEqual(handler.getKey().getStackInSlot(handler.getValue()), stack)){ - ItemStack gaveBack = handler.getKey().extractItem(handler.getValue(), stack.stackSize, true); + if(ItemStack.areItemsEqual(handler.handler.getStackInSlot(handler.switchedIndex), stack)){ + ItemStack gaveBack = handler.handler.extractItem(handler.switchedIndex, stack.stackSize, true); return gaveBack != null; } } @@ -85,9 +88,9 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ @Override public boolean isItemValidForSlot(int index, ItemStack stack){ - Pair handler = this.getSwitchedIndexHandler(index); + SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - ItemStack gaveBack = handler.getKey().insertItem(handler.getValue(), stack, true); + ItemStack gaveBack = handler.handler.insertItem(handler.switchedIndex, stack, true); return !ItemStack.areItemStacksEqual(gaveBack, stack); } return false; @@ -103,14 +106,14 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ @Override public void setInventorySlotContents(int i, ItemStack stack){ if(stack != null){ - Pair handler = this.getSwitchedIndexHandler(i); + SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(i); if(handler != null){ ItemStack toInsert = stack.copy(); - ItemStack inSlot = handler.getKey().getStackInSlot(handler.getValue()); + ItemStack inSlot = handler.handler.getStackInSlot(handler.switchedIndex); if(inSlot != null){ toInsert.stackSize -= inSlot.stackSize; } - handler.getKey().insertItem(handler.getValue(), toInsert, false); + handler.handler.insertItem(handler.switchedIndex, toInsert, false); } } else{ @@ -121,10 +124,12 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ @Override public int getSizeInventory(){ int size = 0; - List handlers = this.getItemHandlers(); - if(handlers != null){ - for(IItemHandler handler : handlers){ - size += handler.getSlots(); + List infos = this.getItemHandlerInfos(); + if(infos != null){ + for(GenericItemHandlerInfo info : infos){ + for(IItemHandler handler : info.handlers){ + size += handler.getSlots(); + } } } return size; @@ -132,32 +137,73 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ @Override public ItemStack getStackInSlot(int i){ - Pair handler = this.getSwitchedIndexHandler(i); + SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(i); if(handler != null){ - return handler.getKey().getStackInSlot(handler.getValue()); + return handler.handler.getStackInSlot(handler.switchedIndex); } return null; } @Override public ItemStack decrStackSize(int i, int j){ - Pair handler = this.getSwitchedIndexHandler(i); + SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(i); if(handler != null){ - return handler.getKey().extractItem(handler.getValue(), j, false); + return handler.handler.extractItem(handler.switchedIndex, j, false); } return null; } @Override public ItemStack removeStackFromSlot(int index){ - Pair handler = this.getSwitchedIndexHandler(index); + SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - ItemStack stackInSlot = handler.getKey().getStackInSlot(handler.getValue()); + ItemStack stackInSlot = handler.handler.getStackInSlot(handler.switchedIndex); if(stackInSlot != null){ - handler.getKey().extractItem(handler.getValue(), stackInSlot.stackSize, false); + handler.handler.extractItem(handler.switchedIndex, stackInSlot.stackSize, false); } return stackInSlot; } return null; } + + private static class SpecificItemHandlerInfo{ + + public IItemHandler handler; + public int switchedIndex; + public TileEntityLaserRelayItem relayInQuestion; + + public SpecificItemHandlerInfo(IItemHandler handler, int switchedIndex, TileEntityLaserRelayItem relayInQuestion){ + this.handler = handler; + this.switchedIndex = switchedIndex; + this.relayInQuestion = relayInQuestion; + } + } + + public static class GenericItemHandlerInfo{ + + public List handlers = new ArrayList(); + public TileEntityLaserRelayItem relayInQuestion; + + public GenericItemHandlerInfo(TileEntityLaserRelayItem relayInQuestion){ + this.relayInQuestion = relayInQuestion; + } + + public static boolean containsHandler(List infos, IItemHandler handler){ + for(GenericItemHandlerInfo info : infos){ + if(info.handlers.contains(handler)){ + return true; + } + } + return false; + } + + public static boolean containsTile(List infos, TileEntityLaserRelayItem tile){ + for(GenericItemHandlerInfo info : infos){ + if(info.relayInQuestion == tile){ + return true; + } + } + return false; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 0f09451f0..ef1963b19 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer.GenericItemHandlerInfo; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -28,6 +29,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import sun.net.www.content.text.Generic; import java.util.ArrayList; import java.util.List; @@ -115,21 +117,29 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ super("laserRelayItem", true); } - public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ - List handlers = new ArrayList(); + public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ + List handlers = new ArrayList(); for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; for(BlockPos relay : relays){ if(relay != null){ - for(int i = 0; i <= 5; i++){ - EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); - TileEntity tile = this.worldObj.getTileEntity(pos); - if(tile != null && !(tile instanceof TileEntityItemViewer)){ - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); - if(handler != null && !handlers.contains(handler)){ - handlers.add(handler); + TileEntity aRelayTile = this.worldObj.getTileEntity(relay); + if(aRelayTile instanceof TileEntityLaserRelayItem){ + TileEntityLaserRelayItem relayTile = (TileEntityLaserRelayItem)aRelayTile; + if(!GenericItemHandlerInfo.containsTile(handlers, relayTile)){ + GenericItemHandlerInfo info = new GenericItemHandlerInfo(relayTile); + for(int i = 0; i <= 5; i++){ + EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); + BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); + TileEntity tile = this.worldObj.getTileEntity(pos); + if(tile != null && !(tile instanceof TileEntityItemViewer)){ + IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); + if(handler != null && !GenericItemHandlerInfo.containsHandler(handlers, handler)){ + info.handlers.add(handler); + } + } } + handlers.add(info); } } } From f034a14a691bd2bde66467271a57075593fc7310 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 18:37:00 +0200 Subject: [PATCH 111/322] Some cleanup ~ --- .../ellpeck/actuallyadditions/mod/booklet/InitBooklet.java | 1 - .../actuallyadditions/mod/gen/VillageComponentJamHouse.java | 3 --- .../actuallyadditions/mod/inventory/ContainerBreaker.java | 2 +- .../mod/inventory/ContainerCoalGenerator.java | 2 +- .../actuallyadditions/mod/inventory/ContainerCrafter.java | 2 +- .../mod/inventory/ContainerDirectionalBreaker.java | 2 +- .../actuallyadditions/mod/inventory/ContainerDropper.java | 2 +- .../actuallyadditions/mod/inventory/ContainerFeeder.java | 2 +- .../mod/inventory/ContainerFurnaceDouble.java | 2 +- .../mod/inventory/ContainerGiantChest.java | 2 +- .../actuallyadditions/mod/inventory/ContainerGrinder.java | 2 +- .../actuallyadditions/mod/inventory/ContainerMiner.java | 2 +- .../mod/inventory/ContainerPhantomPlacer.java | 2 +- .../actuallyadditions/mod/inventory/ContainerRepairer.java | 2 +- .../mod/misc/LaserRelayConnectionHandler.java | 6 ------ .../actuallyadditions/mod/tile/TileEntityLaserRelay.java | 1 - 16 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 7c1c9538b..42435a46d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index a836e2abf..aa68cc7dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -10,14 +10,11 @@ package de.ellpeck.actuallyadditions.mod.gen; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityChest; import net.minecraft.util.EnumFacing; -import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.structure.StructureBoundingBox; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index 35e952d42..2897ad075 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -50,7 +50,7 @@ public class ContainerBreaker extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index 6c7dacdfa..1fcf6e60c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -47,7 +47,7 @@ public class ContainerCoalGenerator extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index b4f0c706d..1f856f990 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -58,7 +58,7 @@ public class ContainerCrafter extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ ItemStack stack = null; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack savedStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index 09523d780..fec55b686 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -50,7 +50,7 @@ public class ContainerDirectionalBreaker extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index f6b268e0a..9be71207b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -50,7 +50,7 @@ public class ContainerDropper extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index 267b17a25..e696a95ff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -45,7 +45,7 @@ public class ContainerFeeder extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index 0bf493f40..eb5ba6767 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -51,7 +51,7 @@ public class ContainerFurnaceDouble extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index f28af7335..557ae2faa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -50,7 +50,7 @@ public class ContainerGiantChest extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index 8d7b36b63..8970e4dac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -58,7 +58,7 @@ public class ContainerGrinder extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index e42b19279..906dc6016 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -50,7 +50,7 @@ public class ContainerMiner extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index b41246de6..b4b22ee32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -50,7 +50,7 @@ public class ContainerPhantomPlacer extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index c75ab13c4..bbd9bd86d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -48,7 +48,7 @@ public class ContainerRepairer extends Container{ final int hotbarStart = inventoryEnd+1; final int hotbarEnd = hotbarStart+8; - Slot theSlot = (Slot)this.inventorySlots.get(slot); + Slot theSlot = this.inventorySlots.get(slot); if(theSlot != null && theSlot.getHasStack()){ ItemStack newStack = theSlot.getStack(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 6b6441e23..9c6e2427a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -10,18 +10,12 @@ package de.ellpeck.actuallyadditions.mod.misc; -import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; public class LaserRelayConnectionHandler{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index ef1963b19..1718393af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -29,7 +29,6 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import sun.net.www.content.text.Generic; import java.util.ArrayList; import java.util.List; From 3b0b6dab54308985c9209f40205522b2ba9ece14 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 18:48:35 +0200 Subject: [PATCH 112/322] Made ActAdd Java 6 compatible. Yea. --- .../metalists/TheColoredLampColors.java | 13 +++++-- .../mod/blocks/render/RenderSmileyCloud.java | 34 +++++++++++-------- .../mod/misc/special/SpecialRenderInit.java | 12 ++++--- .../mod/proxy/ClientProxy.java | 2 +- .../mod/tile/TileEntitySmileyCloud.java | 4 +-- .../mod/util/StringUtil.java | 14 -------- 6 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java index 384246947..34515bf87 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java @@ -12,6 +12,8 @@ package de.ellpeck.actuallyadditions.mod.blocks.metalists; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import java.util.Locale; + public enum TheColoredLampColors{ WHITE("White"), @@ -40,9 +42,14 @@ public enum TheColoredLampColors{ public static TheColoredLampColors getColorFromDyeName(String color){ if(color.substring(0, 3).equals("dye")){ String actualName = color.substring(3); - for(int i = 0; i < values().length; i++){ - if(StringUtil.equalsToLowerCase(values()[i].name, actualName)){ - return values()[i]; + if(actualName != null){ + for(int i = 0; i < values().length; i++){ + String aName = values()[i].name; + if(aName != null){ + if(aName.toLowerCase(Locale.ROOT).equals(actualName.toLowerCase(Locale.ROOT))){ + return values()[i]; + } + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index befb31b3d..cfe9bec79 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -22,6 +22,8 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +import java.util.Locale; + public class RenderSmileyCloud extends TileEntitySpecialRenderer{ @Override @@ -40,22 +42,24 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ easterEggs: for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ for(String triggerName : cloud.getTriggerNames()){ - if(StringUtil.equalsToLowerCase(triggerName, theCloud.name)){ - GlStateManager.pushMatrix(); - switch(PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ - case 1: - GlStateManager.rotate(180, 0, 1, 0); - break; - case 2: - GlStateManager.rotate(270, 0, 1, 0); - break; - case 3: - GlStateManager.rotate(90, 0, 1, 0); - break; + if(triggerName != null && theCloud.name != null){ + if(triggerName.toLowerCase(Locale.ROOT).equals(theCloud.name.toLowerCase(Locale.ROOT))){ + GlStateManager.pushMatrix(); + switch(PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ + case 1: + GlStateManager.rotate(180, 0, 1, 0); + break; + case 2: + GlStateManager.rotate(270, 0, 1, 0); + break; + case 3: + GlStateManager.rotate(90, 0, 1, 0); + break; + } + cloud.renderExtra(0.0625F); + GlStateManager.popMatrix(); + break easterEggs; } - cloud.renderExtra(0.0625F); - GlStateManager.popMatrix(); - break easterEggs; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index 61c5c63ae..a8f02ae4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -21,6 +21,7 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.Properties; @@ -72,10 +73,13 @@ public class SpecialRenderInit{ if(!specialList.isEmpty()){ for(Map.Entry entry : specialList.entrySet()){ //Does the player have one of the names from the list? - if(StringUtil.equalsToLowerCase(entry.getKey(), event.getEntityPlayer().getName())){ - //Render the special Item/Block - entry.getValue().render(event.getEntityPlayer(), event.getPartialRenderTick()); - break; + String playerName = event.getEntityPlayer().getName(); + if(entry.getKey() != null && playerName != null){ + if(entry.getKey().toLowerCase(Locale.ROOT).equals(playerName.toLowerCase(Locale.ROOT))){ + //Render the special Item/Block + entry.getValue().render(event.getEntityPlayer(), event.getPartialRenderTick()); + break; + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 70e5418a0..f28d555cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -91,7 +91,7 @@ public class ClientProxy implements IProxy{ Calendar c = Calendar.getInstance(); pumpkinBlurPumpkinBlur = c.get(Calendar.MONTH) == Calendar.OCTOBER; jingleAllTheWay = c.get(Calendar.MONTH) == Calendar.DECEMBER && c.get(Calendar.DAY_OF_MONTH) >= 6 && c.get(Calendar.DAY_OF_MONTH) <= 26; - bulletForMyValentine = (c.get(Calendar.MONTH) == Calendar.FEBRUARY && c.get(Calendar.DAY_OF_MONTH) >= 12 && c.get(Calendar.DAY_OF_MONTH) <= 16) || StringUtil.equalsToLowerCase(Minecraft.getMinecraft().getSession().getUsername(), "pinkhrya"); + bulletForMyValentine = c.get(Calendar.MONTH) == Calendar.FEBRUARY && c.get(Calendar.DAY_OF_MONTH) >= 12 && c.get(Calendar.DAY_OF_MONTH) <= 16; } else{ ModUtil.LOGGER.warn("You have turned Seasonal Mode off. Therefore, you are evil."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 6a54495ca..dc1d22cd8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -15,8 +15,6 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; -import java.util.Objects; - public class TileEntitySmileyCloud extends TileEntityBase implements IStringReactor{ public String name; @@ -44,7 +42,7 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(!Objects.equals(this.name, this.nameBefore) && this.sendUpdateWithInterval()){ + if((this.nameBefore == null || !this.nameBefore.equals(this.name)) && this.sendUpdateWithInterval()){ this.nameBefore = this.name; this.markDirty(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index 3594e4b48..f336099ac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -16,7 +16,6 @@ import net.minecraftforge.fluids.FluidTank; import java.util.List; import java.util.Locale; -import java.util.Objects; public class StringUtil{ @@ -39,19 +38,6 @@ public class StringUtil{ return I18n.translateToLocalFormatted(text, replace); } - public static boolean equalsToLowerCase(String one, String two){ - return Objects.equals(toLowerCase(one), toLowerCase(two)); - } - - public static String toLowerCase(String string){ - if(string == null){ - return null; - } - else{ - return string.toLowerCase(Locale.ROOT); - } - } - public static void drawSplitString(FontRenderer renderer, String strg, int x, int y, int width, int color, boolean shadow){ List list = renderer.listFormattedStringToWidth(strg, width); for(int i = 0; i < list.size(); i++){ From 1c9038d703f8d5343947fee3845dc21fca42f106 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 18:57:26 +0200 Subject: [PATCH 113/322] Made the smiley cloud not continuously mark dirty --- .../actuallyadditions/mod/tile/TileEntitySmileyCloud.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index dc1d22cd8..a893ca60f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -42,7 +42,7 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if((this.nameBefore == null || !this.nameBefore.equals(this.name)) && this.sendUpdateWithInterval()){ + if(((this.nameBefore == null && this.name != null) || !this.nameBefore.equals(this.name)) && this.sendUpdateWithInterval()){ this.nameBefore = this.name; this.markDirty(); } From a7a76cc8618196f13df93e0eefd3bfa236cbff4d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 19:00:35 +0200 Subject: [PATCH 114/322] Dang it, now it's right --- .../actuallyadditions/mod/tile/TileEntitySmileyCloud.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index a893ca60f..839960dba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -42,7 +42,8 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(((this.nameBefore == null && this.name != null) || !this.nameBefore.equals(this.name)) && this.sendUpdateWithInterval()){ + boolean nameChanged = this.name != null ? !this.name.equals(this.nameBefore) : this.nameBefore != null; + if(nameChanged && this.sendUpdateWithInterval()){ this.nameBefore = this.name; this.markDirty(); } From b75837d6b281ce66bfeca0bdfb5c6eb08d3cc751 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 20:49:17 +0200 Subject: [PATCH 115/322] Changed some stuff around in Drill's container to match TileInventoryBase's sorting --- .../mod/inventory/ContainerDrill.java | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index a34c2e0a6..2f6e4a002 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -14,6 +14,7 @@ import cofh.api.energy.IEnergyContainerItem; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.items.ItemDrillUpgrade; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -23,6 +24,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; @InventoryContainer public class ContainerDrill extends Container{ @@ -153,16 +155,6 @@ public class ContainerDrill extends Container{ return "drill"; } - @Override - public boolean hasCustomName(){ - return false; - } - - @Override - public ITextComponent getDisplayName(){ - return null; - } - @Override public int getInventoryStackLimit(){ return 64; @@ -174,7 +166,22 @@ public class ContainerDrill extends Container{ } @Override - public boolean isItemValidForSlot(int slot, ItemStack stack){ + public boolean isUseableByPlayer(EntityPlayer player){ + return true; + } + + @Override + public void openInventory(EntityPlayer player){ + + } + + @Override + public void closeInventory(EntityPlayer player){ + + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ return true; } @@ -195,22 +202,8 @@ public class ContainerDrill extends Container{ @Override public void clear(){ - this.slots = new ItemStack[this.slots.length]; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player){ - return true; - } - - @Override - public void openInventory(EntityPlayer player){ - - } - - @Override - public void closeInventory(EntityPlayer player){ - + int length = this.slots.length; + this.slots = new ItemStack[length]; } @Override @@ -260,5 +253,15 @@ public class ContainerDrill extends Container{ this.slots[index] = null; return stack; } + + @Override + public boolean hasCustomName(){ + return false; + } + + @Override + public ITextComponent getDisplayName(){ + return new TextComponentString(StringUtil.localize(this.getName())); + } } } \ No newline at end of file From cd0eb091b398016b0407a5fba8c3e240d5f46298 Mon Sep 17 00:00:00 2001 From: Kristian W Date: Tue, 10 May 2016 21:10:31 +0200 Subject: [PATCH 116/322] Translated up to l. 586 --- .../resources/assets/actuallyadditions/lang/de_DE.lang | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/de_DE.lang b/src/main/resources/assets/actuallyadditions/lang/de_DE.lang index f76218160..c8f469f96 100644 --- a/src/main/resources/assets/actuallyadditions/lang/de_DE.lang +++ b/src/main/resources/assets/actuallyadditions/lang/de_DE.lang @@ -578,12 +578,12 @@ booklet.actuallyadditions.chapter.intro.text.3=dieses Actually Additions gesc booklet.actuallyadditions.chapter.craftingIngs.name=Werkel-Zutaten booklet.actuallyadditions.chapter.craftingIngs.text.1=Actually Additions hat viele Gegenstände, die elementare Werkel-Gegenstände benötigen um hergestellt zu werden. In diesem Kapitel sind diese alle gruppiert, so kannst du sie alle auf einem Mal sehen. -booklet.actuallyadditions.chapter.quartz.name=Black Quartz -booklet.actuallyadditions.chapter.quartz.text.1=Black Quartz is an Ore that generates in the world between layer and . When broken, it can be smelted in a furnace or crushed in a crusher to get broken down into Black Quartz. -booklet.actuallyadditions.chapter.quartz.text.2=Black Quartz items are used in lots of Crafting Recipes in Actually Additions. They are very important for most of the Items and, thus, should be mined when found in the world. They can be crafted into a couple of different Decorative Blocks shown on the following pages. Every variant can also be crafted into Stairs, Slabs and Walls using the well-known recipes. Nether Quartz, but deadlier +booklet.actuallyadditions.chapter.quartz.name=Schwarzer Quarz +booklet.actuallyadditions.chapter.quartz.text.1=Schwarzer Quarz ist ein Erz welches in der Welt zwischen Ebene und generiert. Wenn es abgebaut wurde, kann es in einem Ofen geschmolzen or in einem Brecher gebrochen werden. +booklet.actuallyadditions.chapter.quartz.text.2=Der Gegenstand Schwarzer Quarz wird in der Herstellung vieler Dinge in Actually Additions gebraucht. Sie sind sehr wichtig, un solten deswegen abgebaut werden, wenn sie gefunden werden. Aus ihnen lassen sich einige dekorative Blöcke produzieren, welche auf den folgenden Seiten gezeigt werden. Jede Variante kann auch zu Treppen, Stufen oder Wänden weiterverarbeitet werden, indem man die gängigen Rezepte nutzt. Nether-Quarz, nur tötlicher -booklet.actuallyadditions.chapter.cloud.name=Smiley Cloud -booklet.actuallyadditions.chapter.cloud.text.1=The Smiley Cloud is a magical floating cloud which is getting put to life through the piece of Solidified Experience inside it. It hovers up and down in its place all jolly and fun, and when right-clicking, you can give it a name. When giving it certain special names like "Ellpeck" or "AcidBlues", it will have some special items it carries! +booklet.actuallyadditions.chapter.cloud.name=Smiley-Wolke +booklet.actuallyadditions.chapter.cloud.text.1=Die Smiley-Wolke ist eine magisch schwebende Wolke, in die Leben durch ein kleines Stück Verdichtete Erfahrung eingehaucht wird. Sie schwebt an ihrem Platz hoch und runter, ganz heiter und fröhlich, mit einem Rechtsklickkannst du ihr einen Namen geben. Wenn du ihr besondere Namen bibst, wie beispielsweise "Ellpeck" oder "AcidBlues", trägt sie ein paar besondere Gegenstände! booklet.actuallyadditions.chapter.coalStuff.name=Coal Stuff booklet.actuallyadditions.chapter.coalStuff.text.1=Sometimes your Coal just burns for too long or too short, you know what I mean? For that, you can now craft Tiny Coal, Tiny Charcoal and Blocks of Charcoal for using them in a furnace. While the Block of Charcoal burns for as long as a Block of Coal, the Tiny Coal and Tiny Charcoal will burn for one eighth of a piece of coal, meaning it will smelt one item in a normal furnace. From ea1c65bbb3cf8149f6c02098a62831a1efcd3d74 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 22:19:15 +0200 Subject: [PATCH 117/322] Added whitelistable advanced item laser relays --- .../mod/blocks/BlockLaserRelay.java | 39 +- .../mod/blocks/InitBlocks.java | 6 +- .../mod/creative/CreativeTab.java | 1 + .../mod/inventory/ContainerDrill.java | 2 +- .../ContainerLaserRelayItemWhitelist.java | 110 +++ .../mod/inventory/GuiHandler.java | 7 +- .../gui/GuiLaserRelayItemWhitelist.java | 108 +++ .../mod/items/ItemDrill.java | 31 +- .../mod/tile/TileEntityBase.java | 1 + .../mod/tile/TileEntityInventoryBase.java | 49 +- .../mod/tile/TileEntityItemViewer.java | 14 +- .../mod/tile/TileEntityLaserRelay.java | 223 ++++- .../blockLaserRelayItemWhitelist.json | 19 + .../assets/actuallyadditions/lang/en_US.lang | 2 + .../block/blockLaserRelayItemWhitelist.json | 880 ++++++++++++++++++ .../models/modelLaserRelayItemWhitelist.png | Bin 0 -> 317 bytes .../gui/guiLaserRelayItemWhitelist.png | Bin 0 -> 2050 bytes 17 files changed, 1429 insertions(+), 63 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItemWhitelist.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItemWhitelist.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayItemWhitelist.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiLaserRelayItemWhitelist.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 579bb611b..1d6d5fe34 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -10,33 +10,37 @@ package de.ellpeck.actuallyadditions.mod.blocks; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockLaserRelay extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); - private boolean isItem; + private Type type; - public BlockLaserRelay(String name, boolean isItem){ + public BlockLaserRelay(String name, Type type){ super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); this.setHardness(1.5F); this.setResistance(10.0F); this.setSoundType(SoundType.STONE); - this.isItem = isItem; + this.type = type; } @Override @@ -64,8 +68,35 @@ public class BlockLaserRelay extends BlockContainerBase{ return META; } + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ + if(player.isSneaking()){ + TileEntityLaserRelay relay = (TileEntityLaserRelay)world.getTileEntity(pos); + if(relay instanceof TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist){ + if(!world.isRemote){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.LASER_RELAY_ITEM_WHITELIST.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + } + return true; + } + } + return false; + } + @Override public TileEntity createNewTileEntity(World world, int i){ - return this.isItem ? new TileEntityLaserRelay.TileEntityLaserRelayItem() : new TileEntityLaserRelay.TileEntityLaserRelayEnergy(); + switch(this.type){ + case ITEM: + return new TileEntityLaserRelay.TileEntityLaserRelayItem(); + case ITEM_WHITELIST: + return new TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist(); + default: + return new TileEntityLaserRelay.TileEntityLaserRelayEnergy(); + } + } + + public enum Type{ + ENERGY, + ITEM, + ITEM_WHITELIST } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 60fd1d39e..25e616800 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -93,6 +93,7 @@ public class InitBlocks{ public static Block blockLaserRelay; public static Block blockLaserRelayItem; + public static Block blockLaserRelayItemWhitelist; public static Block blockItemViewer; public static Block blockBlackLotus; @@ -122,8 +123,9 @@ public class InitBlocks{ blockAtomicReconstructor = new BlockAtomicReconstructor("blockAtomicReconstructor"); blockCrystal = new BlockCrystal("blockCrystal"); blockBlackLotus = new BlockBlackLotus("blockBlackLotus"); - blockLaserRelay = new BlockLaserRelay("blockLaserRelay", false); - blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", true); + blockLaserRelay = new BlockLaserRelay("blockLaserRelay", BlockLaserRelay.Type.ENERGY); + blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", BlockLaserRelay.Type.ITEM); + blockLaserRelayItemWhitelist = new BlockLaserRelay("blockLaserRelayItemWhitelist", BlockLaserRelay.Type.ITEM_WHITELIST); blockRangedCollector = new BlockRangedCollector("blockRangedCollector"); blockDirectionalBreaker = new BlockDirectionalBreaker("blockDirectionalBreaker"); blockLeafGenerator = new BlockLeafGenerator("blockLeafGenerator"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 32578b166..8ab5aebd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -56,6 +56,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockFireworkBox); this.add(InitBlocks.blockLaserRelay); this.add(InitBlocks.blockLaserRelayItem); + this.add(InitBlocks.blockLaserRelayItemWhitelist); this.add(InitBlocks.blockItemViewer); this.add(InitBlocks.blockAtomicReconstructor); this.add(InitBlocks.blockPhantomface); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index 2f6e4a002..c223d84b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -29,7 +29,7 @@ import net.minecraft.util.text.TextComponentString; @InventoryContainer public class ContainerDrill extends Container{ - private static final int SLOT_AMOUNT = 5; + public static final int SLOT_AMOUNT = 5; private InventoryDrill drillInventory = new InventoryDrill(); private InventoryPlayer inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java new file mode 100644 index 000000000..6d5545319 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -0,0 +1,110 @@ +/* + * This file ("ContainerInputter.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.inventory; + +import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; +import invtweaks.api.container.InventoryContainer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +@InventoryContainer +public class ContainerLaserRelayItemWhitelist extends Container{ + + private TileEntityLaserRelayItemWhitelist tile; + + public ContainerLaserRelayItemWhitelist(InventoryPlayer inventory, TileEntityBase tile){ + this.tile = (TileEntityLaserRelayItemWhitelist)tile; + + for(int i = 0; i < 2; i++){ + for(int x = 0; x < 3; x++){ + for(int y = 0; y < 4; y++){ + this.addSlotToContainer(new SlotFilter(this.tile.filterInventory, y+x*4+i*12, 20+i*84+x*18, 6+y*18)); + } + } + } + + for(int i = 0; i < 3; i++){ + for(int j = 0; j < 9; j++){ + this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 97+i*18)); + } + } + for(int i = 0; i < 9; i++){ + this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 155)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + final int inventoryStart = 0; + final int inventoryEnd = inventoryStart+26; + final int hotbarStart = inventoryEnd+1; + final int hotbarEnd = hotbarStart+8; + + Slot theSlot = this.inventorySlots.get(slot); + + if(theSlot != null && theSlot.getHasStack()){ + ItemStack newStack = theSlot.getStack(); + ItemStack currentStack = newStack.copy(); + + //Other Slots in Inventory excluded + if(slot >= inventoryStart){ + if(slot >= inventoryStart && slot <= inventoryEnd){ + if(!this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false)){ + return null; + } + } + else if(slot >= inventoryEnd+1 && slot < hotbarEnd+1 && !this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false)){ + return null; + } + } + else if(!this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false)){ + return null; + } + + if(newStack.stackSize == 0){ + theSlot.putStack(null); + } + else{ + theSlot.onSlotChanged(); + } + + if(newStack.stackSize == currentStack.stackSize){ + return null; + } + theSlot.onPickupFromSlot(player, newStack); + + return currentStack; + } + return null; + } + + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ + if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ + //Calls the Filter's SlotClick function + return ((SlotFilter)this.getSlot(slotId)).slotClick(player); + } + else{ + return super.slotClick(slotId, dragType, clickTypeIn, player); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.tile.canPlayerUse(player); + } +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index 4df893416..0fd136b54 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -87,6 +87,8 @@ public class GuiHandler implements IGuiHandler{ return new ContainerRangedCollector(entityPlayer.inventory, tile); case MINER: return new ContainerMiner(entityPlayer.inventory, tile); + case LASER_RELAY_ITEM_WHITELIST: + return new ContainerLaserRelayItemWhitelist(entityPlayer.inventory, tile); default: return null; } @@ -153,6 +155,8 @@ public class GuiHandler implements IGuiHandler{ return new GuiRangedCollector(entityPlayer.inventory, tile, x, y, z, world); case MINER: return new GuiMiner(entityPlayer.inventory, tile); + case LASER_RELAY_ITEM_WHITELIST: + return new GuiLaserRelayItemWhitelist(entityPlayer.inventory, tile); default: return null; } @@ -185,7 +189,8 @@ public class GuiHandler implements IGuiHandler{ BOOK(false), DIRECTIONAL_BREAKER, RANGED_COLLECTOR, - MINER; + MINER, + LASER_RELAY_ITEM_WHITELIST; public boolean checkTileEntity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java new file mode 100644 index 000000000..b393643fb --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -0,0 +1,108 @@ +/* + * This file ("GuiOilGenerator.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.inventory.gui; + +import de.ellpeck.actuallyadditions.mod.inventory.ContainerLaserRelayItemWhitelist; +import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiInputter.SmallerButton; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.ArrayList; +import java.util.List; + +@SideOnly(Side.CLIENT) +public class GuiLaserRelayItemWhitelist extends GuiContainer{ + + private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiLaserRelayItemWhitelist"); + private TileEntityLaserRelayItemWhitelist tile; + + private SmallerButton whitelistLeft; + private SmallerButton whitelistRight; + + public GuiLaserRelayItemWhitelist(InventoryPlayer inventory, TileEntityBase tile){ + super(new ContainerLaserRelayItemWhitelist(inventory, tile)); + this.tile = (TileEntityLaserRelayItemWhitelist)tile; + this.xSize = 176; + this.ySize = 93+86; + } + + @Override + public void initGui(){ + super.initGui(); + + this.whitelistLeft = new SmallerButton(0, this.guiLeft+3, this.guiTop+16, ""); + this.whitelistRight = new SmallerButton(1, this.guiLeft+157, this.guiTop+16, ""); + this.buttonList.add(this.whitelistLeft); + this.buttonList.add(this.whitelistRight); + } + + @Override + public void actionPerformed(GuiButton button){ + BlockPos pos = this.tile.getPos(); + PacketHandler.theNetwork.sendToServer(new PacketGuiButton(pos.getX(), pos.getY(), pos.getZ(), this.tile.getWorld(), button.id, Minecraft.getMinecraft().thePlayer)); + } + + @Override + public void drawScreen(int x, int y, float f){ + super.drawScreen(x, y, f); + + this.whitelistLeft.displayString = this.tile.isLeftWhitelist ? "O" : "X"; + this.whitelistRight.displayString = this.tile.isRightWhitelist ? "O" : "X"; + + List infoList = this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.whitelistInfo"), 200); + String text1 = this.tile.isLeftWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); + if(x >= this.guiLeft+3 && y >= this.guiTop+16 && x <= this.guiLeft+18 && y <= this.guiTop+31){ + ArrayList list = new ArrayList(); + list.add(TextFormatting.BOLD+text1); + list.addAll(infoList); + this.drawHoveringText(list, x, y); + } + String text2 = this.tile.isRightWhitelist ? StringUtil.localize("info."+ModUtil.MOD_ID+".gui.whitelist") : StringUtil.localize("info."+ModUtil.MOD_ID+".gui.blacklist"); + if(x >= this.guiLeft+157 && y >= this.guiTop+16 && x <= this.guiLeft+172 && y <= this.guiTop+31){ + ArrayList list = new ArrayList(); + list.add(TextFormatting.BOLD+text2); + list.addAll(infoList); + this.drawHoveringText(list, x, y); + } + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tile.name); + } + + @Override + public void drawGuiContainerBackgroundLayer(float f, int x, int y){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); + + this.mc.getTextureManager().bindTexture(resLoc); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); + + } +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 91149e37e..bab2c6c8f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -15,8 +15,10 @@ import com.google.common.collect.Multimap; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -150,19 +152,9 @@ public class ItemDrill extends ItemEnergy{ return null; } - int slotAmount = compound.getInteger("SlotAmount"); - ItemStack[] slots = new ItemStack[slotAmount]; + ItemStack[] slots = new ItemStack[ContainerDrill.SLOT_AMOUNT]; + TileEntityInventoryBase.loadSlots(slots, compound); - if(slots.length > 0){ - NBTTagList tagList = compound.getTagList("Items", 10); - for(int i = 0; i < tagList.tagCount(); i++){ - NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - byte slotIndex = tagCompound.getByte("Slot"); - if(slotIndex >= 0 && slotIndex < slots.length){ - slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); - } - } - } return slots; } @@ -407,20 +399,7 @@ public class ItemDrill extends ItemEnergy{ if(compound == null){ compound = new NBTTagCompound(); } - - if(slots != null && slots.length > 0){ - compound.setInteger("SlotAmount", slots.length); - NBTTagList tagList = new NBTTagList(); - for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ - if(slots[currentIndex] != null){ - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setByte("Slot", (byte)currentIndex); - slots[currentIndex].writeToNBT(tagCompound); - tagList.appendTag(tagCompound); - } - } - compound.setTag("Items", tagList); - } + TileEntityInventoryBase.saveSlots(slots, compound); stack.setTagCompound(compound); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 7273cf793..8c062e476 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -84,6 +84,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityPhantomRedstoneface.class, ModUtil.MOD_ID+":tileEntityPhantomRedstoneface"); GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayItem.class, ModUtil.MOD_ID+":tileEntityLaserRelayItem"); GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayEnergy.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); + GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist"); GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 73a6056a2..f4b43edb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -48,17 +49,34 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.writeSyncableNBT(compound, isForSync); if(!isForSync || this.shouldSyncSlots()){ - if(this.slots.length > 0){ - NBTTagList tagList = new NBTTagList(); - for(int currentIndex = 0; currentIndex < this.slots.length; currentIndex++){ - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setByte("Slot", (byte)currentIndex); - if(this.slots[currentIndex] != null){ - this.slots[currentIndex].writeToNBT(tagCompound); - } - tagList.appendTag(tagCompound); + saveSlots(this.slots, compound); + } + } + + public static void saveSlots(ItemStack[] slots, NBTTagCompound compound){ + if(slots != null && slots.length > 0){ + NBTTagList tagList = new NBTTagList(); + for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte)currentIndex); + if(slots[currentIndex] != null){ + slots[currentIndex].writeToNBT(tagCompound); + } + tagList.appendTag(tagCompound); + } + compound.setTag("Items", tagList); + } + } + + public static void loadSlots(ItemStack[] slots, NBTTagCompound compound){ + if(slots != null && slots.length > 0){ + NBTTagList tagList = compound.getTagList("Items", 10); + for(int i = 0; i < tagList.tagCount(); i++){ + NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); + byte slotIndex = tagCompound.getByte("Slot"); + if(slotIndex >= 0 && slotIndex < slots.length){ + slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); } - compound.setTag("Items", tagList); } } } @@ -71,16 +89,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.readSyncableNBT(compound, isForSync); if(!isForSync || this.shouldSyncSlots()){ - if(this.slots.length > 0){ - NBTTagList tagList = compound.getTagList("Items", 10); - for(int i = 0; i < tagList.tagCount(); i++){ - NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - byte slotIndex = tagCompound.getByte("Slot"); - if(slotIndex >= 0 && slotIndex < this.slots.length){ - this.slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); - } - } - } + loadSlots(this.slots, compound); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 6d238157c..d40350b69 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -78,9 +78,11 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - if(ItemStack.areItemsEqual(handler.handler.getStackInSlot(handler.switchedIndex), stack)){ - ItemStack gaveBack = handler.handler.extractItem(handler.switchedIndex, stack.stackSize, true); - return gaveBack != null; + if(handler.relayInQuestion.isWhitelisted(stack)){ + if(ItemStack.areItemsEqual(handler.handler.getStackInSlot(handler.switchedIndex), stack)){ + ItemStack gaveBack = handler.handler.extractItem(handler.switchedIndex, stack.stackSize, true); + return gaveBack != null; + } } } return false; @@ -90,8 +92,10 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ public boolean isItemValidForSlot(int index, ItemStack stack){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - ItemStack gaveBack = handler.handler.insertItem(handler.switchedIndex, stack, true); - return !ItemStack.areItemStacksEqual(gaveBack, stack); + if(handler.relayInQuestion.isWhitelisted(stack)){ + ItemStack gaveBack = handler.handler.insertItem(handler.switchedIndex, stack, true); + return !ItemStack.areItemStacksEqual(gaveBack, stack); + } } return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 1718393af..9befa2805 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -15,16 +15,24 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; +import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer.GenericItemHandlerInfo; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import io.netty.util.internal.ConcurrentSet; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.items.CapabilityItemHandler; @@ -61,11 +69,13 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ else{ LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(thisPos); } + + super.receiveSyncCompound(compound); } @Override public NBTTagCompound getSyncCompound(){ - NBTTagCompound compound = new NBTTagCompound(); + NBTTagCompound compound = super.getSyncCompound(); BlockPos thisPos = this.pos; ConcurrentSet connections = LaserRelayConnectionHandler.getInstance().getConnectionsFor(thisPos); @@ -76,9 +86,8 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ list.appendTag(pair.writeToNBT()); } compound.setTag("Connections", list); - return compound; } - return null; + return compound; } @Override @@ -112,8 +121,16 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public static class TileEntityLaserRelayItem extends TileEntityLaserRelay{ + public TileEntityLaserRelayItem(String name){ + super(name, true); + } + public TileEntityLaserRelayItem(){ - super("laserRelayItem", true); + this("laserRelayItem"); + } + + public boolean isWhitelisted(ItemStack stack){ + return true; } public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ @@ -148,6 +165,204 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ } } + public static class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ + + private ItemStack[] slots = new ItemStack[24]; + + public IInventory filterInventory; + + public boolean isLeftWhitelist; + public boolean isRightWhitelist; + + private boolean lastLeftWhitelist; + private boolean lastRightWhitelist; + + public TileEntityLaserRelayItemWhitelist(){ + super("laserRelayItemWhitelist"); + + this.filterInventory = new IInventory(){ + + private TileEntityLaserRelayItemWhitelist tile; + + private IInventory setTile(TileEntityLaserRelayItemWhitelist tile){ + this.tile = tile; + return this; + } + + @Override + public String getName(){ + return this.tile.name; + } + + @Override + public int getInventoryStackLimit(){ + return 64; + } + + @Override + public void markDirty(){ + + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player){ + return this.tile.canPlayerUse(player); + } + + @Override + public void openInventory(EntityPlayer player){ + + } + + @Override + public void closeInventory(EntityPlayer player){ + + } + + @Override + public int getField(int id){ + return 0; + } + + @Override + public void setField(int id, int value){ + + } + + @Override + public int getFieldCount(){ + return 0; + } + + @Override + public void clear(){ + int length = this.tile.slots.length; + this.tile.slots = new ItemStack[length]; + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack){ + this.tile.slots[i] = stack; + this.markDirty(); + } + + @Override + public int getSizeInventory(){ + return this.tile.slots.length; + } + + @Override + public ItemStack getStackInSlot(int i){ + if(i < this.getSizeInventory()){ + return this.tile.slots[i]; + } + return null; + } + + @Override + public ItemStack decrStackSize(int i, int j){ + if(this.tile.slots[i] != null){ + ItemStack stackAt; + if(this.tile.slots[i].stackSize <= j){ + stackAt = this.tile.slots[i]; + this.tile.slots[i] = null; + this.markDirty(); + return stackAt; + } + else{ + stackAt = this.tile.slots[i].splitStack(j); + if(this.tile.slots[i].stackSize <= 0){ + this.tile.slots[i] = null; + } + this.markDirty(); + return stackAt; + } + } + return null; + } + + @Override + public ItemStack removeStackFromSlot(int index){ + ItemStack stack = this.tile.slots[index]; + this.tile.slots[index] = null; + return stack; + } + + @Override + public boolean hasCustomName(){ + return false; + } + + @Override + public ITextComponent getDisplayName(){ + return new TextComponentString(StringUtil.localize(this.getName())); + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ + return false; + } + }.setTile(this); + } + + @Override + public boolean isWhitelisted(ItemStack stack){ + return this.checkFilter(stack, true, this.isLeftWhitelist) || this.checkFilter(stack, false, this.isRightWhitelist); + } + + private boolean checkFilter(ItemStack stack, boolean left, boolean isWhitelist){ + int slotStart = left ? 0 : 12; + int slotStop = slotStart+12; + + for(int i = slotStart; i < slotStop; i++){ + if(this.slots[i] != null && this.slots[i].isItemEqual(stack)){ + return isWhitelist; + } + } + return !isWhitelist; + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.writeSyncableNBT(compound, isForSync); + if(!isForSync){ + TileEntityInventoryBase.saveSlots(this.slots, compound); + } + compound.setBoolean("LeftWhitelist", this.isLeftWhitelist); + compound.setBoolean("RightWhitelist", this.isRightWhitelist); + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.readSyncableNBT(compound, isForSync); + if(!isForSync){ + TileEntityInventoryBase.loadSlots(this.slots, compound); + } + this.isLeftWhitelist = compound.getBoolean("LeftWhitelist"); + this.isRightWhitelist = compound.getBoolean("RightWhitelist"); + } + + @Override + public void onButtonPressed(int buttonID, EntityPlayer player){ + if(buttonID == 0){ + this.isLeftWhitelist = !this.isLeftWhitelist; + } + else if(buttonID == 1){ + this.isRightWhitelist = !this.isRightWhitelist; + } + } + + @Override + public void updateEntity(){ + super.updateEntity(); + + if((this.isLeftWhitelist != this.lastLeftWhitelist || this.isRightWhitelist != this.lastRightWhitelist) && this.sendUpdateWithInterval()){ + this.lastLeftWhitelist = this.isLeftWhitelist; + this.lastRightWhitelist = this.isRightWhitelist; + } + } + } + public static class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements IEnergyReceiver{ public TileEntityLaserRelayEnergy(){ diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItemWhitelist.json b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItemWhitelist.json new file mode 100644 index 000000000..9993a6f0f --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockLaserRelayItemWhitelist.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockLaserRelayItemWhitelist", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "x": 180 }, + "1": {}, + "2": { "x": 90 }, + "3": { "x": 270 }, + "4": { "x": 90, "y": 270 }, + "5": { "x": 270, "y": 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index cd42519c5..6d6e4675e 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -135,6 +135,7 @@ tile.actuallyadditions.blockPillarQuartzWall.name=Black Quartz Pillar Wall tile.actuallyadditions.blockPillarQuartzStair.name=Black Quartz Pillar Stairs tile.actuallyadditions.blockPillarQuartzSlab.name=Black Quartz Pillar Slab tile.actuallyadditions.blockLaserRelayItem.name=Item Laser Relay +tile.actuallyadditions.blockLaserRelayItemWhitelist.name=Advanced Item Laser Relay tile.actuallyadditions.blockItemViewer.name=Item Interface #ESD @@ -506,6 +507,7 @@ container.actuallyadditions.cloud.name=Smiley Cloud container.actuallyadditions.directionalBreaker.name=Long-Range Breaker container.actuallyadditions.rangedCollector.name=Ranged Collector container.actuallyadditions.miner.name=Vertical Digger +container.actuallyadditions.laserRelayItemWhitelist.name=Laser Relay #Update Information info.actuallyadditions.update.generic=[{"text":"There is an Update for "},{"text":"Actually Additions ","color":"dark_green"},{"text":"available!","color":"none"}] diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItemWhitelist.json b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItemWhitelist.json new file mode 100644 index 000000000..a2934f48b --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockLaserRelayItemWhitelist.json @@ -0,0 +1,880 @@ +{ + "__createdBy": "canitzp", + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/models/modelLaserRelayItemWhitelist", + "laserRelay": "actuallyadditions:blocks/models/modelLaserRelayItemWhitelist" + }, + "elements": [ + { + "from": [4,0,4], + "to": [12,1,12], + "faces": { + "up": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,3], + "to": [12,4,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,1,12], + "to": [12,4,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,12], + "to": [12,14,13], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,11,3], + "to": [12,14,4], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,2], + "to": [12,5,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,2], + "to": [12,11,3], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,10,13], + "to": [12,11,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,4,13], + "to": [12,5,14], + "faces": { + "up": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [5.5,1,5.5], + "to": [10.5,3,10.5], + "faces": { + "up": { + "uv": [13.5,13.5,16,16], + "texture": "#laserRelay" + }, + "down": { + "uv": [0.0,0.0,5.0,5.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,5,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [7,3,7], + "to": [9,14,9], + "faces": { + "up": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "west": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,2,16,7.5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,14,4], + "to": [12,15,12], + "faces": { + "up": { + "uv": [1,12,5,15], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,8,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [6.5,6.5,6.5], + "to": [9.5,9.5,9.5], + "faces": { + "up": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "down": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "west": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "east": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "north": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + }, + "south": { + "uv": [14,0,16,2], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,2], + "to": [5,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,2], + "to": [12,10,3], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [11,5,13], + "to": [12,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [4,5,13], + "to": [5,10,14], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,1,4], + "to": [4,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,1,4], + "to": [13,4,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [12,11,4], + "to": [13,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [3,11,4], + "to": [4,14,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,3], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,3], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,4,4], + "to": [3,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,10,4], + "to": [3,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,10,4], + "to": [14,11,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,4,4], + "to": [14,5,12], + "faces": { + "up": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "down": { + "uv": [0,0,1,8], + "texture": "#laserRelay" + }, + "west": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,8,1], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,1], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,4], + "to": [3,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [2,5,11], + "to": [3,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,11], + "to": [14,10,12], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + }, + { + "from": [13,5,4], + "to": [14,10,5], + "faces": { + "up": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "east": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "north": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + }, + "south": { + "uv": [0,0,1,5], + "texture": "#laserRelay" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayItemWhitelist.png b/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelLaserRelayItemWhitelist.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b6b2f5db239ea83720aec8df25e68c5314dad5 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}c0*}aI z1_r(ZAk3I`t&<>&pIsk&9nLzjW>z3!sohiEBhjaDG}zd16s2LqTF@UWr~_ zYKel0o`Ifaj&YqIP|XTY7srqY_hbVjqhJ31XLc1ouV<70_WyE9ib76KS4OA1tic1m zg!=#g?451z|2NLc5->A!-Ew3xpG4__70hn32Co=Oe8kyfc9fiykY+pCYn5@*GaEOcK4sm2ANf9&-^! uUAE=`b#?PZ_0tNA3*%?zHdelF{r5}E*RUTf?C literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiLaserRelayItemWhitelist.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiLaserRelayItemWhitelist.png new file mode 100644 index 0000000000000000000000000000000000000000..bed3eee85d341e9199e426c84898079ba2247672 GIT binary patch literal 2050 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&2?&#~tz_78O`%fY(kk47* z5n0T@z_%KN8T;NG`2!S`C~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFDq%rUO>V_;x! z@N{tusfc@f)p6ZqOM%wFvZG!RqQ8@(OK$)1u-zf7ef{OB%a)hS69x89nfvH={hw)e zDyQlWFOPWt_59|g4<)s0+T!=uMKZabkN6*Pc&gg>$H)8cR_(5zXRyAa?pNKPUp+bv z>z+UV|BLCzzrVjv|NZmR_}}l$v*$hUf0bRj|M`~n7XI7|UjO`AE_PtogYc+jwSK?W zy+2`7Eaq^1-xO8e-zxmuW>-D~no+CiE%nV)F30@ynMj7%-$Bz%-b}W+k@sxoW`0p)?k z@z-{F?a|68hS>Ax_itvn#=8HK(c9un<+biZ(aR)+@xQnatC5pIvF`f#Gr!~?UA?C4 z{l6~iGdK)hzPEgTi>kVRb6Gd&{g^r}bN=LgudR&+O)Qh(W#ZHEm+wvSrbx+P zUUuc*q-*~L)^C%G{Pq3vEN~cj)t}FdFPsO=LZ3gs*J&s{xPFVz?>S#$?@t_VISDn4 zm+Tk+vkEC0e2qE%|NDidlfflWKI04HO$@u{&EL%7>#W?c?_>EKzsOG{QG(=U7}v+CKGt4bCu qu^d%A@S(v3tWK#78vg(I_E!GQ^e%m$%HIJX(>-1NT-G@yGywo<5Zf~V literal 0 HcmV?d00001 From c4a94a07245994fd2940a53eaf8db5b0f66376cf Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 22:31:22 +0200 Subject: [PATCH 118/322] Merge branch 'patch-7' of https://github.com/Kristian295/ActuallyAdditions --- .../assets/actuallyadditions/lang/de_DE.lang | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/de_DE.lang b/src/main/resources/assets/actuallyadditions/lang/de_DE.lang index 3fe156d93..c8f469f96 100644 --- a/src/main/resources/assets/actuallyadditions/lang/de_DE.lang +++ b/src/main/resources/assets/actuallyadditions/lang/de_DE.lang @@ -569,21 +569,21 @@ booklet.actuallyadditions.clickToSeeRecipe=Klicke, um weitere Informationen zu e booklet.actuallyadditions.amountOfWords=%s Wörter insgesamt booklet.actuallyadditions.amountOfChars=%s Zeichen insgesamt -#Booklet Chapters -booklet.actuallyadditions.chapter.intro.name=An Introduction to ActAdd -booklet.actuallyadditions.chapter.intro.text.1=For too long have the people of Minecraftia toiled under a relentless whip. A whip more hurtful and more injurious than that of any slave-master: inconvenience. Aye, the thousand million inconveniences that make up the grind, that force players to waste hours- nay, days!- chopping wood and farming wheat and other such mundane tasks, just to momentarily escape the remorseless tedium and experience the true joys of Minecraftia, building, caving and adventuring into the beautiful uncharted abundance -booklet.actuallyadditions.chapter.intro.text.2=of the world. Yet no sooner has one immersed oneself in this creative enterprise than the inconveniences return, like millions of furious bees pestering, stinging, swarming all over you until the game ceases to be enjoyable, and you are driven away from it forever. To that end, a certain Ellpeck has created this Actual Addition to the world of Minecraft, that will allow the player to better engage with the core experiences of the game- building and adventuring- by automating and streamlining the monotony that -booklet.actuallyadditions.chapter.intro.text.3=is grinding in Minecraft. Therefore, Ellpeck humbly presents to you this Actually Additions Manual, that shall teach you the ways of this modification and, ultimately, allow you to transcend inconvenience and attain enlightenment. ~by Tulkas +#Booklet Chapters / Handbuch-Kapitel +booklet.actuallyadditions.chapter.intro.name=Einführung zu ActAdd +booklet.actuallyadditions.chapter.intro.text.1=Für eine zu lange Zeit haben die Bewohner von Minecraftien unter der Gewalt einer unerbittlichen Peitsche geschuftet. Eine Peitsche so verletzend und schädlich: einfach lästig. Ja, die millionenfachen Lästigkeiten aus denen diese Plage besteht, die die Spieler dazu zwingt Stunden - nein, sogar Tage! - Bäume zu fällen, Weizen zu farmen und anderen solch stumpfsinnigen Tätigkeiten nachzugehen, nur um augenblicklich der erbarmungslosen Langeweile zu entfliehen und die wirklichen +booklet.actuallyadditions.chapter.intro.text.2=Freuden in Minecraftien zu erleben, zu bauen und die tiefen und fernen Welten zu entdecken bis hin zum unerforschten Reichtum, der in dieser Welt steckt. Noch nicht früher ist jemand in diese kreative Unternehmung eingetaucht als die Unannehmlichkeiten zurückkehren, wie millionen rasende, lästige Bienen, stechend, um dich herum schwirred bis das Spiel aufhört Spaß zu machen, und du bist bis in alle Ewigkeit vertrieben. Zu diesem Zweck hat ein gewisser Ellpeck +booklet.actuallyadditions.chapter.intro.text.3=dieses Actually Additions geschaffen, welches dem Spieler erlaubt, sich mehr mit den Kernerlebnissen Minecrafts zu beschäftigen - bauen und abenteuern - indem die Monotonie automatisiert und rationalisiert wird, die Minecraft plagt. Deshalb präsentiert dir Ellpeck demütig dieses Handbuch, welches dir die Funktionen dieser Modifikation zeigen und, ultimativ, dir erlauben wird, die Unbequemlichkeiten zu überwinden und Erleuchtung zu erlangen. ~by Tulkas -booklet.actuallyadditions.chapter.craftingIngs.name=Crafting Ingredients -booklet.actuallyadditions.chapter.craftingIngs.text.1=Actually Additions has lots of items that use certain basic crafting items to be crafted. This chapter has all of these basic items grouped up so that you can see all of them at once. +booklet.actuallyadditions.chapter.craftingIngs.name=Werkel-Zutaten +booklet.actuallyadditions.chapter.craftingIngs.text.1=Actually Additions hat viele Gegenstände, die elementare Werkel-Gegenstände benötigen um hergestellt zu werden. In diesem Kapitel sind diese alle gruppiert, so kannst du sie alle auf einem Mal sehen. -booklet.actuallyadditions.chapter.quartz.name=Black Quartz -booklet.actuallyadditions.chapter.quartz.text.1=Black Quartz is an Ore that generates in the world between layer and . When broken, it can be smelted in a furnace or crushed in a crusher to get broken down into Black Quartz. -booklet.actuallyadditions.chapter.quartz.text.2=Black Quartz items are used in lots of Crafting Recipes in Actually Additions. They are very important for most of the Items and, thus, should be mined when found in the world. They can be crafted into a couple of different Decorative Blocks shown on the following pages. Every variant can also be crafted into Stairs, Slabs and Walls using the well-known recipes. Nether Quartz, but deadlier +booklet.actuallyadditions.chapter.quartz.name=Schwarzer Quarz +booklet.actuallyadditions.chapter.quartz.text.1=Schwarzer Quarz ist ein Erz welches in der Welt zwischen Ebene und generiert. Wenn es abgebaut wurde, kann es in einem Ofen geschmolzen or in einem Brecher gebrochen werden. +booklet.actuallyadditions.chapter.quartz.text.2=Der Gegenstand Schwarzer Quarz wird in der Herstellung vieler Dinge in Actually Additions gebraucht. Sie sind sehr wichtig, un solten deswegen abgebaut werden, wenn sie gefunden werden. Aus ihnen lassen sich einige dekorative Blöcke produzieren, welche auf den folgenden Seiten gezeigt werden. Jede Variante kann auch zu Treppen, Stufen oder Wänden weiterverarbeitet werden, indem man die gängigen Rezepte nutzt. Nether-Quarz, nur tötlicher -booklet.actuallyadditions.chapter.cloud.name=Smiley Cloud -booklet.actuallyadditions.chapter.cloud.text.1=The Smiley Cloud is a magical floating cloud which is getting put to life through the piece of Solidified Experience inside it. It hovers up and down in its place all jolly and fun, and when right-clicking, you can give it a name. When giving it certain special names like "Ellpeck" or "AcidBlues", it will have some special items it carries! +booklet.actuallyadditions.chapter.cloud.name=Smiley-Wolke +booklet.actuallyadditions.chapter.cloud.text.1=Die Smiley-Wolke ist eine magisch schwebende Wolke, in die Leben durch ein kleines Stück Verdichtete Erfahrung eingehaucht wird. Sie schwebt an ihrem Platz hoch und runter, ganz heiter und fröhlich, mit einem Rechtsklickkannst du ihr einen Namen geben. Wenn du ihr besondere Namen bibst, wie beispielsweise "Ellpeck" oder "AcidBlues", trägt sie ein paar besondere Gegenstände! booklet.actuallyadditions.chapter.coalStuff.name=Coal Stuff booklet.actuallyadditions.chapter.coalStuff.text.1=Sometimes your Coal just burns for too long or too short, you know what I mean? For that, you can now craft Tiny Coal, Tiny Charcoal and Blocks of Charcoal for using them in a furnace. While the Block of Charcoal burns for as long as a Block of Coal, the Tiny Coal and Tiny Charcoal will burn for one eighth of a piece of coal, meaning it will smelt one item in a normal furnace. From 54c618231f05ef84fa0e44f6bfd7011e4c109115 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 10 May 2016 22:36:53 +0200 Subject: [PATCH 119/322] Made booklet sometimes not type a letter into the search box when pressing C --- .../de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 50be023f9..284c0d0b7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -165,7 +165,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void keyTyped(char theChar, int key){ - if(AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){ + if(!this.searchField.isFocused() && AND_HIS_NAME_IS.length > this.hisNameIsAt && AND_HIS_NAME_IS[this.hisNameIsAt] == key){ if(this.hisNameIsAt+1 >= AND_HIS_NAME_IS.length){ Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundHandler.duhDuhDuhDuuuh, 0.5F)); ModUtil.LOGGER.info("AND HIS NAME IS JOHN CENA DUH DUH DUH DUUUH"); From 40d02814ea62227a0cf6922decf98a129f8b6ba2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 15:28:46 +0200 Subject: [PATCH 120/322] Fixed sounds not working on servers --- .../de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java | 2 ++ .../de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 96e72c757..27babfa47 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -30,6 +30,7 @@ import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; import de.ellpeck.actuallyadditions.mod.misc.DispenserHandlerFertilize; import de.ellpeck.actuallyadditions.mod.misc.DungeonLoot; +import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.misc.WorldData; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.ore.InitOreDict; @@ -78,6 +79,7 @@ public class ActuallyAdditions{ InitFluids.init(); InitItems.init(); FuelHandler.init(); + SoundHandler.init(); UpdateChecker.init(); InitBooklet.preInit(); proxy.preInit(event); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index f28d555cf..662ff9cb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -109,8 +109,6 @@ public class ClientProxy implements IProxy{ this.registerCustomFluidBlockRenderer(InitFluids.fluidCanolaOil); this.registerCustomFluidBlockRenderer(InitFluids.fluidOil); - SoundHandler.init(); - IResourceManager manager = Minecraft.getMinecraft().getResourceManager(); if(manager instanceof IReloadableResourceManager){ ((IReloadableResourceManager)manager).registerReloadListener(new IResourceManagerReloadListener(){ From 7a0ba8819d4714f49c8ab217ef6b86d03d5850f0 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 19:30:19 +0200 Subject: [PATCH 121/322] Item Storage recipes and doc --- .../mod/booklet/InitBooklet.java | 1 + .../mod/config/values/ConfigCrafting.java | 5 ++- .../mod/crafting/BlockCrafting.java | 32 +++++++++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 6 +++- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 42435a46d..4eb932996 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -87,6 +87,7 @@ public class InitBooklet{ new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye)); //No RF Using Blocks + new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeItemInterface).setNoText()).setImportant(); new BookletChapter("breaker", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockBreaker), new PageCrafting(1, BlockCrafting.recipeBreaker).setPageStacksWildcard(), new PageCrafting(2, BlockCrafting.recipePlacer).setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeLiquidPlacer).setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLiquidCollector).setPageStacksWildcard()); new BookletChapter("dropper", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockDropper), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeDropper).setNoText()); new BookletChapter("phantomfaces", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomLiquiface), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomface.RANGE), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipePhantomface), new PageCrafting(4, BlockCrafting.recipeLiquiface), new PageCrafting(5, BlockCrafting.recipeEnergyface), new PageCrafting(6, ItemCrafting.recipePhantomConnector).setNoText(), new PageCrafting(7, BlockCrafting.recipePhantomBooster)).setImportant(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index 250eefb2a..ad9674be5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -148,6 +148,8 @@ public enum ConfigCrafting{ DIRECTIONAL_BREAKER("Long-Range Breaker", ConfigCategories.BLOCKS_CRAFTING), RANGED_COLLECTOR("Ranged Collector", ConfigCategories.BLOCKS_CRAFTING), LASER_RELAY("Laser Relay", ConfigCategories.BLOCKS_CRAFTING), + LASER_RELAY_ITEM("Item Laser Relay", ConfigCategories.BLOCKS_CRAFTING), + LASER_RELAY_ITEM_WHITELIST("Advanced Item Laser Relay", ConfigCategories.BLOCKS_CRAFTING), LASER_WRENCH("Laser Wrench", ConfigCategories.ITEMS_CRAFTING), CHEST_TO_CRATE_UPGRADE("Chest To Crate Upgrade", ConfigCategories.ITEMS_CRAFTING), @@ -157,7 +159,8 @@ public enum ConfigCrafting{ MINER("Miner", ConfigCategories.BLOCKS_CRAFTING), FIREWORK_BOX("Firework Box", ConfigCategories.BLOCKS_CRAFTING), ENDER_STAR("Ender Star", ConfigCategories.ITEMS_CRAFTING), - SPAWNER_CHANGER("Spawner Changer", ConfigCategories.ITEMS_CRAFTING); + SPAWNER_CHANGER("Spawner Changer", ConfigCategories.ITEMS_CRAFTING), + ITEM_INTERFACE("Item Interface", ConfigCategories.BLOCKS_CRAFTING); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 131bffa94..22487592d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -82,6 +82,9 @@ public class BlockCrafting{ public static IRecipe recipeMiner; public static IRecipe recipeFireworkBox; public static IRecipe recipePhantomRedstoneface; + public static IRecipe recipeLaserRelayItem; + public static IRecipe recipeLaserRelayItemWhitelist; + public static IRecipe recipeItemInterface; public static void init(){ @@ -182,6 +185,35 @@ public class BlockCrafting{ recipeLaserRelay = RecipeUtil.lastIRecipe(); } + //Item Laser Relay + if(ConfigCrafting.LASER_RELAY_ITEM.isEnabled()){ + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitBlocks.blockLaserRelayItem), + new ItemStack(InitBlocks.blockLaserRelay), + new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()))); + recipeLaserRelayItem = RecipeUtil.lastIRecipe(); + } + + //Whitelist Item Laser Relay + if(ConfigCrafting.LASER_RELAY_ITEM_WHITELIST.isEnabled()){ + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), + new ItemStack(InitBlocks.blockLaserRelayItem), + new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), + new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), + new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()))); + recipeLaserRelayItemWhitelist = RecipeUtil.lastIRecipe(); + } + + //Item Interface + if(ConfigCrafting.ITEM_INTERFACE.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockItemViewer), + "OBO", "RCR", "OBO", + 'B', new ItemStack(Items.REDSTONE), + 'O', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), + 'R', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), + 'C', new ItemStack(Blocks.CHEST))); + recipeItemInterface = RecipeUtil.lastIRecipe(); + } + //Ranged Collector if(ConfigCrafting.RANGED_COLLECTOR.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockRangedCollector), diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 6d6e4675e..14a882b27 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -792,4 +792,8 @@ booklet.actuallyadditions.chapter.spawnerShard.name=Spawner Shards booklet.actuallyadditions.chapter.spawnerShard.text.1=The Spawner Shards are a crafting ingredient found by breaking spawners. Once a spawner in the world is broken, it will always drop one Shard. booklet.actuallyadditions.chapter.spawnerChanger.name=Spawner Changer -booklet.actuallyadditions.chapter.spawnerChanger.text.1=The Spawner Changer is an item that can be used to manipulate the mobs that spawners spawn. This can be accomplished by first of all picking up the desired mob to spawn with the Changer, killing it in the process. Next, the Changer can be right-clicked on the spawner, causing the spawner to be changed. This process probably won't work with every type of mob though. \ No newline at end of file +booklet.actuallyadditions.chapter.spawnerChanger.text.1=The Spawner Changer is an item that can be used to manipulate the mobs that spawners spawn. This can be accomplished by first of all picking up the desired mob to spawn with the Changer, killing it in the process. Next, the Changer can be right-clicked on the spawner, causing the spawner to be changed. This process probably won't work with every type of mob though. + +booklet.actuallyadditions.chapter.itemStorage.name=Laser Relay Item Storage +booklet.actuallyadditions.chapter.itemStorage.text.1=Additionally to the Laser Relays that transfer RF, there are also Item Laser Relays that are able to transfer items. This works in a verry different way though. To connect Item Laser Relays together works the same as connecting normal ones, however, you need an Item Interface to be able to interact with them. You can place any inventories (such as chests and furnaces) next to the Item Laser Relays, but to be pulled out from or inputted into, there needs to be an Item Interface connected +booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. Additionally, this system doesn't use any power. \ No newline at end of file From 6e96964db8d6a6a3e70fd65d301e39e17d4f3c4c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 19:39:59 +0200 Subject: [PATCH 122/322] Item viewer texture --- .../blockstates/blockItemViewer.json | 14 ++++++++++++++ .../textures/blocks/blockItemViewer.png | Bin 0 -> 657 bytes 2 files changed, 14 insertions(+) create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockItemViewer.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockItemViewer.png diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockItemViewer.json b/src/main/resources/assets/actuallyadditions/blockstates/blockItemViewer.json new file mode 100644 index 000000000..30a6f64c4 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockItemViewer.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockItemViewer" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockItemViewer.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockItemViewer.png new file mode 100644 index 0000000000000000000000000000000000000000..7d050c56914704a62aa63ff7a68f862750705d2a GIT binary patch literal 657 zcmV;C0&e|@P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGix&QzUx&alxHqrn900(qQO+^Ra3>p&x z2WQ%}r~m)}7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M_?@2^KR5(v{ zQ(a2}Q4rlKX2t`&G51-?(EFeJl%$TkQ9@|go1$DvxSM%8MSDwT?GuItKg{bG?U zI1jfM6g8U^ZER3Gil`IE)Tr0R2ZysR`-oc{ZzhS{!CfmfhPq57^)fYTfdD=bua$nq zie;0LWa9)}Zq#VV!RNrI=aZD+{nDj}eVZPS9N~eFb6afAN&O^1A4#hv3GNOS1+Qm@ z2D=#=jYfj)`i$@|#|1$#YfA!XXBqyq*4L#}l(rIP1)giua5xlrZdy2;1NQtZ#jJ%S zz!chC!Cwjb{l4I@1PNDAV*M;+K{;sQW-p|x9V7Oz>rN8Hl{vcJ&I=D{3!zpJaXBiY ziUlDxhM)j^=%XS^3m9YbTLYcI^d;q#hnPr!y_jgAW1Rk{>5G7#VG2mF)$5UmO+*FQ zu6Q+|x6>slA6ETofO|U3QX#`F@V1tChh&wt0`#YQ@SlHw6ih^vMM57~BxD6VvFV9b z9&ncsr)eR@W8^zy4funHk??~7x!LK+V?tHkc3b`lEq2&K>>i&Z#vLCOU>Pt^lmnDG rM$$qqCsu(sQ^r$g-^=I6oH6tT|GmykAQm{N00000NkvXXu0mjf(rpW> literal 0 HcmV?d00001 From 44ed2dcda1553329f0eedc50d0d92a562308582f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 20:44:21 +0200 Subject: [PATCH 123/322] Made some info on the item system clearer --- src/main/resources/assets/actuallyadditions/lang/en_US.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 14a882b27..90df78299 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -796,4 +796,4 @@ booklet.actuallyadditions.chapter.spawnerChanger.text.1=The Spawner Change booklet.actuallyadditions.chapter.itemStorage.name=Laser Relay Item Storage booklet.actuallyadditions.chapter.itemStorage.text.1=Additionally to the Laser Relays that transfer RF, there are also Item Laser Relays that are able to transfer items. This works in a verry different way though. To connect Item Laser Relays together works the same as connecting normal ones, however, you need an Item Interface to be able to interact with them. You can place any inventories (such as chests and furnaces) next to the Item Laser Relays, but to be pulled out from or inputted into, there needs to be an Item Interface connected -booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. Additionally, this system doesn't use any power. \ No newline at end of file +booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. However, its white- and blacklists won't effect the items transferred by Item Interfaces when placed next to them. \ No newline at end of file From a8717e6191d13036f9d6199dd4e09ef1d8ebad76 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 20:55:29 +0200 Subject: [PATCH 124/322] Changed some advanced laser relay functionality --- .../actuallyadditions/mod/tile/TileEntityItemViewer.java | 8 ++++++-- .../resources/assets/actuallyadditions/lang/en_US.lang | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index d40350b69..92c0f933c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -78,7 +78,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - if(handler.relayInQuestion.isWhitelisted(stack)){ + if(this.isWhitelisted(handler, stack)){ if(ItemStack.areItemsEqual(handler.handler.getStackInSlot(handler.switchedIndex), stack)){ ItemStack gaveBack = handler.handler.extractItem(handler.switchedIndex, stack.stackSize, true); return gaveBack != null; @@ -88,11 +88,15 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ return false; } + private boolean isWhitelisted(SpecificItemHandlerInfo handler, ItemStack stack){ + return handler.relayInQuestion.isWhitelisted(stack) && this.getConnectedRelay().isWhitelisted(stack); + } + @Override public boolean isItemValidForSlot(int index, ItemStack stack){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - if(handler.relayInQuestion.isWhitelisted(stack)){ + if(this.isWhitelisted(handler, stack)){ ItemStack gaveBack = handler.handler.insertItem(handler.switchedIndex, stack, true); return !ItemStack.areItemStacksEqual(gaveBack, stack); } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 90df78299..318569e38 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -796,4 +796,4 @@ booklet.actuallyadditions.chapter.spawnerChanger.text.1=The Spawner Change booklet.actuallyadditions.chapter.itemStorage.name=Laser Relay Item Storage booklet.actuallyadditions.chapter.itemStorage.text.1=Additionally to the Laser Relays that transfer RF, there are also Item Laser Relays that are able to transfer items. This works in a verry different way though. To connect Item Laser Relays together works the same as connecting normal ones, however, you need an Item Interface to be able to interact with them. You can place any inventories (such as chests and furnaces) next to the Item Laser Relays, but to be pulled out from or inputted into, there needs to be an Item Interface connected -booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. However, its white- and blacklists won't effect the items transferred by Item Interfaces when placed next to them. \ No newline at end of file +booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. When placing an advanced relay next to an Item Interface, this effect also applies. \ No newline at end of file From 58e5af08149204bd873620331605f60e630e382a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 20:59:38 +0200 Subject: [PATCH 125/322] Less processing of whitelist --- .../mod/tile/TileEntityItemViewer.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 92c0f933c..e691caca0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -2,6 +2,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItem; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -89,7 +90,14 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } private boolean isWhitelisted(SpecificItemHandlerInfo handler, ItemStack stack){ - return handler.relayInQuestion.isWhitelisted(stack) && this.getConnectedRelay().isWhitelisted(stack); + boolean whitelisted = handler.relayInQuestion.isWhitelisted(stack); + TileEntityLaserRelayItem connected = this.getConnectedRelay(); + if(!PosUtil.areSamePos(handler.relayInQuestion.getPos(), connected.getPos())){ + return whitelisted && connected.isWhitelisted(stack); + } + else{ + return whitelisted; + } } @Override From 2fe50c71aa93688c41ec5d5dcfec8f8ce61fa366 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 21:00:26 +0200 Subject: [PATCH 126/322] Safer check --- .../actuallyadditions/mod/tile/TileEntityItemViewer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index e691caca0..fa490f7c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -92,7 +92,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private boolean isWhitelisted(SpecificItemHandlerInfo handler, ItemStack stack){ boolean whitelisted = handler.relayInQuestion.isWhitelisted(stack); TileEntityLaserRelayItem connected = this.getConnectedRelay(); - if(!PosUtil.areSamePos(handler.relayInQuestion.getPos(), connected.getPos())){ + if(connected != handler.relayInQuestion){ return whitelisted && connected.isWhitelisted(stack); } else{ From 1793a2418fe92df3bf873c1d8d6ea50019d1bf0c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 11 May 2016 21:05:52 +0200 Subject: [PATCH 127/322] r32! --- build.gradle | 2 +- update/changelog.md | 12 ++++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 91a49e756..062370413 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.9-r31" +version = "1.9-r32" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 52628336e..756c0677a 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,15 @@ +# 1.9-r32 +* Added Spawner Changer +* Added Spawner Shards +* Added Item Laser Relay Networks with Item Laser Relays, Advanced Item Laser Relays and Item Interfaces +* Fixed booklet sometimes not typing a letter into the search box +* Fixed sounds not working on servers +* Use universal buckets instead of custom ones +* Replaced bucket slots in GUIs with right click functionality +* Re-implemented village structures. No Villagers though. +* Fixed a bug with fluid placers replacing fluids in front of them +* Added max damage display to the advanced tooltip + # 1.9-r31 * Added Phantom Redstoneface * Changed storage crate upgrade recipe because it was clashing with Storage Drawers diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 7c8691c2d..8367720a1 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,3 +1,3 @@ 1.7.10=21 1.8.9=26 -1.9=31 \ No newline at end of file +1.9=32 \ No newline at end of file From bfd859e144cb0b389fee61a3274d79f2a38f7155 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 12 May 2016 14:26:10 +0200 Subject: [PATCH 128/322] Replace Growth Ring's constant NBT updating with world time checking --- .../actuallyadditions/mod/items/ItemGrowthRing.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index cc732218e..7e2ea8476 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -51,10 +51,8 @@ public class ItemGrowthRing extends ItemEnergy{ if(stack.getTagCompound() == null){ stack.setTagCompound(new NBTTagCompound()); } - int waitTime = stack.getTagCompound().getInteger("WaitTime"); - //Adding all possible Blocks - if(waitTime >= 30){ + if(player.worldObj.getTotalWorldTime()%30 == 0){ int range = 3; for(int x = -range; x < range+1; x++){ for(int z = -range; z < range+1; z++){ @@ -94,11 +92,6 @@ public class ItemGrowthRing extends ItemEnergy{ } } } - - stack.getTagCompound().setInteger("WaitTime", 0); - } - else{ - stack.getTagCompound().setInteger("WaitTime", waitTime+1); } } } From 95d2e226e36836c0aea99e8be0106e2c88557f40 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 12 May 2016 14:27:29 +0200 Subject: [PATCH 129/322] So this isn't needed anymore --- .../de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index 7e2ea8476..e0bf00466 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -48,9 +48,6 @@ public class ItemGrowthRing extends ItemEnergy{ if(equipped != null && equipped == stack && this.getEnergyStored(stack) >= energyUse){ List blocks = new ArrayList(); - if(stack.getTagCompound() == null){ - stack.setTagCompound(new NBTTagCompound()); - } //Adding all possible Blocks if(player.worldObj.getTotalWorldTime()%30 == 0){ int range = 3; From 43c93f2e51dca8d064ac5af4fea34057b3fad868 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 12 May 2016 14:28:22 +0200 Subject: [PATCH 130/322] How didn't it bug me that this wasn't centered? --- .../ellpeck/actuallyadditions/mod/booklet/BookletUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 67afcdb41..64a7d420f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -167,12 +167,12 @@ public class BookletUtils{ if(booklet.currentEntrySet.entry != null){ //Renders Booklet Page Number and Content if(booklet.currentEntrySet.chapter != null && booklet.currentEntrySet.page != null){ - booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.page.getID()+"/"+booklet.currentEntrySet.chapter.getPages().length, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+172, StringUtil.DECIMAL_COLOR_WHITE); + booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.page.getID()+"/"+booklet.currentEntrySet.chapter.getPages().length, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+171, StringUtil.DECIMAL_COLOR_WHITE); booklet.currentEntrySet.page.renderPre(booklet, mouseX, mouseY, ticksElapsed, mousePressed); } //Renders Chapter Page Number else{ - booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.pageInIndex+"/"+booklet.indexPageAmount, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+172, StringUtil.DECIMAL_COLOR_WHITE); + booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.pageInIndex+"/"+booklet.indexPageAmount, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+171, StringUtil.DECIMAL_COLOR_WHITE); } } //Renders the amount of words and chars the book has From 8e93abf05a4ca24960a008a80cb2c53e07eb9e50 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 12 May 2016 18:48:13 +0200 Subject: [PATCH 131/322] Made Placers be able to place anything again. Yes. Really. --- .../actuallyadditions/mod/util/WorldUtil.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index d8e407ad9..d964ef0ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -138,30 +138,30 @@ public class WorldUtil{ } //Redstone - else if(replaceable && stack.getItem() == Items.REDSTONE){ + if(replaceable && stack.getItem() == Items.REDSTONE){ PosUtil.setBlock(offsetPos, world, Blocks.REDSTONE_WIRE, 0, 2); stack.stackSize--; + return stack; } //Plants - else if(replaceable && stack.getItem() instanceof IPlantable){ + if(replaceable && stack.getItem() instanceof IPlantable){ if(((IPlantable)stack.getItem()).getPlant(world, offsetPos).getBlock().canPlaceBlockAt(world, offsetPos)){ if(world.setBlockState(offsetPos, ((IPlantable)stack.getItem()).getPlant(world, offsetPos), 2)){ stack.stackSize--; + return stack; } } } //Everything else - else{ - try{ - EntityPlayer fake = FakePlayerUtil.getFakePlayer(world); - stack.onItemUse(fake, world, offsetPos, fake.getActiveHand(), side.getOpposite(), 0.5F, 0.5F, 0.5F); - return stack; - } - catch(Exception e){ - ModUtil.LOGGER.error("Something that places Blocks at "+offsetPos.getX()+", "+offsetPos.getY()+", "+offsetPos.getZ()+" in World "+world.provider.getDimension()+" threw an Exception! Don't let that happen again!", e); - } + try{ + EntityPlayer fake = FakePlayerUtil.getFakePlayer(world); + stack.onItemUse(fake, world, offsetPos, fake.getActiveHand(), side.getOpposite(), 0.5F, 0.5F, 0.5F); + return stack; + } + catch(Exception e){ + ModUtil.LOGGER.error("Something that places Blocks at "+offsetPos.getX()+", "+offsetPos.getY()+", "+offsetPos.getZ()+" in World "+world.provider.getDimension()+" threw an Exception! Don't let that happen again!", e); } } return stack; From 3ad6b1c7cb5d55fc99068cbcdd497c7704b26e48 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 12 May 2016 19:00:42 +0200 Subject: [PATCH 132/322] Made Item Laser relays that have a whitelist have more priority than those who don't --- .../mod/tile/TileEntityItemViewer.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index fa490f7c0..3d21eb0b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -2,6 +2,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItem; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; @@ -11,6 +12,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class TileEntityItemViewer extends TileEntityInventoryBase{ @@ -32,6 +34,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private SpecificItemHandlerInfo getSwitchedIndexHandler(int i){ List infos = this.getItemHandlerInfos(); + Collections.sort(infos); int currentI = 0; if(infos != null && !infos.isEmpty()){ for(GenericItemHandlerInfo info : infos){ @@ -195,7 +198,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } } - public static class GenericItemHandlerInfo{ + public static class GenericItemHandlerInfo implements Comparable{ public List handlers = new ArrayList(); public TileEntityLaserRelayItem relayInQuestion; @@ -221,5 +224,21 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } return false; } + + @Override + public int compareTo(GenericItemHandlerInfo other){ + if(other != null){ + boolean thisWhitelist = this.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; + boolean otherWhitelist = other.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; + + if(!thisWhitelist && otherWhitelist){ + return 1; + } + else if(thisWhitelist && !otherWhitelist){ + return -1; + } + } + return 0; + } } } From dcd41a016a43735ca18ef97337427d74c6fc7795 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 12 May 2016 19:37:31 +0200 Subject: [PATCH 133/322] Make tile entity updating not send null packets causing console spam --- .../mod/network/PacketUpdateTileEntity.java | 6 +++--- .../ellpeck/actuallyadditions/mod/tile/TileEntityBase.java | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java index b3cab5ce3..c69f908dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java @@ -35,9 +35,9 @@ public class PacketUpdateTileEntity implements IMessage{ } - public PacketUpdateTileEntity(TileEntityBase tile){ - this.compound = tile.getSyncCompound(); - this.pos = tile.getPos(); + public PacketUpdateTileEntity(NBTTagCompound compound, BlockPos pos){ + this.compound = compound; + this.pos = pos; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 8c062e476..ec736bee7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -176,6 +176,9 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } public final void sendUpdate(){ - PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(this), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); + NBTTagCompound compound = this.getSyncCompound(); + if(compound != null){ + PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(compound, this.getPos()), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); + } } } \ No newline at end of file From 41027a07c29c754b5c5521982389aa5974ed58fb Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 13 May 2016 16:58:16 +0200 Subject: [PATCH 134/322] Fixed a massive console spam issue of Whitelisted Item Laser Relays trying to sync client->client --- .../actuallyadditions/mod/tile/TileEntityBase.java | 8 +++++--- .../actuallyadditions/mod/tile/TileEntityLaserRelay.java | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index ec736bee7..2bb508d81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -176,9 +176,11 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } public final void sendUpdate(){ - NBTTagCompound compound = this.getSyncCompound(); - if(compound != null){ - PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(compound, this.getPos()), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); + if(!this.worldObj.isRemote){ + NBTTagCompound compound = this.getSyncCompound(); + if(compound != null){ + PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(compound, this.getPos()), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); + } } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 9befa2805..18e742a6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -356,9 +356,11 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public void updateEntity(){ super.updateEntity(); - if((this.isLeftWhitelist != this.lastLeftWhitelist || this.isRightWhitelist != this.lastRightWhitelist) && this.sendUpdateWithInterval()){ - this.lastLeftWhitelist = this.isLeftWhitelist; - this.lastRightWhitelist = this.isRightWhitelist; + if(!this.worldObj.isRemote){ + if((this.isLeftWhitelist != this.lastLeftWhitelist || this.isRightWhitelist != this.lastRightWhitelist) && this.sendUpdateWithInterval()){ + this.lastLeftWhitelist = this.isLeftWhitelist; + this.lastRightWhitelist = this.isRightWhitelist; + } } } } From 549402d98e4819a90d312d78a9436ba90f6973f9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 13 May 2016 17:05:47 +0200 Subject: [PATCH 135/322] The laser relay has less particles again now. As it was lagging games. --- .../ellpeck/actuallyadditions/mod/network/PacketParticle.java | 2 +- .../actuallyadditions/mod/tile/TileEntityLaserRelay.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index 84353e695..11b95a104 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -60,7 +60,7 @@ public class PacketParticle implements IMessage{ double difZ = startZ-endZ; double distance = new Vec3d(startX, startY, startZ).distanceTo(new Vec3d(endX, endY, endZ)); - for(int times = 0; times < particleAmount/2; times++){ + for(int times = 0; times < Math.max(particleAmount/2, 1); times++){ for(double i = 0; i <= 1; i += 1/(distance*particleAmount)){ EntityColoredParticleFX fx = new EntityColoredParticleFX(world, (difX*i)+endX+0.5, (difY*i)+endY+0.5, (difZ*i)+endZ+0.5, particleSize, color[0], color[1], color[2], ageMultiplier); Minecraft.getMinecraft().effectRenderer.addEffect(fx); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 18e742a6e..394fdad08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -100,13 +100,13 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @SideOnly(Side.CLIENT) public void renderParticles(){ - if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 8 : 3) == 0){ + if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 16 : 8) == 0){ BlockPos thisPos = this.pos; LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(thisPos); if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ - PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 2 : Util.RANDOM.nextInt(6)+1, 0.6F, this.isItem ? COLOR_ITEM : COLOR, 1F); + PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); } } } From 3495901d37d7577e80c913d4afabd4dbfa8b4186 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 13 May 2016 21:57:53 +0200 Subject: [PATCH 136/322] Grab the broom and sweep! --- .../metalists/TheColoredLampColors.java | 2 -- .../mod/blocks/render/RenderSmileyCloud.java | 1 - .../mod/items/ItemDrill.java | 1 - .../mod/items/ItemGrowthRing.java | 1 - .../mod/misc/special/SpecialRenderInit.java | 1 - .../mod/proxy/ClientProxy.java | 2 -- .../mod/tile/TileEntityInventoryBase.java | 25 +++++++++---------- .../mod/tile/TileEntityItemViewer.java | 1 - .../mod/tile/TileEntityLaserRelay.java | 6 +---- .../mod/util/StringUtil.java | 1 - 10 files changed, 13 insertions(+), 28 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java index 34515bf87..8e7a06c0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java @@ -10,8 +10,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.metalists; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; - import java.util.Locale; public enum TheColoredLampColors{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index cfe9bec79..8860a96c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index bab2c6c8f..16b40e507 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -41,7 +41,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index e0bf00466..73ec81110 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -20,7 +20,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index a8f02ae4d..be90ec6cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.misc.special; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.item.Item; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 662ff9cb5..2806e5fdb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -21,7 +21,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; @@ -29,7 +28,6 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index f4b43edb5..884dd300c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -41,18 +40,6 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } - public void initializeSlots(int itemAmount){ - this.slots = new ItemStack[itemAmount]; - } - - @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); - if(!isForSync || this.shouldSyncSlots()){ - saveSlots(this.slots, compound); - } - } - public static void saveSlots(ItemStack[] slots, NBTTagCompound compound){ if(slots != null && slots.length > 0){ NBTTagList tagList = new NBTTagList(); @@ -81,6 +68,18 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } + public void initializeSlots(int itemAmount){ + this.slots = new ItemStack[itemAmount]; + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.writeSyncableNBT(compound, isForSync); + if(!isForSync || this.shouldSyncSlots()){ + saveSlots(this.slots, compound); + } + } + public boolean shouldSyncSlots(){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 3d21eb0b6..7add5a49e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -3,7 +3,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItem; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 394fdad08..847677996 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -24,7 +24,6 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import io.netty.util.internal.ConcurrentSet; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -167,13 +166,10 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public static class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ - private ItemStack[] slots = new ItemStack[24]; - public IInventory filterInventory; - public boolean isLeftWhitelist; public boolean isRightWhitelist; - + private ItemStack[] slots = new ItemStack[24]; private boolean lastLeftWhitelist; private boolean lastRightWhitelist; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index f336099ac..508a3f4f4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -15,7 +15,6 @@ import net.minecraft.util.text.translation.I18n; import net.minecraftforge.fluids.FluidTank; import java.util.List; -import java.util.Locale; public class StringUtil{ From 796fc2de433a067ddb62a07bd899221d8228c5a8 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 13 May 2016 22:08:53 +0200 Subject: [PATCH 137/322] What was this here for..? --- .../actuallyadditions/mod/config/ConfigurationHandler.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index 6a20cdfd6..cbdd70a40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -20,8 +20,6 @@ import java.io.File; public class ConfigurationHandler{ - public static final String ISSUES_WARNING = " [THIS COULD CAUSE ISSUES, CHANGE AT YOUR OWN RISK!]"; - public static Configuration config; public ConfigurationHandler(File configFile){ From 30d493d513f5043e5397f4453a454344ffff7ced Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 13 May 2016 23:19:30 +0200 Subject: [PATCH 138/322] Add custom banner patterns --- .../mod/ActuallyAdditions.java | 8 +- .../mod/booklet/InitBooklet.java | 2 + .../mod/misc/BannerHelper.java | 45 +++++++++++ .../actuallyadditions/mod/util/ModUtil.java | 4 + .../assets/actuallyadditions/lang/en_US.lang | 74 +++++++++++++++++- .../entity/banner/actuallyadditionsBook.png | Bin 0 -> 812 bytes .../entity/banner/actuallyadditionsDrill.png | Bin 0 -> 861 bytes .../banner/actuallyadditionsLeafBlo.png | Bin 0 -> 691 bytes .../banner/actuallyadditionsPhanCon.png | Bin 0 -> 683 bytes 9 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java create mode 100644 src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsBook.png create mode 100644 src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsDrill.png create mode 100644 src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsLeafBlo.png create mode 100644 src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsPhanCon.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 27babfa47..1cfe56b2e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -28,10 +28,7 @@ import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; -import de.ellpeck.actuallyadditions.mod.misc.DispenserHandlerFertilize; -import de.ellpeck.actuallyadditions.mod.misc.DungeonLoot; -import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.misc.*; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.ore.InitOreDict; import de.ellpeck.actuallyadditions.mod.proxy.IProxy; @@ -59,7 +56,7 @@ public class ActuallyAdditions{ @Instance(ModUtil.MOD_ID) public static ActuallyAdditions instance; - @SidedProxy(clientSide = "de.ellpeck.actuallyadditions.mod.proxy.ClientProxy", serverSide = "de.ellpeck.actuallyadditions.mod.proxy.ServerProxy") + @SidedProxy(clientSide = ModUtil.PROXY_CLIENT, serverSide = ModUtil.PROXY_SERVER) public static IProxy proxy; static{ @@ -79,6 +76,7 @@ public class ActuallyAdditions{ InitFluids.init(); InitItems.init(); FuelHandler.init(); + BannerHelper.init(); SoundHandler.init(); UpdateChecker.init(); InitBooklet.preInit(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 4eb932996..1a874c7bd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -31,6 +31,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.fml.common.Loader; @@ -68,6 +69,7 @@ public class InitBooklet{ //Miscellaneous new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeColorLens), new PageReconstructor(4, LensRecipeHandler.recipeExplosionLens), new PageReconstructor(5, LensRecipeHandler.recipeDamageLens), new PageReconstructor(6, LensRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(7, LensRecipeHandler.recipeLeather).setNoText(), new PageReconstructor(8, LensRecipeHandler.recipeNetherWart).setNoText()).setImportant(); + new BookletChapter("banners", ActuallyAdditionsAPI.entryMisc, new ItemStack(Items.BANNER, 1, 15), new PageTextOnly(1)); new BookletChapter("miscDecorStuffsAndThings", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, LensRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeGreenWall).setNoText()); new BookletChapter("quartz", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal())).addTextReplacement("", OreGen.QUARTZ_MIN).addTextReplacement("", OreGen.QUARTZ_MAX), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())), new PageCrafting(3, BlockCrafting.recipeQuartzBlock).setNoText(), new PageCrafting(4, BlockCrafting.recipeQuartzPillar).setNoText(), new PageCrafting(5, BlockCrafting.recipeQuartzChiseled).setNoText()); new BookletChapter("cloud", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockSmileyCloud), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud).setNoText().setPageStacksWildcard()).setSpecial(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java new file mode 100644 index 000000000..43867bb96 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -0,0 +1,45 @@ +package de.ellpeck.actuallyadditions.mod.misc; + +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityBanner.EnumBannerPattern; +import net.minecraftforge.common.util.EnumHelper; + +import java.util.Locale; + +public class BannerHelper{ + + public static void init(){ + addCraftingPattern("Drill", new ItemStack(InitItems.itemDrill)); + addCraftingPattern("LeafBlo", new ItemStack(InitItems.itemLeafBlower)); + addCraftingPattern("PhanCon", new ItemStack(InitItems.itemPhantomConnector)); + addCraftingPattern("Book", new ItemStack(InitItems.itemBooklet)); + } + + /** + * (Excerpted from Additional Banners by Darkhax with permission, thanks!) + * + * Adds a new banner pattern to the game. This banner pattern will be applied by using the + * provided item in a crafting recipe with the banner. + * + * @param name The name of the banner pattern. This is used for the texture file, and is + * also converted into upper case and used for the enum entry. Given how this + * system works, it's critical that this value is unique, consider adding the + * mod id to the name. + * //@param id A small string used to represent the pattern without taking up much space. An + * example of this is "bri". Given how the system works, it is critical that + * this is a unique value. please consider adding the mod id to the pattern id. + * @param craftingStack An ItemStack which is used in the crafting recipe for this pattern. + * An example of this would be the creeper skull being used for the creeper + * pattern. + * @return EnumBannerPattern: A reference to the new EnumBannerPattern entry that has been + * created. + */ + public static EnumBannerPattern addCraftingPattern(String name, ItemStack craftingStack){ + Class[] paramTypes = {String.class, String.class, ItemStack.class}; + Object[] paramValues = {ModUtil.MOD_ID+name, ModUtil.MOD_ID+name, craftingStack}; + return EnumHelper.addEnum(EnumBannerPattern.class, name.toUpperCase(Locale.ROOT), paramTypes, paramValues); + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java index fc92f3d5f..1f4d68da4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java @@ -21,5 +21,9 @@ public class ModUtil{ public static final String MOD_ID = ActuallyAdditionsAPI.MOD_ID; public static final String NAME = "Actually Additions"; + private static final String PROXY_BASE = "de.ellpeck.actuallyadditions.mod.proxy."; + public static final String PROXY_CLIENT = PROXY_BASE+"ClientProxy"; + public static final String PROXY_SERVER = PROXY_BASE+"ServerProxy"; + public static final Logger LOGGER = LogManager.getLogger(NAME); } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 318569e38..48d25fbc0 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -7,6 +7,75 @@ actuallyadditions.lolWutHowUDoDis.name=This is bugged. Throw it away. Please. fluid.actuallyadditions.oil=Oil fluid.actuallyadditions.canolaoil=Canola Oil +#Banners +item.banner.actuallyadditionsBook.black=Black Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.red=Red Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.green=Green Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.brown=Brown Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.blue=Blue Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.purple=Purple Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.cyan=Cyan Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.silver=Silver Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.gray=Gray Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.pink=Pink Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.lime=Lime Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.yellow=Yellow Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.lightBlue=LightBlue Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.magenta=Magenta Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.orange=Orange Actually Additions Manual Pattern +item.banner.actuallyadditionsBook.white=White Actually Additions Manual Pattern + +item.banner.actuallyadditionsPhanCon.black=Black Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.red=Red Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.green=Green Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.brown=Brown Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.blue=Blue Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.purple=Purple Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.cyan=Cyan Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.silver=Silver Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.gray=Gray Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.pink=Pink Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.lime=Lime Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.yellow=Yellow Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.lightBlue=LightBlue Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.magenta=Magenta Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.orange=Orange Phantom Connector Pattern +item.banner.actuallyadditionsPhanCon.white=White Phantom Connector Pattern + +item.banner.actuallyadditionsLeafBlo.black=Black Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.red=Red Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.green=Green Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.brown=Brown Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.blue=Blue Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.purple=Purple Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.cyan=Cyan Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.silver=Silver Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.gray=Gray Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.pink=Pink Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.lime=Lime Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.yellow=Yellow Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.lightBlue=LightBlue Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.magenta=Magenta Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.orange=Orange Leaf Blower Pattern +item.banner.actuallyadditionsLeafBlo.white=White Leaf Blower Pattern + +item.banner.actuallyadditionsDrill.black=Black Drill Pattern +item.banner.actuallyadditionsDrill.red=Red Drill Pattern +item.banner.actuallyadditionsDrill.green=Green Drill Pattern +item.banner.actuallyadditionsDrill.brown=Brown Drill Pattern +item.banner.actuallyadditionsDrill.blue=Blue Drill Pattern +item.banner.actuallyadditionsDrill.purple=Purple Drill Pattern +item.banner.actuallyadditionsDrill.cyan=Cyan Drill Pattern +item.banner.actuallyadditionsDrill.silver=Silver Drill Pattern +item.banner.actuallyadditionsDrill.gray=Gray Drill Pattern +item.banner.actuallyadditionsDrill.pink=Pink Drill Pattern +item.banner.actuallyadditionsDrill.lime=Lime Drill Pattern +item.banner.actuallyadditionsDrill.yellow=Yellow Drill Pattern +item.banner.actuallyadditionsDrill.lightBlue=LightBlue Drill Pattern +item.banner.actuallyadditionsDrill.magenta=Magenta Drill Pattern +item.banner.actuallyadditionsDrill.orange=Orange Drill Pattern +item.banner.actuallyadditionsDrill.white=White Drill Pattern + #NEI Integration container.nei.actuallyadditions.crushing.name=Crusher container.nei.actuallyadditions.crushingDouble.name=Double Crusher @@ -796,4 +865,7 @@ booklet.actuallyadditions.chapter.spawnerChanger.text.1=The Spawner Change booklet.actuallyadditions.chapter.itemStorage.name=Laser Relay Item Storage booklet.actuallyadditions.chapter.itemStorage.text.1=Additionally to the Laser Relays that transfer RF, there are also Item Laser Relays that are able to transfer items. This works in a verry different way though. To connect Item Laser Relays together works the same as connecting normal ones, however, you need an Item Interface to be able to interact with them. You can place any inventories (such as chests and furnaces) next to the Item Laser Relays, but to be pulled out from or inputted into, there needs to be an Item Interface connected -booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. When placing an advanced relay next to an Item Interface, this effect also applies. \ No newline at end of file +booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. When placing an advanced relay next to an Item Interface, this effect also applies. + +booklet.actuallyadditions.chapter.banners.name=Additional Banners +booklet.actuallyadditions.chapter.banners.text.1=For special items in Actually Additions, there is also some additional Banner patterns you can do. All of these just require the item next to the banner in the crafting grid with, optionally, a color as well. The items that have a banner pattern are: The Actually Additions Manual The Phantom Connector The Leaf Blower (not the advanced version) The Drill (only the white one works due to the way banners work) \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsBook.png b/src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsBook.png new file mode 100644 index 0000000000000000000000000000000000000000..08b38684ed850a44b007b256712e982deac95f6e GIT binary patch literal 812 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aistgPb%?u1b{{!il z3=E|P3=FRl7#OT(FffScPl`Y422{&g;1OBOz`!jC!i@DP@e_f95+$w?CBgY=CFO}l zsSE{)nRz98d8s7|CVB>XmN~|CehdsueV#6kAr)~?C-3dsm?+RTcNquk(kQ3HoEcXVTiVShoPwt(R?LA^XyrDHaSj;?h$GQ)kx4$%&Y&m7|0nFN#N9zF_F zNIIj8Q`5f1SF=*L%(p*n{2i?CvC7GV2@`&He<|Nn)DN;_qf6wM3Y$wWOBS6?bKV>G zeyRAwxz%9fR4@Mi>$f$kS8Xz-Z*?e=!&780r zTe<#~QEM+fEn0Xt&wcgPSK*nbK}M+bC+xWWHf`e9D&NBoCs@t(`)JturEK@o*I#GV zvv0YbyXyMupXbz}rnQ{D^!eu;v2Itz-uKHdYkvLxSBLA|bK_pO#Wl}`L2mbu^E@P= z;q9EZGe#`l*{1W|_ur4oKmNGPolpq!$P>YuHwsm|@5(Lt$oKH1%0-o#au+lIGfe|& zJ#lz~+F94hIj=sN-{MZF1Sz-SVbq&j@vL+D#vR8&!78EQy}bP8P4&2EccH$Y^u^kL z&lzh-uxU?L`LFd$di}k}1j3uFNJ7$-CCRz9rzOhGNmqH{w21+yJyxWuTrm_nm`7tms?e}zX45^5FI(2tfQlNnAU)KGXE=1I@+{#$I zNP^>5<4mqgNo&~bm_%#-1o8eh;Jdd<>bSe#%J9kEr}`j&ClU#*|a5fS{$k@)>T zgZOqP!Bn}2kHQodol%at!{suivZXt^vBRjppio;N@R^`q9;?zRn?py}I=IYq-?2lq zL*p|CE=`-#fByQlC~fn~ec!ll*#UJ<(x__7+wT3fYVNt`#$T&!zuKNJ$d?Cd_Z0ct zUAEg-US8huLxs(yvfZ_>58LnR2iwd$$7g5Evb%Zi?S~t~R)<=wy!_JTYF6mp=W^%Y zJq9`S&9w99&nxV{nUi5RpFPs!(fjayzt%&gyw-*-uG=p^&$ljU`f1geax2-dalPf= z3PGM><7#C}HIiHvqUHGO_iyVtSE}~%ZQ2p1H=Y0gul>6rmfOsp5UV4``SNDYx93Z~ z{r-Dc{$3Ku!GftvgET#|E?HR45t(<>ZL#9Js~c_{2Zf5HA5W5npl_9hOwh&%k?((b zyK8~rs1nF>v&71``C!Ab$A(*@bVH@io9quioCWdx!}u#-tBht|D6!(*e`fooAEx_( zz6<*e4&K9^G3(tI2mbi=XoXmN~|CehdsuqMj~}Ar)~?r+8;M1q!&_U29SBXxX0yezH4w zMazqwJ?HI-zIsG_twXz>1+(`XtGY=y%cF|Y)^4?bSoquiz#}~Y$vsMABRJ-J#2wa8GL3Jtwr=vYe!p=C_Y&z@T6<&k)b|=* zw-qaIJaHpJ>df=c?<`O7^)Igx=&J^~!_Z)wT>0_G8*{hc-WIq1cHRE`@4xrn&D&mP zH-Gna$-`k>{HWqXJK2<%N3^L$l+l-B0KKSw;dhs#0 zQB$6w;=3Hsle-pnI7;0Yb1|QNHuy)?-hF?58o$2-G^(S=)j`TW^2EEc-Oum8x-#GX z^KGyzHqMv$=j|-9=kv4UK6{UYf@Jm~1v%UAeCyu<{Xvyr!VGba(_Ss9s)sfSB}R5` qSmP2Arlg}SIBhEN!mlr+#hce;E=hZK5}48$7(8A5T-G@yGywqPSs`}- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsPhanCon.png b/src/main/resources/assets/minecraft/textures/entity/banner/actuallyadditionsPhanCon.png new file mode 100644 index 0000000000000000000000000000000000000000..91e2936e8a0e8024aea47e2530694a76bc70b2ef GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aistgPb%?u1b{{!il z3=E|P3=FRl7#OT(FffScPl`Y422{&g;1OBOz`!jC!i@DP@e_f95+$w?CBgY=CFO}l zsSE{)nRz98d8s7|CVB>XmN~|Cehdsuyq+$OAr)~?r(Miq3KVeu>p9=`!%_K<+qb(| zZJN!q`}$r@pP2^^n(0nnymsmI`#MK=>YVLh+8C(3YdI3Pxdq zV&#n|B3y}=5Q|xV-TdbDa|XrzAOqMGepT4qYx(l|=al!-so&(fcRQry=vME)Z-3~) z*Q%xR?;q|s{zz}a*$YwM%68XAcpvxAd%{|9H@Q&!L|TT6M9Z6t>o>jz>*6VDXmu9q zPxxZ{2BbwmlH19~LHrV9{l4R8Y{9PlaCWkE;xmZiBkPsr7@vHc@mIus#$KrMlDm$R z?w_uHl%4i&;|^|@V@(rUD@t@^>L0qtwal#6dB=2<$8bXFUWNy6K<4GN8C^TXQ1qk! z-EDRGIXl5-STi-H&#yUl0&L$64uMjepATMuEnK4n)IV`!*9MTmT8BXHTg?ITEF}`% zTi&=tl_}|3Pno7Q6Ay!@tDnm{r-UW| D=~Eum literal 0 HcmV?d00001 From 1cdae3be7b1c862a509674cc8ad4673bd9365e49 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 02:26:34 +0200 Subject: [PATCH 139/322] Banner shields --- .../assets/actuallyadditions/lang/en_US.lang | 2 +- .../entity/shield/actuallyadditionsBook.png | Bin 0 -> 569 bytes .../entity/shield/actuallyadditionsDrill.png | Bin 0 -> 574 bytes .../entity/shield/actuallyadditionsLeafBlo.png | Bin 0 -> 553 bytes .../entity/shield/actuallyadditionsPhanCon.png | Bin 0 -> 488 bytes 5 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsBook.png create mode 100644 src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsDrill.png create mode 100644 src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsLeafBlo.png create mode 100644 src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsPhanCon.png diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 48d25fbc0..928ded2b9 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -868,4 +868,4 @@ booklet.actuallyadditions.chapter.itemStorage.text.1=Additionally to the L booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. When placing an advanced relay next to an Item Interface, this effect also applies. booklet.actuallyadditions.chapter.banners.name=Additional Banners -booklet.actuallyadditions.chapter.banners.text.1=For special items in Actually Additions, there is also some additional Banner patterns you can do. All of these just require the item next to the banner in the crafting grid with, optionally, a color as well. The items that have a banner pattern are: The Actually Additions Manual The Phantom Connector The Leaf Blower (not the advanced version) The Drill (only the white one works due to the way banners work) \ No newline at end of file +booklet.actuallyadditions.chapter.banners.text.1=For special items in Actually Additions, there is also special Banner patterns. All of these just require the item next to the banner in the crafting grid with, optionally, a color. You can also combine them with a Shield like normal. The items that have a banner pattern are: The Actually Additions Manual The Phantom Connector The Leaf Blower (not the advanced version) The Drill (only the white one works due to the way banners work) \ No newline at end of file diff --git a/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsBook.png b/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsBook.png new file mode 100644 index 0000000000000000000000000000000000000000..8704547c4201ac3baa180b29e815c24fa7a1a84c GIT binary patch literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aistgPb%?u1b{{!il z3=E|P3=FRl7#OT(FffScPl`Y422{&g;1OBOz`!j4!i;N`_m%<$B}!Z)N`mv#O3D+9 zQW**oGxJLH@={9_O!N%&EOU(O{1_M*XM4IhhE&8oonqM6>>$AMH&95}YFmr&55`IM zj%}PWmQNT{p0V1boZGxBamU`cmzQSqd2Q*Mwlwa5y5K@KFEyK*NAVl#L~K%=y(8?o zt z9RJR{c_&-#8Kmp%=3o9=xBv9-ztf(7{`uG!XzI5MCcaXZeT!q(U;pxCdFG_j*ze3M zR=o=T`&aq@OxqWXHx$3r>K`^((!3)^?^D&@l*nmM*2=fqzNnC0d3{^%bP0l+XkKoPg(y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsDrill.png b/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsDrill.png new file mode 100644 index 0000000000000000000000000000000000000000..f7743ffea5c22e1ab21e066f9aed8b02d6f72d8d GIT binary patch literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aistgPb%?u1b{{!il z3=E|P3=FRl7#OT(FffScPl`Y422{&g;1OBOz`!jC!i@DP@e_f95+$w?CBgY=CFO}l zsSE{)nRz98d8s7|CVB>XmN~|CehdtZ3p`yMLn`8)PI2ry6d>TTcdfVngL4fFl1?af z%P2^HWZ4xE(;+Zf`|Az)+tcj7CT_dDwIafXYvHXUGdlv9RfXl^KI%u0nn(pc}%P$Qn^J9*om zfb_&4o_aP-`TOr!x&HQ^#~SCK8&?7~AFlpUwRhUK+{-^sKb>^!b^2wKkNg{A^iu8S zdtWatvXOgQwfB^XZ;{>n%fIFSF|59-CF^i;jr)a>z9p(kwxIlIx#KBRAeg%G* zz^j}1SEJ%Y+q4aJA~q?`-Uxqc%xsv%Ne6;`=3j=a>vQK7aPH0r#wUZPtDnm{r-UW| D2A}Ks literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsLeafBlo.png b/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsLeafBlo.png new file mode 100644 index 0000000000000000000000000000000000000000..7b52a66aef48ef5eab087039b3e2ee753d5781fd GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aistgPb%?u1b{{!il z3=E|P3=FRl7#OT(FffScPl`Y422{&g;1OBOz`!j4!i;N`_m%<$B}!Z)N`mv#O3D+9 zQW**oGxJLH@={9_O!N%&EOU(O{1_M*yFFbTLn`8)POrt1j3R`%&i))0-9Y$0u(1bj+gfW$=dQ55*JmZ=QPpdtP1Jv0dv< zo}ANAIWPES?(IuTI=4mboj?v1ZPZPSoE9P@c^+c&eu%H?m_G+D2;$V5N(Z9UBHrF} X`~DqQ`E>b!QODrv>gTe~DWM4fiqX;H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsPhanCon.png b/src/main/resources/assets/minecraft/textures/entity/shield/actuallyadditionsPhanCon.png new file mode 100644 index 0000000000000000000000000000000000000000..151dd0adebe104d086b884c981bf038ea7e3c421 GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=3dtTpz6=aistgPb%?u1b{{!il z3=E|P3=FRl7#OT(FffScPl`Y422{&g;1OBOz`!j4!i;N`_m%<$B}!Z)N`mv#O3D+9 zQW**oGxJLH@={9_O!N%&EOU(O{1_M*y*ynULn`8)PBqM9aui_ssba{xU#_H;zQB@&cA|RY~Z;&@t=s5j&u1E`&Pcw7i3@hFFb5i z;trH5;M)_oe*Q)mAoD}l_uqeg`##jz)z^x>^nWOvRnoivZeD&-%kjq#EgX7RUwqA& zRU_+I*s!Rr{k{79IY1-#B+V;{`~5z7ihO-TkN>)dul<$&YL-~Ii(4N0&iLv51fY@w zj9pT5_aFZ?56GU=+_~qUE7;mU-CvepNR-^A3{)S{_Rgc8OLp2q>r3;U+EZWjeOcac oiN#A;!*_v6BP|&G$Dgv>MON;)x%7b-Fyt9LUHx3vIVCg!0Nz)=!2kdN literal 0 HcmV?d00001 From 1f2f0e7cbf8780a55dddc5526f789747eeedff47 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 11:15:27 +0200 Subject: [PATCH 140/322] Remove native invtweaks integration because it was done in a really weird way O_o --- .../mod/inventory/ContainerBreaker.java | 3 +- .../mod/inventory/ContainerCanolaPress.java | 4 +- .../mod/inventory/ContainerCoalGenerator.java | 4 +- .../mod/inventory/ContainerCoffeeMachine.java | 4 +- .../mod/inventory/ContainerCrafter.java | 4 +- .../ContainerDirectionalBreaker.java | 4 +- .../mod/inventory/ContainerDrill.java | 4 +- .../mod/inventory/ContainerDropper.java | 4 +- .../mod/inventory/ContainerEnergizer.java | 4 +- .../mod/inventory/ContainerEnervator.java | 4 +- .../mod/inventory/ContainerFeeder.java | 4 +- .../inventory/ContainerFermentingBarrel.java | 4 +- .../inventory/ContainerFluidCollector.java | 4 +- .../mod/inventory/ContainerFurnaceDouble.java | 4 +- .../mod/inventory/ContainerGiantChest.java | 2 - .../mod/inventory/ContainerGrinder.java | 4 +- .../mod/inventory/ContainerInputter.java | 4 +- .../ContainerLaserRelayItemWhitelist.java | 4 +- .../mod/inventory/ContainerMiner.java | 4 +- .../mod/inventory/ContainerOilGenerator.java | 2 - .../mod/inventory/ContainerPhantomPlacer.java | 4 +- .../inventory/ContainerRangedCollector.java | 4 +- .../mod/inventory/ContainerRepairer.java | 4 +- .../mod/inventory/ContainerXPSolidifier.java | 4 +- .../api/container/ChestContainer.java | 38 ------------------- .../api/container/InventoryContainer.java | 20 ---------- 26 files changed, 43 insertions(+), 106 deletions(-) delete mode 100644 src/main/java/invtweaks/api/container/ChestContainer.java delete mode 100644 src/main/java/invtweaks/api/container/InventoryContainer.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index 2897ad075..bb2dfd1b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -12,14 +12,13 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBreaker; -import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerBreaker extends Container{ private TileEntityBreaker breaker; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index 42af51022..9501a4f0a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -14,14 +14,14 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCanolaPress; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerCanolaPress extends Container{ private TileEntityCanolaPress press; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index 1fcf6e60c..d42bc6aa9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -20,7 +20,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityFurnace; -@InventoryContainer + public class ContainerCoalGenerator extends Container{ private TileEntityCoalGenerator generator; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index c07c0d0bc..bafb1d5b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -16,14 +16,14 @@ import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoffeeMachine; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerCoffeeMachine extends Container{ private TileEntityCoffeeMachine machine; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index 1f856f990..933c268c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.*; @@ -18,7 +18,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.world.World; -@InventoryContainer + public class ContainerCrafter extends Container{ public final int x; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index fec55b686..424381fcf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -12,14 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDirectionalBreaker; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerDirectionalBreaker extends Container{ private TileEntityDirectionalBreaker breaker; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index c223d84b8..7e801193e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -15,7 +15,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.items.ItemDrillUpgrade; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -26,7 +26,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; -@InventoryContainer + public class ContainerDrill extends Container{ public static final int SLOT_AMOUNT = 5; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index 9be71207b..4c885893a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -12,14 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDropper; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerDropper extends Container{ private TileEntityDropper dropper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 5259de3b4..fca361c78 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -14,7 +14,7 @@ import cofh.api.energy.IEnergyContainerItem; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnergizer; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -@InventoryContainer + public class ContainerEnergizer extends Container{ public static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[]{EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 3a2b66098..3069509aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -14,7 +14,7 @@ import cofh.api.energy.IEnergyContainerItem; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnervator; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -25,7 +25,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -@InventoryContainer + public class ContainerEnervator extends Container{ private TileEntityEnervator enervator; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index e696a95ff..dc734e067 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -12,14 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFeeder; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerFeeder extends Container{ private TileEntityFeeder tileFeeder; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index bdd5eb37c..1395a970d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -12,14 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFermentingBarrel; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerFermentingBarrel extends Container{ private TileEntityFermentingBarrel barrel; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 3d14d6010..5c2c9d909 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -12,14 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidCollector; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerFluidCollector extends Container{ private TileEntityFluidCollector collector; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index eb5ba6767..3c70d264d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFurnaceDouble; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -21,7 +21,7 @@ import net.minecraft.inventory.SlotFurnaceOutput; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; -@InventoryContainer + public class ContainerFurnaceDouble extends Container{ private TileEntityFurnaceDouble tileFurnace; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 557ae2faa..72df215f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -12,14 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; -import invtweaks.api.container.ChestContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@ChestContainer(rowSize = 13) public class ContainerGiantChest extends Container{ public TileEntityGiantChest tileChest; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index 8970e4dac..8cfb5f1eb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -22,7 +22,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerGrinder extends Container{ public TileEntityGrinder tileGrinder; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 366f289a6..5dda30f55 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiInputter; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityInputter; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -22,7 +22,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerInputter extends Container{ private TileEntityInputter tileInputter; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 6d5545319..45014e865 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -21,7 +21,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerLaserRelayItemWhitelist extends Container{ private TileEntityLaserRelayItemWhitelist tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 906dc6016..216b79e02 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -12,14 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityMiner; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerMiner extends Container{ private TileEntityMiner miner; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 8b4a1e05c..73342ea35 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -12,14 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityOilGenerator; -import invtweaks.api.container.InventoryContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer public class ContainerOilGenerator extends Container{ private TileEntityOilGenerator generator; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index b4b22ee32..a96707cc1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -12,14 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityPhantomPlacer; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerPhantomPlacer extends Container{ private TileEntityPhantomPlacer placer; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 475fd3add..df17640af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityRangedCollector; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -21,7 +21,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerRangedCollector extends Container{ private TileEntityRangedCollector collector; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index bbd9bd86d..90682e099 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -13,14 +13,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemRepairer; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerRepairer extends Container{ private TileEntityItemRepairer tileRepairer; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index ed088c3c8..d20d040fe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -13,14 +13,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityXPSolidifier; -import invtweaks.api.container.InventoryContainer; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -@InventoryContainer + public class ContainerXPSolidifier extends Container{ private TileEntityXPSolidifier solidifier; diff --git a/src/main/java/invtweaks/api/container/ChestContainer.java b/src/main/java/invtweaks/api/container/ChestContainer.java deleted file mode 100644 index e505829c1..000000000 --- a/src/main/java/invtweaks/api/container/ChestContainer.java +++ /dev/null @@ -1,38 +0,0 @@ -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 { - // 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; - - // 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 { - } - - // 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 { - } -} diff --git a/src/main/java/invtweaks/api/container/InventoryContainer.java b/src/main/java/invtweaks/api/container/InventoryContainer.java deleted file mode 100644 index d5a45b912..000000000 --- a/src/main/java/invtweaks/api/container/InventoryContainer.java +++ /dev/null @@ -1,20 +0,0 @@ -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 need special treatment, such as crafting inputs or alternate player inventory positions, - * but do not have a chest-like component. - *

- * Does not enable the Inventory Tweaks sorting buttons for this container. - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface InventoryContainer { - // Set to true if the Inventory Tweaks options button should be shown for this container. - // (For instance, if you are replacing a vanilla container such as the player's inventory) - boolean showOptions() default true; -} From 1df694c8e93d4ec3a18484d377b93f065665b56e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 13:13:35 +0200 Subject: [PATCH 141/322] Added smart whitelist button to the whitelist laser relay that automatically adds items from adjacent chests to the whitelist --- .../gui/GuiLaserRelayItemWhitelist.java | 10 ++++ .../mod/tile/TileEntityLaserRelay.java | 60 +++++++++++++++---- .../assets/actuallyadditions/lang/en_US.lang | 2 + 3 files changed, 59 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index b393643fb..36fcac329 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -31,6 +31,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @SideOnly(Side.CLIENT) @@ -55,8 +56,11 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ this.whitelistLeft = new SmallerButton(0, this.guiLeft+3, this.guiTop+16, ""); this.whitelistRight = new SmallerButton(1, this.guiLeft+157, this.guiTop+16, ""); + SmallerButton smartWhitelist = new SmallerButton(2, this.guiLeft+80, this.guiTop+33, "S"); + this.buttonList.add(this.whitelistLeft); this.buttonList.add(this.whitelistRight); + this.buttonList.add(smartWhitelist); } @Override @@ -87,6 +91,12 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ list.addAll(infoList); this.drawHoveringText(list, x, y); } + if(x >= this.guiLeft+80 && y >= this.guiTop+33 && x <= this.guiLeft+95 && y <= this.guiTop+46){ + List list = new ArrayList(); + list.add(TextFormatting.BOLD+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.smart")); + list.addAll(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.smartInfo"), 200)); + this.drawHoveringText(list, x, y); + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 847677996..733feee3b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -17,10 +17,7 @@ import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer.GenericItemHandlerInfo; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import de.ellpeck.actuallyadditions.mod.util.*; import io.netty.util.internal.ConcurrentSet; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -132,6 +129,22 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ return true; } + public List getAllHandlersAround(){ + List handlers = new ArrayList(); + for(int i = 0; i <= 5; i++){ + EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); + BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); + TileEntity tile = this.worldObj.getTileEntity(pos); + if(tile != null && !(tile instanceof TileEntityItemViewer)){ + IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); + if(handler != null){ + handlers.add(handler); + } + } + } + return handlers; + } + public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ List handlers = new ArrayList(); for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ @@ -143,17 +156,14 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ TileEntityLaserRelayItem relayTile = (TileEntityLaserRelayItem)aRelayTile; if(!GenericItemHandlerInfo.containsTile(handlers, relayTile)){ GenericItemHandlerInfo info = new GenericItemHandlerInfo(relayTile); - for(int i = 0; i <= 5; i++){ - EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); - TileEntity tile = this.worldObj.getTileEntity(pos); - if(tile != null && !(tile instanceof TileEntityItemViewer)){ - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); - if(handler != null && !GenericItemHandlerInfo.containsHandler(handlers, handler)){ - info.handlers.add(handler); - } + + List handlersAroundTile = relayTile.getAllHandlersAround(); + for(IItemHandler handler : handlersAroundTile){ + if(!GenericItemHandlerInfo.containsHandler(handlers, handler)){ + info.handlers.add(handler); } } + handlers.add(info); } } @@ -346,6 +356,30 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ else if(buttonID == 1){ this.isRightWhitelist = !this.isRightWhitelist; } + else if(buttonID == 2){ + this.addWhitelistSmart(); + } + } + + private void addWhitelistSmart(){ + List handlers = this.getAllHandlersAround(); + for(IItemHandler handler : handlers){ + for(int i = 0; i < handler.getSlots(); i++){ + ItemStack stack = handler.getStackInSlot(i); + if(stack != null){ + if(!ItemUtil.contains(this.slots, stack, false)){ + for(int j = 0; j < this.slots.length; j++){ + if(this.slots[j] == null || this.slots[j].stackSize <= 0){ + ItemStack whitelistStack = stack.copy(); + whitelistStack.stackSize = 1; + this.slots[j] = whitelistStack; + break; + } + } + } + } + } + } } @Override diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 928ded2b9..efcd4cd01 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -535,6 +535,8 @@ info.actuallyadditions.gui.blacklist=Blacklist info.actuallyadditions.gui.coffee=Coffee info.actuallyadditions.gui.ok=Ok info.actuallyadditions.gui.the=the +info.actuallyadditions.gui.smart=Smart Whitelist +info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventories adjacent to this relay will be added to the white- and blacklist. First, the left side will be completely filled, and if there's more items, they will go to the right side. info.actuallyadditions.inputter.info.1=This is the first Slot in the connected Inventory to

at. info.actuallyadditions.inputter.info.2=This is the slot after the last Slot in the connected Inventory to

at. What that means: If you, for example, write 2 in the field to the left and 5 in this one, it will

at Slot 2, 3, and 4. info.actuallyadditions.inputter.whitelistInfo=This applies for this part of the white-/blacklist. The other side applies as well, so you can have some Items whitelisted and some blacklisted. Note that, if you have an empty blacklist or an item whitelisted on at least one side, it will always go through. From e0cf1803580642340b5ed1f31b39795d1933c195 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 13:51:18 +0200 Subject: [PATCH 142/322] Lotsa API restructuring --- .../api/ActuallyAdditionsAPI.java | 27 ++++-- .../api/internal/IBookletGui.java | 2 +- .../api/internal/IEntrySet.java | 31 +++++++ .../api/internal/IMethodHandler.java | 24 +++++ .../recipe/{coffee => }/CoffeeIngredient.java | 5 +- ...eRecipe.java => LensConversionRecipe.java} | 6 +- .../mod/ActuallyAdditions.java | 5 +- .../mod/booklet/BookletUtils.java | 90 +++++++++---------- .../mod/booklet/GuiBooklet.java | 27 +++--- .../mod/booklet/button/BookmarkButton.java | 6 +- .../booklet/chapter/BookletChapterCoffee.java | 2 +- .../booklet/entry}/EntrySet.java | 48 +++++++++- .../mod/booklet/page/PageCoffeeRecipe.java | 8 +- .../mod/booklet/page/PageCrafting.java | 2 +- .../mod/booklet/page/PageCrusherRecipe.java | 2 +- .../mod/booklet/page/PageFurnace.java | 2 +- .../mod/booklet/page/PagePicture.java | 2 +- .../mod/booklet/page/PageReconstructor.java | 16 ++-- .../mod/booklet/page/PageTextOnly.java | 2 +- .../mod/items/ItemBooklet.java | 2 +- .../mod/items/ItemCoffee.java | 11 ++- .../{LensNone.java => LensConversion.java} | 12 +-- .../mod/items/lens/LensRecipeHandler.java | 70 +++++++-------- .../mod/items/lens/Lenses.java | 2 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 2 +- .../coffee/CoffeeMachineRecipeHandler.java | 2 +- .../coffee/CoffeeMachineRecipeWrapper.java | 6 +- .../ReconstructorRecipeHandler.java | 10 +-- .../ReconstructorRecipeWrapper.java | 6 +- .../misc/MethodHandler.java} | 54 ++++++----- .../mod/nei/NEIReconstructorRecipe.java | 6 +- .../mod/tile/TileEntityCoffeeMachine.java | 2 +- .../mod/util/RecipeUtil.java | 6 +- .../util/playerdata/PersistentClientData.java | 2 +- 34 files changed, 305 insertions(+), 195 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java rename src/main/java/de/ellpeck/actuallyadditions/api/recipe/{coffee => }/CoffeeIngredient.java (83%) rename src/main/java/de/ellpeck/actuallyadditions/api/recipe/{LensNoneRecipe.java => LensConversionRecipe.java} (93%) rename src/main/java/de/ellpeck/actuallyadditions/{api/internal => mod/booklet/entry}/EntrySet.java (74%) rename src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/{LensNone.java => LensConversion.java} (89%) rename src/main/java/de/ellpeck/actuallyadditions/{api/recipe/coffee/CoffeeBrewing.java => mod/misc/MethodHandler.java} (65%) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 7df7fbf6f..7846b0a38 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -12,8 +12,9 @@ package de.ellpeck.actuallyadditions.api; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; +import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.recipe.*; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -29,17 +30,25 @@ public class ActuallyAdditionsAPI{ public static final String API_ID = MOD_ID+"api"; public static final String API_VERSION = "11"; + /** + * Use this to handle things that aren't based in the API itself + * DO NOT CHANGE/OVERRIDE THIS!! + * This is getting initialized in Actually Additions' PreInit phase + */ + public static IMethodHandler methodHandler; + public static List crusherRecipes = new ArrayList(); public static List ballOfFurReturnItems = new ArrayList(); public static List treasureChestLoot = new ArrayList(); - public static List reconstructorLensNoneRecipes = new ArrayList(); + public static List reconstructorLensConversionRecipes = new ArrayList(); public static Map reconstructorLensColorChangers = new HashMap(); public static List coffeeMachineIngredients = new ArrayList(); public static List bookletEntries = new ArrayList(); public static List bookletPagesWithItemStackData = new ArrayList(); - //These are getting initlized in Actually Additions' PreInit phase + //These are getting initialized in Actually Additions' PreInit phase + //DO NOT CHANGE/OVERRIDE THESE!! public static IBookletEntry entryGettingStarted; public static IBookletEntry entryFunctionalNonRF; public static IBookletEntry entryFunctionalRF; @@ -139,26 +148,26 @@ public class ActuallyAdditionsAPI{ } /** - * Adds a recipe to the Atomic Reconstructor conversion without lens + * Adds a recipe to the Atomic Reconstructor conversion lenses * StackSizes can only be 1 and greater ones will be ignored * * @param input The input as an ItemStack * @param output The output as an ItemStack * @param energyUse The amount of RF used per conversion */ - public static void addReconstructorLensNoneRecipe(ItemStack input, ItemStack output, int energyUse){ - reconstructorLensNoneRecipes.add(new LensNoneRecipe(input, output, energyUse)); + public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse){ + reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse)); } /** - * Adds a recipe to the Atomic Reconstructor conversion without lens + * Adds a recipe to the Atomic Reconstructor conversion lenses * * @param input The input's OreDictionary name * @param output The output's OreDictionary name * @param energyUse The amount of RF used per conversion */ - public static void addReconstructorLensNoneRecipe(String input, String output, int energyUse){ - reconstructorLensNoneRecipes.add(new LensNoneRecipe(input, output, energyUse)); + public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse){ + reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse)); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java index 96d279db3..65f381e6d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java @@ -43,5 +43,5 @@ public interface IBookletGui{ void drawRect(int startX, int startY, int u, int v, int xSize, int ySize); - EntrySet getCurrentEntrySet(); + IEntrySet getCurrentEntrySet(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java new file mode 100644 index 000000000..90e493e9f --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java @@ -0,0 +1,31 @@ +package de.ellpeck.actuallyadditions.api.internal; + +import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; +import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; +import net.minecraft.nbt.NBTTagCompound; + +public interface IEntrySet{ + + void setEntry(BookletPage page, IBookletChapter chapter, IBookletEntry entry, int pageInIndex); + + void removeEntry(); + + NBTTagCompound writeToNBT(); + + BookletPage getCurrentPage(); + + IBookletEntry getCurrentEntry(); + + IBookletChapter getCurrentChapter(); + + int getPageInIndex(); + + void setPage(BookletPage page); + + void setEntry(IBookletEntry entry); + + void setChapter(IBookletChapter chapter); + + void setPageInIndex(int page); +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java new file mode 100644 index 000000000..cd8f8116c --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java @@ -0,0 +1,24 @@ +package de.ellpeck.actuallyadditions.api.internal; + +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.PotionEffect; + +/** + * This is the internal method handler. + * Use ActuallyAdditionsAPI.methodHandler for calling + * This is not supposed to be implemented. + */ +public interface IMethodHandler{ + + boolean addEffectToStack(ItemStack stack, CoffeeIngredient ingredient); + + PotionEffect getSameEffectFromStack(ItemStack stack, PotionEffect effect); + + void addEffectProperties(ItemStack stack, PotionEffect effect, boolean addDur, boolean addAmp); + + void addEffectToStack(ItemStack stack, PotionEffect effect); + + PotionEffect[] getEffectsFromStack(ItemStack stack); +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/coffee/CoffeeIngredient.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java similarity index 83% rename from src/main/java/de/ellpeck/actuallyadditions/api/recipe/coffee/CoffeeIngredient.java rename to src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java index 53f67a3b4..d45d66120 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/coffee/CoffeeIngredient.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java @@ -8,8 +8,9 @@ * © 2016 Ellpeck */ -package de.ellpeck.actuallyadditions.api.recipe.coffee; +package de.ellpeck.actuallyadditions.api.recipe; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; @@ -30,7 +31,7 @@ public class CoffeeIngredient{ } public boolean effect(ItemStack stack){ - return CoffeeBrewing.addEffectToStack(stack, this); + return ActuallyAdditionsAPI.methodHandler.addEffectToStack(stack, this); } public String getExtraText(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensNoneRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java similarity index 93% rename from src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensNoneRecipe.java rename to src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java index 45bb5e923..739c27e03 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensNoneRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java @@ -17,7 +17,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class LensNoneRecipe{ +public class LensConversionRecipe{ public int energyUse; private String input; @@ -25,13 +25,13 @@ public class LensNoneRecipe{ private ItemStack inputStack; private ItemStack outputStack; - public LensNoneRecipe(ItemStack input, ItemStack output, int energyUse){ + public LensConversionRecipe(ItemStack input, ItemStack output, int energyUse){ this.inputStack = input; this.outputStack = output; this.energyUse = energyUse; } - public LensNoneRecipe(String input, String output, int energyUse){ + public LensConversionRecipe(String input, String output, int energyUse){ this.input = input; this.output = output; this.energyUse = energyUse; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 1cfe56b2e..0dbc8f2a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.booklet.InitBooklet; @@ -68,6 +69,9 @@ public class ActuallyAdditions{ public void preInit(FMLPreInitializationEvent event){ ModUtil.LOGGER.info("Starting PreInitialization Phase..."); + InitBooklet.preInit(); + ActuallyAdditionsAPI.methodHandler = new MethodHandler(); + new ConfigurationHandler(event.getSuggestedConfigurationFile()); PacketHandler.init(); InitToolMaterials.init(); @@ -79,7 +83,6 @@ public class ActuallyAdditions{ BannerHelper.init(); SoundHandler.init(); UpdateChecker.init(); - InitBooklet.preInit(); proxy.preInit(event); ModUtil.LOGGER.info("PreInitialization Finished."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 64a7d420f..8b0a83554 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -79,7 +79,7 @@ public class BookletUtils{ booklet.drawTexturedModalRect(booklet.guiLeft+booklet.xSize/2-142/2, booklet.guiTop+booklet.ySize, 0, 243, 142, 13); //Draw No Entry title - if(booklet.currentEntrySet.entry == null){ + if(booklet.currentEntrySet.getCurrentEntry() == null){ String strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID+".booklet.manualName.1"); booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+12, 0); strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID+".booklet.manualName.2"); @@ -109,7 +109,7 @@ public class BookletUtils{ booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+33, 0); } - String strg = booklet.currentEntrySet.chapter == null ? (booklet.currentEntrySet.entry == null ? StringUtil.localize("itemGroup."+ModUtil.MOD_ID) : booklet.currentEntrySet.entry.getLocalizedName()) : booklet.currentEntrySet.chapter.getLocalizedName(); + String strg = booklet.currentEntrySet.getCurrentChapter() == null ? (booklet.currentEntrySet.getCurrentEntry() == null ? StringUtil.localize("itemGroup."+ModUtil.MOD_ID) : booklet.currentEntrySet.getCurrentEntry().getLocalizedName()) : booklet.currentEntrySet.getCurrentChapter().getLocalizedName(); booklet.drawCenteredString(booklet.getFontRenderer(), strg, booklet.guiLeft+booklet.xSize/2, booklet.guiTop-9, StringUtil.DECIMAL_COLOR_WHITE); } @@ -119,12 +119,12 @@ public class BookletUtils{ * @param pre If the hover info texts or the icon should be drawn */ public static void drawAchievementInfo(GuiBooklet booklet, boolean pre, int mouseX, int mouseY){ - if(booklet.currentEntrySet.chapter == null){ + if(booklet.currentEntrySet.getCurrentChapter() == null){ return; } ArrayList infoList = null; - for(BookletPage page : booklet.currentEntrySet.chapter.getPages()){ + for(BookletPage page : booklet.currentEntrySet.getCurrentChapter().getPages()){ if(page != null && page.getItemStacksForPage() != null){ for(ItemStack stack : page.getItemStacksForPage()){ if(stack != null){ @@ -164,15 +164,15 @@ public class BookletUtils{ * -the amount of words and chars in the index (Just for teh lulz) */ public static void renderPre(GuiBooklet booklet, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ - if(booklet.currentEntrySet.entry != null){ + if(booklet.currentEntrySet.getCurrentEntry() != null){ //Renders Booklet Page Number and Content - if(booklet.currentEntrySet.chapter != null && booklet.currentEntrySet.page != null){ - booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.page.getID()+"/"+booklet.currentEntrySet.chapter.getPages().length, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+171, StringUtil.DECIMAL_COLOR_WHITE); - booklet.currentEntrySet.page.renderPre(booklet, mouseX, mouseY, ticksElapsed, mousePressed); + if(booklet.currentEntrySet.getCurrentChapter() != null && booklet.currentEntrySet.getCurrentPage() != null){ + booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.getCurrentPage().getID()+"/"+booklet.currentEntrySet.getCurrentChapter().getPages().length, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+171, StringUtil.DECIMAL_COLOR_WHITE); + booklet.currentEntrySet.getCurrentPage().renderPre(booklet, mouseX, mouseY, ticksElapsed, mousePressed); } //Renders Chapter Page Number else{ - booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.pageInIndex+"/"+booklet.indexPageAmount, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+171, StringUtil.DECIMAL_COLOR_WHITE); + booklet.drawCenteredString(booklet.getFontRenderer(), booklet.currentEntrySet.getPageInIndex()+"/"+booklet.indexPageAmount, booklet.guiLeft+booklet.xSize/2, booklet.guiTop+171, StringUtil.DECIMAL_COLOR_WHITE); } } //Renders the amount of words and chars the book has @@ -211,8 +211,8 @@ public class BookletUtils{ */ @SuppressWarnings("unchecked") public static void updateSearchBar(GuiBooklet booklet){ - if(booklet.currentEntrySet.entry instanceof BookletEntryAllSearch){ - BookletEntryAllSearch currentEntry = (BookletEntryAllSearch)booklet.currentEntrySet.entry; + if(booklet.currentEntrySet.getCurrentEntry() instanceof BookletEntryAllSearch){ + BookletEntryAllSearch currentEntry = (BookletEntryAllSearch)booklet.currentEntrySet.getCurrentEntry(); if(booklet.searchField.getText() != null && !booklet.searchField.getText().isEmpty()){ currentEntry.chapters.clear(); @@ -226,7 +226,7 @@ public class BookletUtils{ else{ currentEntry.setChapters((ArrayList)currentEntry.allChapters.clone()); } - openIndexEntry(booklet, booklet.currentEntrySet.entry, booklet.currentEntrySet.pageInIndex, false); + openIndexEntry(booklet, booklet.currentEntrySet.getCurrentEntry(), booklet.currentEntrySet.getPageInIndex(), false); } } @@ -255,16 +255,16 @@ public class BookletUtils{ } } - booklet.currentEntrySet.page = null; - booklet.currentEntrySet.chapter = null; + booklet.currentEntrySet.setPage(null); + booklet.currentEntrySet.setChapter(null); - booklet.currentEntrySet.entry = entry; + booklet.currentEntrySet.setEntry(entry); booklet.indexPageAmount = entry == null ? 1 : entry.getChapters().size()/booklet.chapterButtons.length+1; - booklet.currentEntrySet.pageInIndex = entry == null ? 1 : (booklet.indexPageAmount <= page || page <= 0 ? booklet.indexPageAmount : page); + booklet.currentEntrySet.setPageInIndex(entry == null ? 1 : (booklet.indexPageAmount <= page || page <= 0 ? booklet.indexPageAmount : page)); booklet.buttonPreviousScreen.visible = entry != null; - booklet.buttonForward.visible = booklet.currentEntrySet.pageInIndex < booklet.indexPageAmount; - booklet.buttonBackward.visible = booklet.currentEntrySet.pageInIndex > 1; + booklet.buttonForward.visible = booklet.currentEntrySet.getPageInIndex() < booklet.indexPageAmount; + booklet.buttonBackward.visible = booklet.currentEntrySet.getPageInIndex() > 1; for(int i = 0; i < booklet.chapterButtons.length; i++){ IndexButton button = (IndexButton)booklet.chapterButtons[i]; @@ -282,10 +282,10 @@ public class BookletUtils{ } } else{ - boolean entryExists = entry.getChapters().size() > i+(booklet.chapterButtons.length*booklet.currentEntrySet.pageInIndex-booklet.chapterButtons.length); + boolean entryExists = entry.getChapters().size() > i+(booklet.chapterButtons.length*booklet.currentEntrySet.getPageInIndex()-booklet.chapterButtons.length); button.visible = entryExists; if(entryExists){ - IBookletChapter chap = entry.getChapters().get(i+(booklet.chapterButtons.length*booklet.currentEntrySet.pageInIndex-booklet.chapterButtons.length)); + IBookletChapter chap = entry.getChapters().get(i+(booklet.chapterButtons.length*booklet.currentEntrySet.getPageInIndex()-booklet.chapterButtons.length)); button.displayString = chap.getLocalizedNameWithFormatting(); button.chap = chap; } @@ -299,10 +299,10 @@ public class BookletUtils{ public static void handleChapterButtonClick(GuiBooklet booklet, GuiButton button){ int place = Util.arrayContains(booklet.chapterButtons, button); if(place >= 0){ - if(booklet.currentEntrySet.entry != null){ - if(booklet.currentEntrySet.chapter == null){ - if(place < booklet.currentEntrySet.entry.getChapters().size()){ - IBookletChapter chap = booklet.currentEntrySet.entry.getChapters().get(place+(booklet.chapterButtons.length*booklet.currentEntrySet.pageInIndex-booklet.chapterButtons.length)); + if(booklet.currentEntrySet.getCurrentEntry() != null){ + if(booklet.currentEntrySet.getCurrentChapter() == null){ + if(place < booklet.currentEntrySet.getCurrentEntry().getChapters().size()){ + IBookletChapter chap = booklet.currentEntrySet.getCurrentEntry().getChapters().get(place+(booklet.chapterButtons.length*booklet.currentEntrySet.getPageInIndex()-booklet.chapterButtons.length)); openChapter(booklet, chap, chap.getPages()[0]); } } @@ -320,7 +320,7 @@ public class BookletUtils{ * Can only be done when the chapter is not null and an index entry is opened in the booklet */ public static void openChapter(GuiBooklet booklet, IBookletChapter chapter, BookletPage page){ - if(chapter == null || booklet.currentEntrySet.entry == null){ + if(chapter == null || booklet.currentEntrySet.getCurrentEntry() == null){ return; } @@ -328,11 +328,11 @@ public class BookletUtils{ booklet.searchField.setFocused(false); booklet.searchField.setText(""); - booklet.currentEntrySet.chapter = chapter; - booklet.currentEntrySet.page = page != null && doesChapterHavePage(chapter, page) ? page : chapter.getPages()[0]; + booklet.currentEntrySet.setChapter(chapter); + booklet.currentEntrySet.setPage(page != null && doesChapterHavePage(chapter, page) ? page : chapter.getPages()[0]); - booklet.buttonForward.visible = getNextPage(chapter, booklet.currentEntrySet.page) != null; - booklet.buttonBackward.visible = getPrevPage(chapter, booklet.currentEntrySet.page) != null; + booklet.buttonForward.visible = getNextPage(chapter, booklet.currentEntrySet.getCurrentPage()) != null; + booklet.buttonBackward.visible = getPrevPage(chapter, booklet.currentEntrySet.getCurrentPage()) != null; booklet.buttonPreviousScreen.visible = true; for(GuiButton chapterButton : booklet.chapterButtons){ @@ -384,19 +384,19 @@ public class BookletUtils{ * Called when the "next page"-button is pressed */ public static void handleNextPage(GuiBooklet booklet){ - if(booklet.currentEntrySet.entry != null){ - if(booklet.currentEntrySet.page != null){ - BookletPage page = getNextPage(booklet.currentEntrySet.chapter, booklet.currentEntrySet.page); + if(booklet.currentEntrySet.getCurrentEntry() != null){ + if(booklet.currentEntrySet.getCurrentPage() != null){ + BookletPage page = getNextPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()); if(page != null){ - booklet.currentEntrySet.page = page; + booklet.currentEntrySet.setPage(page); } - booklet.buttonForward.visible = getNextPage(booklet.currentEntrySet.chapter, booklet.currentEntrySet.page) != null; - booklet.buttonBackward.visible = getPrevPage(booklet.currentEntrySet.chapter, booklet.currentEntrySet.page) != null; + booklet.buttonForward.visible = getNextPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()) != null; + booklet.buttonBackward.visible = getPrevPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()) != null; } else{ - if(booklet.currentEntrySet.pageInIndex+1 <= booklet.indexPageAmount){ - openIndexEntry(booklet, booklet.currentEntrySet.entry, booklet.currentEntrySet.pageInIndex+1, !(booklet.currentEntrySet.entry instanceof BookletEntryAllSearch)); + if(booklet.currentEntrySet.getPageInIndex()+1 <= booklet.indexPageAmount){ + openIndexEntry(booklet, booklet.currentEntrySet.getCurrentEntry(), booklet.currentEntrySet.getPageInIndex()+1, !(booklet.currentEntrySet.getCurrentEntry() instanceof BookletEntryAllSearch)); } } } @@ -406,19 +406,19 @@ public class BookletUtils{ * Called when the "previous page"-button is pressed */ public static void handlePreviousPage(GuiBooklet booklet){ - if(booklet.currentEntrySet.entry != null){ - if(booklet.currentEntrySet.page != null){ - BookletPage page = getPrevPage(booklet.currentEntrySet.chapter, booklet.currentEntrySet.page); + if(booklet.currentEntrySet.getCurrentEntry() != null){ + if(booklet.currentEntrySet.getCurrentPage() != null){ + BookletPage page = getPrevPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()); if(page != null){ - booklet.currentEntrySet.page = page; + booklet.currentEntrySet.setPage(page); } - booklet.buttonForward.visible = getNextPage(booklet.currentEntrySet.chapter, booklet.currentEntrySet.page) != null; - booklet.buttonBackward.visible = getPrevPage(booklet.currentEntrySet.chapter, booklet.currentEntrySet.page) != null; + booklet.buttonForward.visible = getNextPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()) != null; + booklet.buttonBackward.visible = getPrevPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()) != null; } else{ - if(booklet.currentEntrySet.pageInIndex-1 > 0){ - openIndexEntry(booklet, booklet.currentEntrySet.entry, booklet.currentEntrySet.pageInIndex-1, !(booklet.currentEntrySet.entry instanceof BookletEntryAllSearch)); + if(booklet.currentEntrySet.getPageInIndex()-1 > 0){ + openIndexEntry(booklet, booklet.currentEntrySet.getCurrentEntry(), booklet.currentEntrySet.getPageInIndex()-1, !(booklet.currentEntrySet.getCurrentEntry() instanceof BookletEntryAllSearch)); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 284c0d0b7..d5c538424 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -12,12 +12,13 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.api.internal.EntrySet; +import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton; import de.ellpeck.actuallyadditions.mod.booklet.button.IndexButton; import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.config.GuiConfiguration; import de.ellpeck.actuallyadditions.mod.items.ItemBooklet; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; @@ -64,7 +65,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public int ySize; public int guiLeft; public int guiTop; - public EntrySet currentEntrySet = new EntrySet(null); + public IEntrySet currentEntrySet = new EntrySet(null); public int indexPageAmount; public GuiButton buttonForward; public GuiButton buttonBackward; @@ -124,7 +125,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); //Draws the search bar - if(this.currentEntrySet.entry instanceof BookletEntryAllSearch && this.currentEntrySet.chapter == null){ + if(this.currentEntrySet.getCurrentEntry() instanceof BookletEntryAllSearch && this.currentEntrySet.getCurrentChapter() == null){ this.mc.getTextureManager().bindTexture(resLoc); this.drawTexturedModalRect(this.guiLeft+146, this.guiTop+160, 146, 80, 70, 14); } @@ -145,8 +146,8 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.searchField.drawTextBox(); //Renders the current page's content - if(this.currentEntrySet.entry != null && this.currentEntrySet.chapter != null && this.currentEntrySet.page != null){ - this.currentEntrySet.page.render(this, x, y, this.ticksElapsed, this.mousePressed); + if(this.currentEntrySet.getCurrentEntry() != null && this.currentEntrySet.getCurrentChapter() != null && this.currentEntrySet.getCurrentPage() != null){ + this.currentEntrySet.getCurrentPage().render(this, x, y, this.ticksElapsed, this.mousePressed); } //Draws hovering texts for buttons @@ -204,13 +205,13 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ protected void mouseClicked(int par1, int par2, int par3) throws IOException{ this.searchField.mouseClicked(par1, par2, par3); //Left mouse button - if(par3 == 0 && this.currentEntrySet.chapter != null){ + if(par3 == 0 && this.currentEntrySet.getCurrentChapter() != null){ this.mousePressed = true; } //Right mouse button else if(par3 == 1){ - if(this.currentEntrySet.chapter != null){ - BookletUtils.openIndexEntry(this, this.currentEntrySet.entry, this.currentEntrySet.pageInIndex, true); + if(this.currentEntrySet.getCurrentChapter() != null){ + BookletUtils.openIndexEntry(this, this.currentEntrySet.getCurrentEntry(), this.currentEntrySet.getPageInIndex(), true); } else{ BookletUtils.openIndexEntry(this, null, 1, true); @@ -259,8 +260,8 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ } //Handles gonig from page to chapter or from chapter to index else if(button == this.buttonPreviousScreen){ - if(this.currentEntrySet.chapter != null){ - BookletUtils.openIndexEntry(this, this.currentEntrySet.entry, this.currentEntrySet.pageInIndex, true); + if(this.currentEntrySet.getCurrentChapter() != null){ + BookletUtils.openIndexEntry(this, this.currentEntrySet.getCurrentEntry(), this.currentEntrySet.getPageInIndex(), true); } else{ BookletUtils.openIndexEntry(this, null, 1, true); @@ -389,8 +390,8 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ super.updateScreen(); this.searchField.updateCursorCounter(); - if(this.currentEntrySet.entry != null && this.currentEntrySet.chapter != null && this.currentEntrySet.page != null){ - this.currentEntrySet.page.updateScreen(this.ticksElapsed); + if(this.currentEntrySet.getCurrentEntry() != null && this.currentEntrySet.getCurrentChapter() != null && this.currentEntrySet.getCurrentPage() != null){ + this.currentEntrySet.getCurrentPage().updateScreen(this.ticksElapsed); } boolean buttonThere = UpdateChecker.needsUpdateNotify; @@ -477,7 +478,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ } @Override - public EntrySet getCurrentEntrySet(){ + public IEntrySet getCurrentEntrySet(){ return this.currentEntrySet; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 2816f8d50..cf4e0f776 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.booklet.button; -import de.ellpeck.actuallyadditions.api.internal.EntrySet; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import de.ellpeck.actuallyadditions.mod.items.InitItems; @@ -46,8 +46,8 @@ public class BookmarkButton extends GuiButton{ } } else{ - if(this.booklet.currentEntrySet.entry != null){ - this.assignedEntry.setEntry(this.booklet.currentEntrySet.page, this.booklet.currentEntrySet.chapter, this.booklet.currentEntrySet.entry, this.booklet.currentEntrySet.pageInIndex); + if(this.booklet.currentEntrySet.getCurrentEntry() != null){ + this.assignedEntry.setEntry(this.booklet.currentEntrySet.getCurrentPage(), this.booklet.currentEntrySet.getCurrentChapter(), this.booklet.currentEntrySet.getCurrentEntry(), this.booklet.currentEntrySet.getPageInIndex()); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java index 9a04df28a..c73d63726 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.booklet.chapter; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.booklet.page.BookletPageAA; import de.ellpeck.actuallyadditions.mod.booklet.page.PageCoffeeRecipe; import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/EntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java similarity index 74% rename from src/main/java/de/ellpeck/actuallyadditions/api/internal/EntrySet.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java index 993483334..37923e087 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/EntrySet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java @@ -8,15 +8,16 @@ * © 2016 Ellpeck */ -package de.ellpeck.actuallyadditions.api.internal; +package de.ellpeck.actuallyadditions.mod.booklet.entry; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; +import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import net.minecraft.nbt.NBTTagCompound; -public class EntrySet{ +public class EntrySet implements IEntrySet{ public BookletPage page; public IBookletChapter chapter; @@ -49,6 +50,7 @@ public class EntrySet{ return new EntrySet(null); } + @Override public void setEntry(BookletPage page, IBookletChapter chapter, IBookletEntry entry, int pageInIndex){ this.page = page; this.chapter = chapter; @@ -56,10 +58,12 @@ public class EntrySet{ this.pageInIndex = pageInIndex; } + @Override public void removeEntry(){ this.setEntry(null, null, null, 1); } + @Override public NBTTagCompound writeToNBT(){ NBTTagCompound compound = new NBTTagCompound(); compound.setInteger("Entry", this.entry == null ? -1 : ActuallyAdditionsAPI.bookletEntries.indexOf(this.entry)); @@ -68,4 +72,44 @@ public class EntrySet{ compound.setInteger("PageInIndex", this.pageInIndex); return compound; } + + @Override + public BookletPage getCurrentPage(){ + return this.page; + } + + @Override + public IBookletEntry getCurrentEntry(){ + return this.entry; + } + + @Override + public IBookletChapter getCurrentChapter(){ + return this.chapter; + } + + @Override + public int getPageInIndex(){ + return this.pageInIndex; + } + + @Override + public void setPage(BookletPage page){ + this.page = page; + } + + @Override + public void setEntry(IBookletEntry entry){ + this.entry = entry; + } + + @Override + public void setChapter(IBookletChapter chapter){ + this.chapter = chapter; + } + + @Override + public void setPageInIndex(int page){ + this.pageInIndex = page; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java index a1c4fed7f..9f5be5112 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java @@ -10,9 +10,9 @@ package de.ellpeck.actuallyadditions.mod.booklet.page; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeBrewing; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; @@ -48,7 +48,7 @@ public class PageCoffeeRecipe extends BookletPageAA{ String strg = "Coffee Machine Recipe"; Minecraft.getMinecraft().fontRendererObj.drawString(strg, gui.getGuiLeft()+gui.getXSize()/2-Minecraft.getMinecraft().fontRendererObj.getStringWidth(strg)/2, gui.getGuiTop()+10, 0); - String text = gui.getCurrentEntrySet().page.getText(); + String text = gui.getCurrentEntrySet().getCurrentPage().getText(); if(text != null && !text.isEmpty()){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+100, 115, 0, false); } @@ -76,7 +76,7 @@ public class PageCoffeeRecipe extends BookletPageAA{ break; case 2: stack = new ItemStack(InitItems.itemCoffee); - CoffeeBrewing.addEffectToStack(stack, this.ingredient); + ActuallyAdditionsAPI.methodHandler.addEffectToStack(stack, this.ingredient); coordsOffsetX = 39; coordsOffsetY = 39; break; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index 0ccfddebc..7301019e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -71,7 +71,7 @@ public class PageCrafting extends BookletPageAA{ Minecraft.getMinecraft().fontRendererObj.drawString(strg, gui.getGuiLeft()+gui.getXSize()/2-Minecraft.getMinecraft().fontRendererObj.getStringWidth(strg)/2, gui.getGuiTop()+10, 0); } - String text = gui.getCurrentEntrySet().page.getText(); + String text = gui.getCurrentEntrySet().getCurrentPage().getText(); if(text != null && !text.isEmpty()){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+90, 115, 0, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index 488447406..d5073a86a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -60,7 +60,7 @@ public class PageCrusherRecipe extends BookletPageAA{ Minecraft.getMinecraft().fontRendererObj.drawString(strg, gui.getGuiLeft()+gui.getXSize()/2-Minecraft.getMinecraft().fontRendererObj.getStringWidth(strg)/2, gui.getGuiTop()+10, 0); } - String text = gui.getCurrentEntrySet().page.getText(); + String text = gui.getCurrentEntrySet().getCurrentPage().getText(); if(text != null && !text.isEmpty()){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+100, 115, 0, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index bb52864c0..c35e00c80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -64,7 +64,7 @@ public class PageFurnace extends BookletPageAA{ Minecraft.getMinecraft().fontRendererObj.drawString(strg, gui.getGuiLeft()+gui.getXSize()/2-Minecraft.getMinecraft().fontRendererObj.getStringWidth(strg)/2, gui.getGuiTop()+10, 0); } - String text = gui.getCurrentEntrySet().page.getText(); + String text = gui.getCurrentEntrySet().getCurrentPage().getText(); if(text != null && !text.isEmpty()){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+100, 115, 0, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java index 5263523b2..a70555d77 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java @@ -35,7 +35,7 @@ public class PagePicture extends PageTextOnly{ Minecraft.getMinecraft().getTextureManager().bindTexture(this.resLoc); gui.drawRect(gui.getGuiLeft(), gui.getGuiTop(), 0, 0, gui.getXSize(), gui.getYSize()); - String text = gui.getCurrentEntrySet().page.getText(); + String text = gui.getCurrentEntrySet().getCurrentPage().getText(); if(text != null && !text.isEmpty()){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+this.textStartY, 115, 0, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index 66ec0bb2a..4fca61c9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.booklet.page; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; -import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; @@ -30,14 +30,14 @@ import java.util.List; public class PageReconstructor extends BookletPageAA{ - private LensNoneRecipe[] recipes; + private LensConversionRecipe[] recipes; private int recipePos; - public PageReconstructor(int id, ArrayList recipes){ - this(id, recipes.toArray(new LensNoneRecipe[recipes.size()])); + public PageReconstructor(int id, ArrayList recipes){ + this(id, recipes.toArray(new LensConversionRecipe[recipes.size()])); } - public PageReconstructor(int id, LensNoneRecipe... recipes){ + public PageReconstructor(int id, LensConversionRecipe... recipes){ super(id); this.recipes = recipes; this.addToPagesWithItemStackData(); @@ -56,7 +56,7 @@ public class PageReconstructor extends BookletPageAA{ @Override @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ - LensNoneRecipe recipe = this.recipes[this.recipePos]; + LensConversionRecipe recipe = this.recipes[this.recipePos]; if(recipe == null){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, TextFormatting.DARK_RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".recipeDisabled"), gui.getGuiLeft()+14, gui.getGuiTop()+15, 115, 0, false); } @@ -65,7 +65,7 @@ public class PageReconstructor extends BookletPageAA{ Minecraft.getMinecraft().fontRendererObj.drawString(strg, gui.getGuiLeft()+gui.getXSize()/2-Minecraft.getMinecraft().fontRendererObj.getStringWidth(strg)/2, gui.getGuiTop()+10, 0); } - String text = gui.getCurrentEntrySet().page.getText(); + String text = gui.getCurrentEntrySet().getCurrentPage().getText(); if(text != null && !text.isEmpty()){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+100, 115, 0, false); } @@ -116,7 +116,7 @@ public class PageReconstructor extends BookletPageAA{ public ItemStack[] getItemStacksForPage(){ if(this.recipes != null){ ArrayList stacks = new ArrayList(); - for(LensNoneRecipe recipe : this.recipes){ + for(LensConversionRecipe recipe : this.recipes){ if(recipe != null){ stacks.addAll(recipe.getOutputs()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java index 8ebdfa28c..999eb571d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java @@ -34,7 +34,7 @@ public class PageTextOnly extends BookletPageAA{ @Override @SideOnly(Side.CLIENT) public void renderPre(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ - String text = gui.getCurrentEntrySet().page.getText(); + String text = gui.getCurrentEntrySet().getCurrentPage().getText(); if(text != null && !text.isEmpty()){ StringUtil.drawSplitString(Minecraft.getMinecraft().fontRendererObj, text, gui.getGuiLeft()+14, gui.getGuiTop()+9, 115, 0, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 5ec32cac2..85380abdd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.api.internal.EntrySet; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.blocks.IHudDisplay; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index a4593dbb0..7fb0cabc8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -11,8 +11,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeBrewing; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; @@ -74,7 +73,7 @@ public class ItemCoffee extends ItemFoodBase{ } public static void applyPotionEffectsFromStack(ItemStack stack, EntityLivingBase player){ - PotionEffect[] effects = CoffeeBrewing.getEffectsFromStack(stack); + PotionEffect[] effects = ActuallyAdditionsAPI.methodHandler.getEffectsFromStack(stack); if(effects != null && effects.length > 0){ for(PotionEffect effect : effects){ player.addPotionEffect(new PotionEffect(effect.getPotion(), effect.getDuration()*20, effect.getAmplifier())); @@ -114,7 +113,7 @@ public class ItemCoffee extends ItemFoodBase{ @SuppressWarnings("unchecked") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ - PotionEffect[] effects = CoffeeBrewing.getEffectsFromStack(stack); + PotionEffect[] effects = ActuallyAdditionsAPI.methodHandler.getEffectsFromStack(stack); if(effects != null){ for(PotionEffect effect : effects){ list.add(StringUtil.localize(effect.getEffectName())+" "+(effect.getAmplifier()+1)+", "+StringUtils.ticksToElapsedTime(effect.getDuration()*20)); @@ -138,7 +137,7 @@ public class ItemCoffee extends ItemFoodBase{ @Override public boolean effect(ItemStack stack){ - PotionEffect[] effects = CoffeeBrewing.getEffectsFromStack(stack); + PotionEffect[] effects = ActuallyAdditionsAPI.methodHandler.getEffectsFromStack(stack); ArrayList effectsNew = new ArrayList(); if(effects != null && effects.length > 0){ for(PotionEffect effect : effects){ @@ -149,7 +148,7 @@ public class ItemCoffee extends ItemFoodBase{ stack.setTagCompound(new NBTTagCompound()); if(effectsNew.size() > 0){ this.effects = effectsNew.toArray(new PotionEffect[effectsNew.size()]); - CoffeeBrewing.addEffectToStack(stack, this); + ActuallyAdditionsAPI.methodHandler.addEffectToStack(stack, this); } } this.effects = null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensConversion.java similarity index 89% rename from src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensConversion.java index f3a9e5bd9..1902ab974 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensNone.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensConversion.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; -import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; @@ -27,7 +27,7 @@ import net.minecraft.util.math.BlockPos; import java.util.ArrayList; import java.util.List; -public class LensNone extends Lens{ +public class LensConversion extends Lens{ @SuppressWarnings("unchecked") @Override @@ -40,8 +40,8 @@ public class LensNone extends Lens{ for(int reachZ = -range; reachZ < range+1; reachZ++){ for(int reachY = -range; reachY < range+1; reachY++){ BlockPos pos = new BlockPos(hitBlock.getX()+reachX, hitBlock.getY()+reachY, hitBlock.getZ()+reachZ); - List recipes = LensRecipeHandler.getRecipesFor(new ItemStack(PosUtil.getBlock(pos, tile.getWorldObject()), 1, PosUtil.getMetadata(pos, tile.getWorldObject()))); - for(LensNoneRecipe recipe : recipes){ + List recipes = LensRecipeHandler.getRecipesFor(new ItemStack(PosUtil.getBlock(pos, tile.getWorldObject()), 1, PosUtil.getMetadata(pos, tile.getWorldObject()))); + for(LensConversionRecipe recipe : recipes){ if(recipe != null && tile.getEnergy() >= recipe.energyUse){ List outputs = recipe.getOutputs(); if(outputs != null && !outputs.isEmpty()){ @@ -70,8 +70,8 @@ public class LensNone extends Lens{ for(EntityItem item : items){ ItemStack stack = item.getEntityItem(); if(!item.isDead && stack != null){ - List recipes = LensRecipeHandler.getRecipesFor(stack); - for(LensNoneRecipe recipe : recipes){ + List recipes = LensRecipeHandler.getRecipesFor(stack); + for(LensConversionRecipe recipe : recipes){ if(recipe != null && tile.getEnergy() >= recipe.energyUse){ List outputs = recipe.getOutputs(); if(outputs != null && !outputs.isEmpty()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java index 160a5a385..98c1c027a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.ColorLensChangerByDyeMeta; import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; -import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; @@ -30,74 +30,74 @@ import java.util.ArrayList; public class LensRecipeHandler{ - public static ArrayList mainPageRecipes = new ArrayList(); - public static LensNoneRecipe recipeColorLens; - public static LensNoneRecipe recipeSoulSand; - public static LensNoneRecipe recipeGreenWall; - public static LensNoneRecipe recipeWhiteWall; - public static LensNoneRecipe recipeExplosionLens; - public static LensNoneRecipe recipeDamageLens; - public static LensNoneRecipe recipeLeather; - public static LensNoneRecipe recipeNetherWart; + public static ArrayList mainPageRecipes = new ArrayList(); + public static LensConversionRecipe recipeColorLens; + public static LensConversionRecipe recipeSoulSand; + public static LensConversionRecipe recipeGreenWall; + public static LensConversionRecipe recipeWhiteWall; + public static LensConversionRecipe recipeExplosionLens; + public static LensConversionRecipe recipeDamageLens; + public static LensConversionRecipe recipeLeather; + public static LensConversionRecipe recipeNetherWart; public static void init(){ //Crystal Blocks - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.REDSTONE_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.REDSTONE_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.LAPIS_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.LAPIS.ordinal()), 400); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.LAPIS_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.LAPIS.ordinal()), 400); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.DIAMOND_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 600); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.DIAMOND_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 600); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.EMERALD_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.EMERALD.ordinal()), 1000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.EMERALD_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.EMERALD.ordinal()), 1000); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.COAL_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), 600); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.COAL_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), 600); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.IRON_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), 800); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.IRON_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), 800); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); //Crystal Items - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.REDSTONE), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 40); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.REDSTONE), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 40); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.DYE, 1, 4), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 40); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.DYE, 1, 4), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 40); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.DIAMOND), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 60); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.DIAMOND), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 60); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.EMERALD), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), 100); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.EMERALD), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), 100); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.COAL), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), 60); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.COAL), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), 60); mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.IRON_INGOT), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 80); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.IRON_INGOT), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 80); //Lenses - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new ItemStack(InitItems.itemColorLens), 5000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new ItemStack(InitItems.itemColorLens), 5000); recipeColorLens = RecipeUtil.lastReconstructorRecipe(); if(ConfigCrafting.RECONSTRUCTOR_EXPLOSION_LENS.isEnabled()){ - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemColorLens), new ItemStack(InitItems.itemExplosionLens), 5000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(InitItems.itemColorLens), new ItemStack(InitItems.itemExplosionLens), 5000); recipeExplosionLens = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemExplosionLens), new ItemStack(InitItems.itemDamageLens), 5000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(InitItems.itemExplosionLens), new ItemStack(InitItems.itemDamageLens), 5000); } else{ - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemColorLens), new ItemStack(InitItems.itemDamageLens), 5000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(InitItems.itemColorLens), new ItemStack(InitItems.itemDamageLens), 5000); } recipeDamageLens = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(InitItems.itemDamageLens), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), 5000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(InitItems.itemDamageLens), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), 5000); //Misc if(ConfigCrafting.RECONSTRUCTOR_MISC.isEnabled()){ - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.SAND), new ItemStack(Blocks.SOUL_SAND), 20000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.SAND), new ItemStack(Blocks.SOUL_SAND), 20000); recipeSoulSand = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.LEATHER), 8000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.LEATHER), 8000); recipeLeather = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.RED_MUSHROOM), new ItemStack(Items.NETHER_WART), 150000); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.RED_MUSHROOM), new ItemStack(Items.NETHER_WART), 150000); recipeNetherWart = RecipeUtil.lastReconstructorRecipe(); } - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.QUARTZ_BLOCK), new ItemStack(InitBlocks.blockTestifiBucksWhiteWall), 10); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.QUARTZ_BLOCK), new ItemStack(InitBlocks.blockTestifiBucksWhiteWall), 10); recipeWhiteWall = RecipeUtil.lastReconstructorRecipe(); - ActuallyAdditionsAPI.addReconstructorLensNoneRecipe(new ItemStack(Blocks.QUARTZ_BLOCK, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); + ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.QUARTZ_BLOCK, 1, 1), new ItemStack(InitBlocks.blockTestifiBucksGreenWall), 10); recipeGreenWall = RecipeUtil.lastReconstructorRecipe(); IColorLensChanger changer = new ColorLensChangerByDyeMeta(); @@ -112,9 +112,9 @@ public class LensRecipeHandler{ } - public static ArrayList getRecipesFor(ItemStack input){ - ArrayList possibleRecipes = new ArrayList(); - for(LensNoneRecipe recipe : ActuallyAdditionsAPI.reconstructorLensNoneRecipes){ + public static ArrayList getRecipesFor(ItemStack input){ + ArrayList possibleRecipes = new ArrayList(); + for(LensConversionRecipe recipe : ActuallyAdditionsAPI.reconstructorLensConversionRecipes){ if(ItemUtil.contains(recipe.getInputs(), input, true)){ possibleRecipes.add(recipe); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java index fd2a8169f..1dcbb660b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.api.lens.Lens; public class Lenses{ - public static final Lens LENS_NONE = new LensNone(); + public static final Lens LENS_NONE = new LensConversion(); public static final Lens LENS_DETONATION = new LensDetonation(); public static final Lens LENS_DEATH = new LensDeath(); public static final Lens LENS_COLOR = new LensColor(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index 1d45ffa0d..8baa62f86 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -58,7 +58,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.addRecipes(ActuallyAdditionsAPI.bookletPagesWithItemStackData); registry.addRecipes(ActuallyAdditionsAPI.coffeeMachineIngredients); registry.addRecipes(ActuallyAdditionsAPI.crusherRecipes); - registry.addRecipes(ActuallyAdditionsAPI.reconstructorLensNoneRecipes); + registry.addRecipes(ActuallyAdditionsAPI.reconstructorLensConversionRecipes); registry.addRecipeClickArea(GuiCoffeeMachine.class, 53, 42, 22, 16, NEICoffeeMachineRecipe.NAME); registry.addRecipeClickArea(GuiGrinder.class, 80, 40, 24, 22, CrusherRecipeCategory.NAME); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java index 04f208f1b..e2c796052 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.jei.coffee; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index 5ac65b318..80f04422e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -10,9 +10,9 @@ package de.ellpeck.actuallyadditions.mod.jei.coffee; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeBrewing; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.items.InitItems; @@ -42,7 +42,7 @@ public class CoffeeMachineRecipeWrapper extends RecipeWrapperWithButton implemen this.theIngredient = ingredient; this.theOutput = new ItemStack(InitItems.itemCoffee); - CoffeeBrewing.addEffectToStack(this.theOutput, this.theIngredient); + ActuallyAdditionsAPI.methodHandler.addEffectToStack(this.theOutput, this.theIngredient); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java index 1d22fec60..ed8e90b36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java @@ -10,19 +10,19 @@ package de.ellpeck.actuallyadditions.mod.jei.reconstructor; -import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.nei.NEIReconstructorRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; import javax.annotation.Nonnull; -public class ReconstructorRecipeHandler implements IRecipeHandler{ +public class ReconstructorRecipeHandler implements IRecipeHandler{ @Nonnull @Override public Class getRecipeClass(){ - return LensNoneRecipe.class; + return LensConversionRecipe.class; } @Nonnull @@ -33,12 +33,12 @@ public class ReconstructorRecipeHandler implements IRecipeHandler 0){ for(PotionEffect effect : effects){ - PotionEffect effectHas = getSameEffectFromStack(stack, effect); + PotionEffect effectHas = this.getSameEffectFromStack(stack, effect); if(effectHas != null){ if(effectHas.getAmplifier() < ingredient.maxAmplifier-1){ - addEffectProperties(stack, effect, false, true); + this.addEffectProperties(stack, effect, false, true); worked = true; } } else{ - addEffectToStack(stack, effect); + this.addEffectToStack(stack, effect); worked = true; } } @@ -46,8 +41,9 @@ public class CoffeeBrewing{ return worked; } - public static PotionEffect getSameEffectFromStack(ItemStack stack, PotionEffect effect){ - PotionEffect[] effectsStack = getEffectsFromStack(stack); + @Override + public PotionEffect getSameEffectFromStack(ItemStack stack, PotionEffect effect){ + PotionEffect[] effectsStack = this.getEffectsFromStack(stack); if(effectsStack != null && effectsStack.length > 0){ for(PotionEffect effectStack : effectsStack){ if(effect.getPotion() == effectStack.getPotion()){ @@ -58,18 +54,20 @@ public class CoffeeBrewing{ return null; } - public static void addEffectProperties(ItemStack stack, PotionEffect effect, boolean addDur, boolean addAmp){ - PotionEffect[] effects = getEffectsFromStack(stack); + @Override + public void addEffectProperties(ItemStack stack, PotionEffect effect, boolean addDur, boolean addAmp){ + PotionEffect[] effects = this.getEffectsFromStack(stack); stack.setTagCompound(new NBTTagCompound()); for(int i = 0; i < effects.length; i++){ if(effects[i].getPotion() == effect.getPotion()){ effects[i] = new PotionEffect(effects[i].getPotion(), effects[i].getDuration()+(addDur ? effect.getDuration() : 0), effects[i].getAmplifier()+(addAmp ? (effect.getAmplifier() > 0 ? effect.getAmplifier() : 1) : 0)); } - addEffectToStack(stack, effects[i]); + this.addEffectToStack(stack, effects[i]); } } - public static void addEffectToStack(ItemStack stack, PotionEffect effect){ + @Override + public void addEffectToStack(ItemStack stack, PotionEffect effect){ NBTTagCompound tag = stack.getTagCompound(); if(tag == null){ tag = new NBTTagCompound(); @@ -88,7 +86,8 @@ public class CoffeeBrewing{ stack.setTagCompound(tag); } - public static PotionEffect[] getEffectsFromStack(ItemStack stack){ + @Override + public PotionEffect[] getEffectsFromStack(ItemStack stack){ ArrayList effects = new ArrayList(); NBTTagCompound tag = stack.getTagCompound(); if(tag != null){ @@ -102,5 +101,4 @@ public class CoffeeBrewing{ } return effects.size() > 0 ? effects.toArray(new PotionEffect[effects.size()]) : null; } - } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java index d56590414..eb2d06c85 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java @@ -37,7 +37,7 @@ public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEIReconstructorRecipe.class){ - List recipes = ActuallyAdditionsAPI.reconstructorLensNoneRecipes; + List recipes = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; //Default Recipes for(LensNoneRecipe recipe : recipes){ arecipes.add(new CachedReconstructorRecipe(recipe, false)); @@ -66,7 +66,7 @@ public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(ItemStack result){ - List recipes = ActuallyAdditionsAPI.reconstructorLensNoneRecipes; + List recipes = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; //Default Recipes for(LensNoneRecipe recipe : recipes){ if(ItemUtil.contains(recipe.getOutputs(), result, true)){ @@ -84,7 +84,7 @@ public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements I @Override public void loadUsageRecipes(ItemStack ingredient){ - List recipes = ActuallyAdditionsAPI.reconstructorLensNoneRecipes; + List recipes = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; //Default Recipes for(LensNoneRecipe recipe : recipes){ if(ItemUtil.contains(recipe.getInputs(), ingredient, true)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 3dffad89f..b004276f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.api.recipe.coffee.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java index c0349156a..53db6ddfb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.util; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; -import de.ellpeck.actuallyadditions.api.recipe.LensNoneRecipe; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; @@ -20,8 +20,8 @@ import java.util.List; public class RecipeUtil{ - public static LensNoneRecipe lastReconstructorRecipe(){ - List list = ActuallyAdditionsAPI.reconstructorLensNoneRecipes; + public static LensConversionRecipe lastReconstructorRecipe(){ + List list = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; return list.get(list.size()-1); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java index 2b4ed115d..d20c3e30c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.util.playerdata; -import de.ellpeck.actuallyadditions.api.internal.EntrySet; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton; From 64966ad66e4532886053fbfd75a08a39fba92ab2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 14:14:06 +0200 Subject: [PATCH 143/322] Added the possibility for different types of lenses to be conversion lenses --- .../api/ActuallyAdditionsAPI.java | 18 ++- .../api/internal/IAtomicReconstructor.java | 3 + .../api/internal/IMethodHandler.java | 5 +- .../actuallyadditions/api/lens/Lens.java | 1 - .../api/lens/LensConversion.java | 46 ++++++++ .../api/recipe/LensConversionRecipe.java | 8 +- .../items/ItemRarmorModuleReconstructor.java | 13 ++- .../mod/items/lens/LensConversion.java | 108 ------------------ .../mod/items/lens/Lenses.java | 3 +- .../mod/misc/MethodHandler.java | 77 +++++++++++++ .../tile/TileEntityAtomicReconstructor.java | 8 +- 11 files changed, 168 insertions(+), 122 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensConversion.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 7846b0a38..9b909af3d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -13,8 +13,8 @@ package de.ellpeck.actuallyadditions.api; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; +import de.ellpeck.actuallyadditions.api.lens.LensConversion; import de.ellpeck.actuallyadditions.api.recipe.*; -import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -154,9 +154,15 @@ public class ActuallyAdditionsAPI{ * @param input The input as an ItemStack * @param output The output as an ItemStack * @param energyUse The amount of RF used per conversion + * @param type The type of lens used for the conversion. To use the default type, use method below. + * Note how this always has to be the same instance of the lens type that the item also has for it to work! */ + public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse, LensConversion type){ + reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse, type)); + } + public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse){ - reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse)); + addReconstructorLensConversionRecipe(input, output, energyUse, LensConversion.DEFAULT_CONVERSION); } /** @@ -165,9 +171,15 @@ public class ActuallyAdditionsAPI{ * @param input The input's OreDictionary name * @param output The output's OreDictionary name * @param energyUse The amount of RF used per conversion + * @param type The type of lens used for the conversion. To use the default type, use method below + * Note how this always has to be the same instance of the lens type that the item also has for it to work! */ + public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse, LensConversion type){ + reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse, type)); + } + public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse){ - reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse)); + addReconstructorLensConversionRecipe(input, output, energyUse, LensConversion.DEFAULT_CONVERSION); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java index b4625cc17..32f4a7fe3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.api.internal; +import de.ellpeck.actuallyadditions.api.lens.Lens; import net.minecraft.world.World; /** @@ -49,4 +50,6 @@ public interface IAtomicReconstructor{ * Gets the amount of energy the Reconstructor has stored in its RF storage */ int getEnergy(); + + Lens getLens(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java index cd8f8116c..e2406dbf3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java @@ -1,9 +1,10 @@ package de.ellpeck.actuallyadditions.api.internal; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.math.BlockPos; /** * This is the internal method handler. @@ -21,4 +22,6 @@ public interface IMethodHandler{ void addEffectToStack(ItemStack stack, PotionEffect effect); PotionEffect[] getEffectsFromStack(ItemStack stack); + + boolean invokeConversionLens(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java index 0e54094d8..ba920d659 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java @@ -17,7 +17,6 @@ import net.minecraft.util.math.BlockPos; /** * This is the base class for a Reconstructor Lens Type (NOT THE ITEM!) - * You need to call register() to register the type */ public abstract class Lens{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java new file mode 100644 index 000000000..7ed3475e9 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java @@ -0,0 +1,46 @@ +/* + * This file ("LensNone.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense/ + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.api.lens; + + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import net.minecraft.block.state.IBlockState; +import net.minecraft.util.math.BlockPos; + +/** + * This is the base class for a Reconstructor Lens Type that converts two items + * via the ActuallyAdditionsAPI.reconstructorLensConversionRecipes list. + * + * If you want to make a new type of conversion, just use your type in the recipe + * If you want to use the default type of conversion, use DEFAULT_CONVERSION below. + */ +public class LensConversion extends Lens{ + + public static final LensConversion DEFAULT_CONVERSION = new LensConversion(); + + @SuppressWarnings("unchecked") + @Override + public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ + return ActuallyAdditionsAPI.methodHandler.invokeConversionLens(hitState, hitBlock, tile); + } + + @Override + public float[] getColor(){ + return new float[]{27F/255F, 109F/255F, 1F}; + } + + @Override + public int getDistance(){ + return 10; + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java index 739c27e03..42b4e9657 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.api.recipe; +import de.ellpeck.actuallyadditions.api.lens.LensConversion; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -20,21 +21,24 @@ import java.util.List; public class LensConversionRecipe{ public int energyUse; + public LensConversion type; private String input; private String output; private ItemStack inputStack; private ItemStack outputStack; - public LensConversionRecipe(ItemStack input, ItemStack output, int energyUse){ + public LensConversionRecipe(ItemStack input, ItemStack output, int energyUse, LensConversion type){ this.inputStack = input; this.outputStack = output; this.energyUse = energyUse; + this.type = type; } - public LensConversionRecipe(String input, String output, int energyUse){ + public LensConversionRecipe(String input, String output, int energyUse, LensConversion type){ this.input = input; this.output = output; this.energyUse = energyUse; + this.type = type; } public List getOutputs(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index 93fbe876a..4ad304bc3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -4,6 +4,8 @@ import cofh.api.energy.IEnergyContainerItem; import de.canitzp.rarmor.api.InventoryBase; import de.canitzp.rarmor.api.modules.IRarmorModule; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; +import de.ellpeck.actuallyadditions.api.lens.Lens; +import de.ellpeck.actuallyadditions.api.lens.LensConversion; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; @@ -58,7 +60,7 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo public void onModuleTickInArmor(World world, EntityPlayer player, ItemStack armorChestplate, ItemStack module, InventoryBase inventory){ if(!world.isRemote && player.isSneaking() && player.onGround){ if(world.getTotalWorldTime()%50 == 0){ - RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, Lenses.LENS_NONE.getDistance()); + RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, Lenses.LENS_CONVERSION.getDistance()); if(result != null){ BlockPos pos = result.getBlockPos(); if(pos != null){ @@ -66,10 +68,10 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo int energyUse = TileEntityAtomicReconstructor.ENERGY_USE*2; if(fake.getEnergy() >= energyUse){ - Lenses.LENS_NONE.invoke(world.getBlockState(pos), pos, fake); + Lenses.LENS_CONVERSION.invoke(world.getBlockState(pos), pos, fake); EnumFacing hit = result.sideHit; - TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), Lenses.LENS_NONE); + TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), Lenses.LENS_CONVERSION); fake.extractEnergy(energyUse); } @@ -119,6 +121,11 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo return 0; } } + + @Override + public Lens getLens(){ + return Lenses.LENS_CONVERSION; + } }; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensConversion.java deleted file mode 100644 index 1902ab974..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensConversion.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * This file ("LensNone.java") is part of the Actually Additions Mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items.lens; - - -import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; -import de.ellpeck.actuallyadditions.api.lens.Lens; -import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; - -import java.util.ArrayList; -import java.util.List; - -public class LensConversion extends Lens{ - - @SuppressWarnings("unchecked") - @Override - public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ - if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock)){ - int range = 2; - - //Converting the Blocks - for(int reachX = -range; reachX < range+1; reachX++){ - for(int reachZ = -range; reachZ < range+1; reachZ++){ - for(int reachY = -range; reachY < range+1; reachY++){ - BlockPos pos = new BlockPos(hitBlock.getX()+reachX, hitBlock.getY()+reachY, hitBlock.getZ()+reachZ); - List recipes = LensRecipeHandler.getRecipesFor(new ItemStack(PosUtil.getBlock(pos, tile.getWorldObject()), 1, PosUtil.getMetadata(pos, tile.getWorldObject()))); - for(LensConversionRecipe recipe : recipes){ - if(recipe != null && tile.getEnergy() >= recipe.energyUse){ - List outputs = recipe.getOutputs(); - if(outputs != null && !outputs.isEmpty()){ - ItemStack output = outputs.get(0); - if(output.getItem() instanceof ItemBlock){ - if(!ConfigValues.lessBlockBreakingEffects){ - tile.getWorldObject().playAuxSFX(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); - } - PosUtil.setBlock(pos, tile.getWorldObject(), Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); - } - else{ - EntityItem item = new EntityItem(tile.getWorldObject(), pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, output.copy()); - tile.getWorldObject().spawnEntityInWorld(item); - } - tile.extractEnergy(recipe.energyUse); - break; - } - } - } - } - } - } - - //Converting the Items - ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); - for(EntityItem item : items){ - ItemStack stack = item.getEntityItem(); - if(!item.isDead && stack != null){ - List recipes = LensRecipeHandler.getRecipesFor(stack); - for(LensConversionRecipe recipe : recipes){ - if(recipe != null && tile.getEnergy() >= recipe.energyUse){ - List outputs = recipe.getOutputs(); - if(outputs != null && !outputs.isEmpty()){ - ItemStack outputCopy = outputs.get(0).copy(); - outputCopy.stackSize = stack.stackSize; - - item.setDead(); - - EntityItem newItem = new EntityItem(tile.getWorldObject(), item.posX, item.posY, item.posZ, outputCopy); - tile.getWorldObject().spawnEntityInWorld(newItem); - - tile.extractEnergy(recipe.energyUse); - break; - } - } - } - } - } - return true; - } - return false; - } - - @Override - public float[] getColor(){ - return new float[]{27F/255F, 109F/255F, 1F}; - } - - @Override - public int getDistance(){ - return 10; - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java index 1dcbb660b..5f5a48d45 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java @@ -11,10 +11,11 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.lens.Lens; +import de.ellpeck.actuallyadditions.api.lens.LensConversion; public class Lenses{ - public static final Lens LENS_NONE = new LensConversion(); + public static final LensConversion LENS_CONVERSION = LensConversion.DEFAULT_CONVERSION; public static final Lens LENS_DETONATION = new LensDetonation(); public static final Lens LENS_DEATH = new LensDeath(); public static final Lens LENS_COLOR = new LensColor(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index 0c71f1ae7..7ab847f44 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -4,16 +4,28 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; +import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; +import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; import java.util.ArrayList; +import java.util.List; public class MethodHandler implements IMethodHandler{ @@ -101,4 +113,69 @@ public class MethodHandler implements IMethodHandler{ } return effects.size() > 0 ? effects.toArray(new PotionEffect[effects.size()]) : null; } + + @Override + public boolean invokeConversionLens(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ + if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock)){ + int range = 2; + + //Converting the Blocks + for(int reachX = -range; reachX < range+1; reachX++){ + for(int reachZ = -range; reachZ < range+1; reachZ++){ + for(int reachY = -range; reachY < range+1; reachY++){ + BlockPos pos = new BlockPos(hitBlock.getX()+reachX, hitBlock.getY()+reachY, hitBlock.getZ()+reachZ); + List recipes = LensRecipeHandler.getRecipesFor(new ItemStack(PosUtil.getBlock(pos, tile.getWorldObject()), 1, PosUtil.getMetadata(pos, tile.getWorldObject()))); + for(LensConversionRecipe recipe : recipes){ + if(recipe != null && recipe.type == tile.getLens() && tile.getEnergy() >= recipe.energyUse){ + List outputs = recipe.getOutputs(); + if(outputs != null && !outputs.isEmpty()){ + ItemStack output = outputs.get(0); + if(output.getItem() instanceof ItemBlock){ + if(!ConfigValues.lessBlockBreakingEffects){ + tile.getWorldObject().playAuxSFX(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); + } + PosUtil.setBlock(pos, tile.getWorldObject(), Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); + } + else{ + EntityItem item = new EntityItem(tile.getWorldObject(), pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, output.copy()); + tile.getWorldObject().spawnEntityInWorld(item); + } + tile.extractEnergy(recipe.energyUse); + break; + } + } + } + } + } + } + + //Converting the Items + ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); + for(EntityItem item : items){ + ItemStack stack = item.getEntityItem(); + if(!item.isDead && stack != null){ + List recipes = LensRecipeHandler.getRecipesFor(stack); + for(LensConversionRecipe recipe : recipes){ + if(recipe != null && recipe.type == tile.getLens() && tile.getEnergy() >= recipe.energyUse){ + List outputs = recipe.getOutputs(); + if(outputs != null && !outputs.isEmpty()){ + ItemStack outputCopy = outputs.get(0).copy(); + outputCopy.stackSize = stack.stackSize; + + item.setDead(); + + EntityItem newItem = new EntityItem(tile.getWorldObject(), item.posX, item.posY, item.posZ, outputCopy); + tile.getWorldObject().spawnEntityInWorld(newItem); + + tile.extractEnergy(recipe.energyUse); + break; + } + } + } + } + } + return true; + } + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 49c5760e6..482a76c22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -15,6 +15,7 @@ import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; +import de.ellpeck.actuallyadditions.api.lens.LensConversion; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; @@ -104,7 +105,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple this.storage.extractEnergy(ENERGY_USE, false); //The Lens the Reconstructor currently has installed - Lens currentLens = this.getCurrentLens(); + Lens currentLens = this.getLens(); int distance = currentLens.getDistance(); for(int i = 0; i < distance; i++){ BlockPos hitBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); @@ -120,13 +121,14 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } } - public Lens getCurrentLens(){ + @Override + public Lens getLens(){ if(this.slots[0] != null){ if(this.slots[0].getItem() instanceof ILensItem){ return ((ILensItem)this.slots[0].getItem()).getLens(); } } - return this.counter >= 500 ? Lenses.LENS_DISRUPTION : Lenses.LENS_NONE; + return this.counter >= 500 ? Lenses.LENS_DISRUPTION : Lenses.LENS_CONVERSION; } @Override From 5db240b6adc111743fcac807cba9d311bd0f597e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 14:21:59 +0200 Subject: [PATCH 144/322] Little tiny change --- .../mod/items/ItemRarmorModuleReconstructor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index 4ad304bc3..9f3186624 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -68,7 +68,7 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo int energyUse = TileEntityAtomicReconstructor.ENERGY_USE*2; if(fake.getEnergy() >= energyUse){ - Lenses.LENS_CONVERSION.invoke(world.getBlockState(pos), pos, fake); + fake.getLens().invoke(world.getBlockState(pos), pos, fake); EnumFacing hit = result.sideHit; TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), Lenses.LENS_CONVERSION); From 67147df4cb047fb6ea3b430bfc1a4c812f94ea8d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 15:07:10 +0200 Subject: [PATCH 145/322] Put dots in front of the booklet entry buttons on the front page --- .../de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 8b0a83554..ee400e060 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -273,7 +273,7 @@ public class BookletUtils{ boolean entryExists = ActuallyAdditionsAPI.bookletEntries.size() > i-GuiBooklet.INDEX_BUTTONS_OFFSET; button.visible = entryExists; if(entryExists){ - button.displayString = ActuallyAdditionsAPI.bookletEntries.get(i-GuiBooklet.INDEX_BUTTONS_OFFSET).getLocalizedNameWithFormatting(); + button.displayString = "◦ "+ActuallyAdditionsAPI.bookletEntries.get(i-GuiBooklet.INDEX_BUTTONS_OFFSET).getLocalizedNameWithFormatting(); button.chap = null; } } From f34ed513fa11d8c42eb8cc5aa07217f22431f2a1 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 15:54:57 +0200 Subject: [PATCH 146/322] r33! --- build.gradle | 2 +- .../api/ActuallyAdditionsAPI.java | 2 +- update/changelog.md | 15 +++++++++++++++ update/updateVersions.properties | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 062370413..73bb335f5 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "1.9-r32" +version = "1.9-r33" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 9b909af3d..c0f634059 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -28,7 +28,7 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "11"; + public static final String API_VERSION = "12"; /** * Use this to handle things that aren't based in the API itself diff --git a/update/changelog.md b/update/changelog.md index 756c0677a..1100dc955 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,18 @@ +# 1.9-r33 +* Made Growth Ring performance better +* Centered page number in booklet +* Made placers be able to place anything again +* Made Item Laser Relays that have a whitelist have more priority than those who don't +* Fixed a massive console spam issue of Whitelisted Item Laser Relays trying to send client update packages FROM the client +* The laser relay has less particles again now +* Added custom banner patterns +* Added custom shield patterns +* Remove InvTweaks integration +* Added a smart whitelist button to the whitelisted laser relay that automatically adds items in adjacent inventories to the filter +* Lots of API restructuring +* Bump API Version to 12 +* Put circles in front of the booklet entry buttons on the front page because it looks nice + # 1.9-r32 * Added Spawner Changer * Added Spawner Shards diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 8367720a1..b29b6d7ee 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,3 +1,3 @@ 1.7.10=21 1.8.9=26 -1.9=32 \ No newline at end of file +1.9=33 \ No newline at end of file From 09ecb708aa0ea339464f8261ebc3630e970bd23d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 14 May 2016 17:50:10 +0200 Subject: [PATCH 147/322] Moved inner tileentity classes to own file --- .../mod/blocks/BlockBreaker.java | 3 +- .../mod/blocks/BlockFluidCollector.java | 3 +- .../mod/blocks/BlockGrinder.java | 3 +- .../mod/blocks/BlockInputter.java | 3 +- .../mod/blocks/BlockLaserRelay.java | 11 +- .../mod/blocks/BlockPhantom.java | 2 +- .../ContainerLaserRelayItemWhitelist.java | 2 +- .../gui/GuiLaserRelayItemWhitelist.java | 3 +- .../mod/tile/TileEntityBase.java | 16 +- .../mod/tile/TileEntityBreaker.java | 9 - .../mod/tile/TileEntityFluidCollector.java | 9 - .../mod/tile/TileEntityFluidPlacer.java | 10 + .../mod/tile/TileEntityGrinder.java | 8 - .../mod/tile/TileEntityGrinderDouble.java | 10 + .../mod/tile/TileEntityInputter.java | 9 - .../mod/tile/TileEntityInputterAdvanced.java | 10 + .../mod/tile/TileEntityItemViewer.java | 2 - .../mod/tile/TileEntityLaserRelay.java | 361 ------------------ .../mod/tile/TileEntityLaserRelayEnergy.java | 93 +++++ .../mod/tile/TileEntityLaserRelayItem.java | 72 ++++ .../TileEntityLaserRelayItemWhitelist.java | 235 ++++++++++++ .../mod/tile/TileEntityPhantomBreaker.java | 10 + .../mod/tile/TileEntityPhantomPlacer.java | 8 - .../mod/tile/TileEntityPlacer.java | 10 + 24 files changed, 476 insertions(+), 426 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index a3b75b5ae..bb38a8c6b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBreaker; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlacer; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.SoundType; @@ -47,7 +48,7 @@ public class BlockBreaker extends BlockContainerBase{ @Override public TileEntity createNewTileEntity(World world, int par2){ - return this.isPlacer ? new TileEntityBreaker.TileEntityPlacer() : new TileEntityBreaker(); + return this.isPlacer ? new TileEntityPlacer() : new TileEntityBreaker(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 6596e80f1..8f91920b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidCollector; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidPlacer; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.SoundType; @@ -48,7 +49,7 @@ public class BlockFluidCollector extends BlockContainerBase{ @Override public TileEntity createNewTileEntity(World world, int par2){ - return this.isPlacer ? new TileEntityFluidCollector.TileEntityFluidPlacer() : new TileEntityFluidCollector(); + return this.isPlacer ? new TileEntityFluidPlacer() : new TileEntityFluidCollector(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index d9498ad18..d8971ee53 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinderDouble; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -52,7 +53,7 @@ public class BlockGrinder extends BlockContainerBase{ @Override public TileEntity createNewTileEntity(World world, int par2){ - return this.isDouble ? new TileEntityGrinder.TileEntityGrinderDouble() : new TileEntityGrinder(); + return this.isDouble ? new TileEntityGrinderDouble() : new TileEntityGrinder(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index 7d027651e..c765d7838 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityInputter; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityInputterAdvanced; import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; @@ -51,7 +52,7 @@ public class BlockInputter extends BlockContainerBase{ @Override public TileEntity createNewTileEntity(World world, int par2){ - return this.isAdvanced ? new TileEntityInputter.TileEntityInputterAdvanced() : new TileEntityInputter(); + return this.isAdvanced ? new TileEntityInputterAdvanced() : new TileEntityInputter(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 1d6d5fe34..700ed980b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -14,6 +14,9 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayEnergy; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -72,7 +75,7 @@ public class BlockLaserRelay extends BlockContainerBase{ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ if(player.isSneaking()){ TileEntityLaserRelay relay = (TileEntityLaserRelay)world.getTileEntity(pos); - if(relay instanceof TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist){ + if(relay instanceof TileEntityLaserRelayItemWhitelist){ if(!world.isRemote){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.LASER_RELAY_ITEM_WHITELIST.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } @@ -86,11 +89,11 @@ public class BlockLaserRelay extends BlockContainerBase{ public TileEntity createNewTileEntity(World world, int i){ switch(this.type){ case ITEM: - return new TileEntityLaserRelay.TileEntityLaserRelayItem(); + return new TileEntityLaserRelayItem(); case ITEM_WHITELIST: - return new TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist(); + return new TileEntityLaserRelayItemWhitelist(); default: - return new TileEntityLaserRelay.TileEntityLaserRelayEnergy(); + return new TileEntityLaserRelayEnergy(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index 776752fc3..e253de5e3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -93,7 +93,7 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ case PLACER: return new TileEntityPhantomPlacer(); case BREAKER: - return new TileEntityPhantomPlacer.TileEntityPhantomBreaker(); + return new TileEntityPhantomBreaker(); case LIQUIFACE: return new TileEntityPhantomLiquiface(); case ENERGYFACE: diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 45014e865..72ebc5ab5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index 36fcac329..9e80b01b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -15,7 +15,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiInputter.SmallerButton; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; @@ -31,7 +31,6 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; -import java.util.Collections; import java.util.List; @SideOnly(Side.CLIENT) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 2bb508d81..1e53019ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -54,9 +54,9 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityGreenhouseGlass.class, ModUtil.MOD_ID+":tileEntityGreenhouseGlass"); GameRegistry.registerTileEntity(TileEntityBreaker.class, ModUtil.MOD_ID+":tileEntityBreaker"); GameRegistry.registerTileEntity(TileEntityDropper.class, ModUtil.MOD_ID+":tileEntityDropper"); - GameRegistry.registerTileEntity(TileEntityInputter.TileEntityInputterAdvanced.class, ModUtil.MOD_ID+":tileEntityInputterAdvanced"); - GameRegistry.registerTileEntity(TileEntityBreaker.TileEntityPlacer.class, ModUtil.MOD_ID+":tileEntityPlacer"); - GameRegistry.registerTileEntity(TileEntityGrinder.TileEntityGrinderDouble.class, ModUtil.MOD_ID+":tileEntityGrinderDouble"); + GameRegistry.registerTileEntity(TileEntityInputterAdvanced.class, ModUtil.MOD_ID+":tileEntityInputterAdvanced"); + GameRegistry.registerTileEntity(TileEntityPlacer.class, ModUtil.MOD_ID+":tileEntityPlacer"); + GameRegistry.registerTileEntity(TileEntityGrinderDouble.class, ModUtil.MOD_ID+":tileEntityGrinderDouble"); GameRegistry.registerTileEntity(TileEntityCanolaPress.class, ModUtil.MOD_ID+":tileEntityCanolaPress"); GameRegistry.registerTileEntity(TileEntityFermentingBarrel.class, ModUtil.MOD_ID+":tileEntityFermentingBarrel"); GameRegistry.registerTileEntity(TileEntityOilGenerator.class, ModUtil.MOD_ID+":tileEntityOilGenerator"); @@ -65,9 +65,9 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityPhantomLiquiface.class, ModUtil.MOD_ID+":tileEntityPhantomLiquiface"); GameRegistry.registerTileEntity(TileEntityPhantomEnergyface.class, ModUtil.MOD_ID+":tileEntityPhantomEnergyface"); GameRegistry.registerTileEntity(TileEntityPhantomPlacer.class, ModUtil.MOD_ID+":tileEntityPhantomPlacer"); - GameRegistry.registerTileEntity(TileEntityPhantomPlacer.TileEntityPhantomBreaker.class, ModUtil.MOD_ID+":tileEntityPhantomBreaker"); + GameRegistry.registerTileEntity(TileEntityPhantomBreaker.class, ModUtil.MOD_ID+":tileEntityPhantomBreaker"); GameRegistry.registerTileEntity(TileEntityFluidCollector.class, ModUtil.MOD_ID+":tileEntityFluidCollector"); - GameRegistry.registerTileEntity(TileEntityFluidCollector.TileEntityFluidPlacer.class, ModUtil.MOD_ID+":tileEntityFluidPlacer"); + GameRegistry.registerTileEntity(TileEntityFluidPlacer.class, ModUtil.MOD_ID+":tileEntityFluidPlacer"); GameRegistry.registerTileEntity(TileEntityLavaFactoryController.class, ModUtil.MOD_ID+":tileEntityLavaFactoryController"); GameRegistry.registerTileEntity(TileEntityCoffeeMachine.class, ModUtil.MOD_ID+":tileEntityCoffeeMachine"); GameRegistry.registerTileEntity(TileEntityPhantomBooster.class, ModUtil.MOD_ID+":tileEntityPhantomBooster"); @@ -82,9 +82,9 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityMiner.class, ModUtil.MOD_ID+":tileEntityMiner"); GameRegistry.registerTileEntity(TileEntityFireworkBox.class, ModUtil.MOD_ID+":tileEntityFireworkBox"); GameRegistry.registerTileEntity(TileEntityPhantomRedstoneface.class, ModUtil.MOD_ID+":tileEntityPhantomRedstoneface"); - GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayItem.class, ModUtil.MOD_ID+":tileEntityLaserRelayItem"); - GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayEnergy.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); - GameRegistry.registerTileEntity(TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist"); + GameRegistry.registerTileEntity(TileEntityLaserRelayItem.class, ModUtil.MOD_ID+":tileEntityLaserRelayItem"); + GameRegistry.registerTileEntity(TileEntityLaserRelayEnergy.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); + GameRegistry.registerTileEntity(TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist"); GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 7d60c7266..b927e26ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -134,13 +134,4 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst this.doWork(); } - public static class TileEntityPlacer extends TileEntityBreaker{ - - public TileEntityPlacer(){ - super(9, "placer"); - this.isPlacer = true; - } - - } - } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 0b6f2fec9..e83c081d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -200,13 +200,4 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa this.tank.setFluid(fluids[0]); } - public static class TileEntityFluidPlacer extends TileEntityFluidCollector{ - - public TileEntityFluidPlacer(){ - super("fluidPlacer"); - this.isPlacer = true; - } - - } - } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java new file mode 100644 index 000000000..fcbf2bed1 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java @@ -0,0 +1,10 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityFluidPlacer extends TileEntityFluidCollector{ + + public TileEntityFluidPlacer(){ + super("fluidPlacer"); + this.isPlacer = true; + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 4746197c6..6aa38d368 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -274,12 +274,4 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg this.storage.setEnergyStored(energy); } - public static class TileEntityGrinderDouble extends TileEntityGrinder{ - - public TileEntityGrinderDouble(){ - super(6, "grinderDouble"); - this.isDouble = true; - } - - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java new file mode 100644 index 000000000..ca111de61 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java @@ -0,0 +1,10 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityGrinderDouble extends TileEntityGrinder{ + + public TileEntityGrinderDouble(){ + super(6, "grinderDouble"); + this.isDouble = true; + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index aec488d75..19010a69f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -438,13 +438,4 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == 0; } - - public static class TileEntityInputterAdvanced extends TileEntityInputter{ - - public TileEntityInputterAdvanced(){ - super(25, "inputterAdvanced"); - this.isAdvanced = true; - } - - } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java new file mode 100644 index 000000000..0845f636f --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java @@ -0,0 +1,10 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityInputterAdvanced extends TileEntityInputter{ + + public TileEntityInputterAdvanced(){ + super(25, "inputterAdvanced"); + this.isAdvanced = true; + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 7add5a49e..15084e533 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -1,8 +1,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItem; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay.TileEntityLaserRelayItemWhitelist; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 733feee3b..2979da094 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer.GenericItemHandlerInfo; import de.ellpeck.actuallyadditions.mod.util.*; import io.netty.util.internal.ConcurrentSet; import net.minecraft.entity.player.EntityPlayer; @@ -31,7 +30,6 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import java.util.ArrayList; @@ -115,363 +113,4 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos); } - public static class TileEntityLaserRelayItem extends TileEntityLaserRelay{ - - public TileEntityLaserRelayItem(String name){ - super(name, true); - } - - public TileEntityLaserRelayItem(){ - this("laserRelayItem"); - } - - public boolean isWhitelisted(ItemStack stack){ - return true; - } - - public List getAllHandlersAround(){ - List handlers = new ArrayList(); - for(int i = 0; i <= 5; i++){ - EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); - TileEntity tile = this.worldObj.getTileEntity(pos); - if(tile != null && !(tile instanceof TileEntityItemViewer)){ - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); - if(handler != null){ - handlers.add(handler); - } - } - } - return handlers; - } - - public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ - List handlers = new ArrayList(); - for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ - BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; - for(BlockPos relay : relays){ - if(relay != null){ - TileEntity aRelayTile = this.worldObj.getTileEntity(relay); - if(aRelayTile instanceof TileEntityLaserRelayItem){ - TileEntityLaserRelayItem relayTile = (TileEntityLaserRelayItem)aRelayTile; - if(!GenericItemHandlerInfo.containsTile(handlers, relayTile)){ - GenericItemHandlerInfo info = new GenericItemHandlerInfo(relayTile); - - List handlersAroundTile = relayTile.getAllHandlersAround(); - for(IItemHandler handler : handlersAroundTile){ - if(!GenericItemHandlerInfo.containsHandler(handlers, handler)){ - info.handlers.add(handler); - } - } - - handlers.add(info); - } - } - } - } - } - return handlers; - } - } - - public static class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ - - public IInventory filterInventory; - public boolean isLeftWhitelist; - public boolean isRightWhitelist; - private ItemStack[] slots = new ItemStack[24]; - private boolean lastLeftWhitelist; - private boolean lastRightWhitelist; - - public TileEntityLaserRelayItemWhitelist(){ - super("laserRelayItemWhitelist"); - - this.filterInventory = new IInventory(){ - - private TileEntityLaserRelayItemWhitelist tile; - - private IInventory setTile(TileEntityLaserRelayItemWhitelist tile){ - this.tile = tile; - return this; - } - - @Override - public String getName(){ - return this.tile.name; - } - - @Override - public int getInventoryStackLimit(){ - return 64; - } - - @Override - public void markDirty(){ - - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player){ - return this.tile.canPlayerUse(player); - } - - @Override - public void openInventory(EntityPlayer player){ - - } - - @Override - public void closeInventory(EntityPlayer player){ - - } - - @Override - public int getField(int id){ - return 0; - } - - @Override - public void setField(int id, int value){ - - } - - @Override - public int getFieldCount(){ - return 0; - } - - @Override - public void clear(){ - int length = this.tile.slots.length; - this.tile.slots = new ItemStack[length]; - } - - @Override - public void setInventorySlotContents(int i, ItemStack stack){ - this.tile.slots[i] = stack; - this.markDirty(); - } - - @Override - public int getSizeInventory(){ - return this.tile.slots.length; - } - - @Override - public ItemStack getStackInSlot(int i){ - if(i < this.getSizeInventory()){ - return this.tile.slots[i]; - } - return null; - } - - @Override - public ItemStack decrStackSize(int i, int j){ - if(this.tile.slots[i] != null){ - ItemStack stackAt; - if(this.tile.slots[i].stackSize <= j){ - stackAt = this.tile.slots[i]; - this.tile.slots[i] = null; - this.markDirty(); - return stackAt; - } - else{ - stackAt = this.tile.slots[i].splitStack(j); - if(this.tile.slots[i].stackSize <= 0){ - this.tile.slots[i] = null; - } - this.markDirty(); - return stackAt; - } - } - return null; - } - - @Override - public ItemStack removeStackFromSlot(int index){ - ItemStack stack = this.tile.slots[index]; - this.tile.slots[index] = null; - return stack; - } - - @Override - public boolean hasCustomName(){ - return false; - } - - @Override - public ITextComponent getDisplayName(){ - return new TextComponentString(StringUtil.localize(this.getName())); - } - - @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ - return false; - } - }.setTile(this); - } - - @Override - public boolean isWhitelisted(ItemStack stack){ - return this.checkFilter(stack, true, this.isLeftWhitelist) || this.checkFilter(stack, false, this.isRightWhitelist); - } - - private boolean checkFilter(ItemStack stack, boolean left, boolean isWhitelist){ - int slotStart = left ? 0 : 12; - int slotStop = slotStart+12; - - for(int i = slotStart; i < slotStop; i++){ - if(this.slots[i] != null && this.slots[i].isItemEqual(stack)){ - return isWhitelist; - } - } - return !isWhitelist; - } - - @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); - if(!isForSync){ - TileEntityInventoryBase.saveSlots(this.slots, compound); - } - compound.setBoolean("LeftWhitelist", this.isLeftWhitelist); - compound.setBoolean("RightWhitelist", this.isRightWhitelist); - } - - @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.readSyncableNBT(compound, isForSync); - if(!isForSync){ - TileEntityInventoryBase.loadSlots(this.slots, compound); - } - this.isLeftWhitelist = compound.getBoolean("LeftWhitelist"); - this.isRightWhitelist = compound.getBoolean("RightWhitelist"); - } - - @Override - public void onButtonPressed(int buttonID, EntityPlayer player){ - if(buttonID == 0){ - this.isLeftWhitelist = !this.isLeftWhitelist; - } - else if(buttonID == 1){ - this.isRightWhitelist = !this.isRightWhitelist; - } - else if(buttonID == 2){ - this.addWhitelistSmart(); - } - } - - private void addWhitelistSmart(){ - List handlers = this.getAllHandlersAround(); - for(IItemHandler handler : handlers){ - for(int i = 0; i < handler.getSlots(); i++){ - ItemStack stack = handler.getStackInSlot(i); - if(stack != null){ - if(!ItemUtil.contains(this.slots, stack, false)){ - for(int j = 0; j < this.slots.length; j++){ - if(this.slots[j] == null || this.slots[j].stackSize <= 0){ - ItemStack whitelistStack = stack.copy(); - whitelistStack.stackSize = 1; - this.slots[j] = whitelistStack; - break; - } - } - } - } - } - } - } - - @Override - public void updateEntity(){ - super.updateEntity(); - - if(!this.worldObj.isRemote){ - if((this.isLeftWhitelist != this.lastLeftWhitelist || this.isRightWhitelist != this.lastRightWhitelist) && this.sendUpdateWithInterval()){ - this.lastLeftWhitelist = this.isLeftWhitelist; - this.lastRightWhitelist = this.isRightWhitelist; - } - } - } - } - - public static class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements IEnergyReceiver{ - - public TileEntityLaserRelayEnergy(){ - super("laserRelay", false); - } - - @Override - public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ - return this.transmitEnergy(WorldUtil.getCoordsFromSide(from, this.pos, 0), maxReceive, simulate); - } - - @Override - public int getEnergyStored(EnumFacing from){ - return 0; - } - - @Override - public int getMaxEnergyStored(EnumFacing from){ - return 0; - } - - public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ - int transmitted = 0; - if(maxTransmit > 0){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(this.pos); - if(network != null){ - transmitted = this.transferEnergyToReceiverInNeed(blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); - } - } - return transmitted; - } - - @Override - public boolean canConnectEnergy(EnumFacing from){ - return true; - } - - private int transferEnergyToReceiverInNeed(BlockPos energyGottenFrom, LaserRelayConnectionHandler.Network network, int maxTransfer, boolean simulate){ - int transmitted = 0; - List alreadyChecked = new ArrayList(); - //Go through all of the connections in the network - for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ - BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; - //Go through both relays in the connection - for(BlockPos relay : relays){ - if(relay != null && !alreadyChecked.contains(relay)){ - alreadyChecked.add(relay); - //Get every side of the relay - for(int i = 0; i <= 5; i++){ - EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - //Get the Position at the side - BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); - if(!PosUtil.areSamePos(pos, energyGottenFrom)){ - TileEntity tile = this.worldObj.getTileEntity(pos); - if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ - IEnergyReceiver receiver = (IEnergyReceiver)tile; - if(receiver.canConnectEnergy(side.getOpposite())){ - //Transfer the energy (with the energy loss!) - int theoreticalReceived = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), maxTransfer-transmitted, true); - //The amount of energy lost during a transfer - int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); - - transmitted += ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), theoreticalReceived-deduct, simulate); - transmitted += deduct; - - //If everything that could be transmitted was transmitted - if(transmitted >= maxTransfer){ - return transmitted; - } - } - } - } - } - } - } - } - return transmitted; - } - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java new file mode 100644 index 000000000..3d6add3c4 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -0,0 +1,93 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; +import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; + +import java.util.ArrayList; +import java.util.List; + +public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements IEnergyReceiver{ + + public TileEntityLaserRelayEnergy(){ + super("laserRelay", false); + } + + @Override + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ + return this.transmitEnergy(WorldUtil.getCoordsFromSide(from, this.pos, 0), maxReceive, simulate); + } + + @Override + public int getEnergyStored(EnumFacing from){ + return 0; + } + + @Override + public int getMaxEnergyStored(EnumFacing from){ + return 0; + } + + public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ + int transmitted = 0; + if(maxTransmit > 0){ + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(this.pos); + if(network != null){ + transmitted = this.transferEnergyToReceiverInNeed(blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); + } + } + return transmitted; + } + + @Override + public boolean canConnectEnergy(EnumFacing from){ + return true; + } + + private int transferEnergyToReceiverInNeed(BlockPos energyGottenFrom, LaserRelayConnectionHandler.Network network, int maxTransfer, boolean simulate){ + int transmitted = 0; + List alreadyChecked = new ArrayList(); + //Go through all of the connections in the network + for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ + BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; + //Go through both relays in the connection + for(BlockPos relay : relays){ + if(relay != null && !alreadyChecked.contains(relay)){ + alreadyChecked.add(relay); + //Get every side of the relay + for(int i = 0; i <= 5; i++){ + EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); + //Get the Position at the side + BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); + if(!PosUtil.areSamePos(pos, energyGottenFrom)){ + TileEntity tile = this.worldObj.getTileEntity(pos); + if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ + IEnergyReceiver receiver = (IEnergyReceiver)tile; + if(receiver.canConnectEnergy(side.getOpposite())){ + //Transfer the energy (with the energy loss!) + int theoreticalReceived = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), maxTransfer-transmitted, true); + //The amount of energy lost during a transfer + int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); + + transmitted += ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), theoreticalReceived-deduct, simulate); + transmitted += deduct; + + //If everything that could be transmitted was transmitted + if(transmitted >= maxTransfer){ + return transmitted; + } + } + } + } + } + } + } + } + return transmitted; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java new file mode 100644 index 000000000..545ca07ff --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -0,0 +1,72 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; + +import java.util.ArrayList; +import java.util.List; + +public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ + + public TileEntityLaserRelayItem(String name){ + super(name, true); + } + + public TileEntityLaserRelayItem(){ + this("laserRelayItem"); + } + + public boolean isWhitelisted(ItemStack stack){ + return true; + } + + public List getAllHandlersAround(){ + List handlers = new ArrayList(); + for(int i = 0; i <= 5; i++){ + EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); + BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); + TileEntity tile = this.worldObj.getTileEntity(pos); + if(tile != null && !(tile instanceof TileEntityItemViewer)){ + IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); + if(handler != null){ + handlers.add(handler); + } + } + } + return handlers; + } + + public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ + List handlers = new ArrayList(); + for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ + BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; + for(BlockPos relay : relays){ + if(relay != null){ + TileEntity aRelayTile = this.worldObj.getTileEntity(relay); + if(aRelayTile instanceof de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem){ + de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem relayTile = (de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem)aRelayTile; + if(!TileEntityItemViewer.GenericItemHandlerInfo.containsTile(handlers, relayTile)){ + TileEntityItemViewer.GenericItemHandlerInfo info = new TileEntityItemViewer.GenericItemHandlerInfo(relayTile); + + List handlersAroundTile = relayTile.getAllHandlersAround(); + for(IItemHandler handler : handlersAroundTile){ + if(!TileEntityItemViewer.GenericItemHandlerInfo.containsHandler(handlers, handler)){ + info.handlers.add(handler); + } + } + + handlers.add(info); + } + } + } + } + } + return handlers; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java new file mode 100644 index 000000000..32eeff4a5 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -0,0 +1,235 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.items.IItemHandler; + +import java.util.List; + +public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ + + public IInventory filterInventory; + public boolean isLeftWhitelist; + public boolean isRightWhitelist; + private ItemStack[] slots = new ItemStack[24]; + private boolean lastLeftWhitelist; + private boolean lastRightWhitelist; + + public TileEntityLaserRelayItemWhitelist(){ + super("laserRelayItemWhitelist"); + + this.filterInventory = new IInventory(){ + + private de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist tile; + + private IInventory setTile(de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist tile){ + this.tile = tile; + return this; + } + + @Override + public String getName(){ + return this.tile.name; + } + + @Override + public int getInventoryStackLimit(){ + return 64; + } + + @Override + public void markDirty(){ + + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player){ + return this.tile.canPlayerUse(player); + } + + @Override + public void openInventory(EntityPlayer player){ + + } + + @Override + public void closeInventory(EntityPlayer player){ + + } + + @Override + public int getField(int id){ + return 0; + } + + @Override + public void setField(int id, int value){ + + } + + @Override + public int getFieldCount(){ + return 0; + } + + @Override + public void clear(){ + int length = this.tile.slots.length; + this.tile.slots = new ItemStack[length]; + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack){ + this.tile.slots[i] = stack; + this.markDirty(); + } + + @Override + public int getSizeInventory(){ + return this.tile.slots.length; + } + + @Override + public ItemStack getStackInSlot(int i){ + if(i < this.getSizeInventory()){ + return this.tile.slots[i]; + } + return null; + } + + @Override + public ItemStack decrStackSize(int i, int j){ + if(this.tile.slots[i] != null){ + ItemStack stackAt; + if(this.tile.slots[i].stackSize <= j){ + stackAt = this.tile.slots[i]; + this.tile.slots[i] = null; + this.markDirty(); + return stackAt; + } + else{ + stackAt = this.tile.slots[i].splitStack(j); + if(this.tile.slots[i].stackSize <= 0){ + this.tile.slots[i] = null; + } + this.markDirty(); + return stackAt; + } + } + return null; + } + + @Override + public ItemStack removeStackFromSlot(int index){ + ItemStack stack = this.tile.slots[index]; + this.tile.slots[index] = null; + return stack; + } + + @Override + public boolean hasCustomName(){ + return false; + } + + @Override + public ITextComponent getDisplayName(){ + return new TextComponentString(StringUtil.localize(this.getName())); + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ + return false; + } + }.setTile(this); + } + + @Override + public boolean isWhitelisted(ItemStack stack){ + return this.checkFilter(stack, true, this.isLeftWhitelist) || this.checkFilter(stack, false, this.isRightWhitelist); + } + + private boolean checkFilter(ItemStack stack, boolean left, boolean isWhitelist){ + int slotStart = left ? 0 : 12; + int slotStop = slotStart+12; + + for(int i = slotStart; i < slotStop; i++){ + if(this.slots[i] != null && this.slots[i].isItemEqual(stack)){ + return isWhitelist; + } + } + return !isWhitelist; + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.writeSyncableNBT(compound, isForSync); + if(!isForSync){ + TileEntityInventoryBase.saveSlots(this.slots, compound); + } + compound.setBoolean("LeftWhitelist", this.isLeftWhitelist); + compound.setBoolean("RightWhitelist", this.isRightWhitelist); + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.readSyncableNBT(compound, isForSync); + if(!isForSync){ + TileEntityInventoryBase.loadSlots(this.slots, compound); + } + this.isLeftWhitelist = compound.getBoolean("LeftWhitelist"); + this.isRightWhitelist = compound.getBoolean("RightWhitelist"); + } + + @Override + public void onButtonPressed(int buttonID, EntityPlayer player){ + if(buttonID == 0){ + this.isLeftWhitelist = !this.isLeftWhitelist; + } + else if(buttonID == 1){ + this.isRightWhitelist = !this.isRightWhitelist; + } + else if(buttonID == 2){ + this.addWhitelistSmart(); + } + } + + private void addWhitelistSmart(){ + List handlers = this.getAllHandlersAround(); + for(IItemHandler handler : handlers){ + for(int i = 0; i < handler.getSlots(); i++){ + ItemStack stack = handler.getStackInSlot(i); + if(stack != null){ + if(!ItemUtil.contains(this.slots, stack, false)){ + for(int j = 0; j < this.slots.length; j++){ + if(this.slots[j] == null || this.slots[j].stackSize <= 0){ + ItemStack whitelistStack = stack.copy(); + whitelistStack.stackSize = 1; + this.slots[j] = whitelistStack; + break; + } + } + } + } + } + } + } + + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote){ + if((this.isLeftWhitelist != this.lastLeftWhitelist || this.isRightWhitelist != this.lastRightWhitelist) && this.sendUpdateWithInterval()){ + this.lastLeftWhitelist = this.isLeftWhitelist; + this.lastRightWhitelist = this.isRightWhitelist; + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java new file mode 100644 index 000000000..2985f6214 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java @@ -0,0 +1,10 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityPhantomBreaker extends TileEntityPhantomPlacer{ + + public TileEntityPhantomBreaker(){ + super(9, "phantomBreaker"); + this.isBreaker = true; + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 7d95ec642..029a59b26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -221,12 +221,4 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements this.doWork(); } - public static class TileEntityPhantomBreaker extends TileEntityPhantomPlacer{ - - public TileEntityPhantomBreaker(){ - super(9, "phantomBreaker"); - this.isBreaker = true; - } - - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java new file mode 100644 index 000000000..efc71d633 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java @@ -0,0 +1,10 @@ +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityPlacer extends TileEntityBreaker{ + + public TileEntityPlacer(){ + super(9, "placer"); + this.isPlacer = true; + } + +} From 3403947af0343725e277b5fd1bf444bbeb579e72 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 15 May 2016 12:00:42 +0200 Subject: [PATCH 148/322] Moved lenses to API side Bump API version to 13 --- .../api/ActuallyAdditionsAPI.java | 15 ++++++++++++--- .../api/lens/LensConversion.java | 4 +--- .../actuallyadditions/mod/items/InitItems.java | 7 ++++--- .../mod/items/ItemRarmorModuleReconstructor.java | 10 +++++----- .../actuallyadditions/mod/items/lens/Lenses.java | 14 ++++++++------ .../mod/tile/TileEntityAtomicReconstructor.java | 3 ++- 6 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index c0f634059..4c63a1542 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.api; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; +import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.lens.LensConversion; import de.ellpeck.actuallyadditions.api.recipe.*; import net.minecraft.item.Item; @@ -28,7 +29,7 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "12"; + public static final String API_VERSION = "13"; /** * Use this to handle things that aren't based in the API itself @@ -59,6 +60,14 @@ public class ActuallyAdditionsAPI{ public static IBookletEntry entryCrossover; public static IBookletEntry allAndSearch; + //These are getting initialized in Actually Additions' PreInit phase + //DO NOT CHANGE/OVERRIDE THESE!! + public static LensConversion lensDefaultConversion; + public static Lens lensDetonation; + public static Lens lensDeath; + public static Lens lensColor; + public static Lens lensDisruption; + /** * Adds a Recipe to the Crusher Recipe Registry * The second output will be nothing @@ -162,7 +171,7 @@ public class ActuallyAdditionsAPI{ } public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse){ - addReconstructorLensConversionRecipe(input, output, energyUse, LensConversion.DEFAULT_CONVERSION); + addReconstructorLensConversionRecipe(input, output, energyUse, lensDefaultConversion); } /** @@ -179,7 +188,7 @@ public class ActuallyAdditionsAPI{ } public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse){ - addReconstructorLensConversionRecipe(input, output, energyUse, LensConversion.DEFAULT_CONVERSION); + addReconstructorLensConversionRecipe(input, output, energyUse, lensDefaultConversion); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java index 7ed3475e9..6122acf12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java @@ -21,12 +21,10 @@ import net.minecraft.util.math.BlockPos; * via the ActuallyAdditionsAPI.reconstructorLensConversionRecipes list. * * If you want to make a new type of conversion, just use your type in the recipe - * If you want to use the default type of conversion, use DEFAULT_CONVERSION below. + * If you want to use the default type of conversion, use ActuallyAdditionsAPI.lensDefaultConversion. */ public class LensConversion extends Lens{ - public static final LensConversion DEFAULT_CONVERSION = new LensConversion(); - @SuppressWarnings("unchecked") @Override public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 669ee19cc..670798c1c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; import de.ellpeck.actuallyadditions.mod.items.base.ItemHoeAA; @@ -215,9 +216,9 @@ public class InitItems{ itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); itemCrateKeeper = new ItemGeneric("itemCrateKeeper"); - itemColorLens = new ItemLens("itemColorLens", Lenses.LENS_COLOR); - itemExplosionLens = new ItemLens("itemExplosionLens", Lenses.LENS_DETONATION); - itemDamageLens = new ItemLens("itemDamageLens", Lenses.LENS_DEATH); + itemColorLens = new ItemLens("itemColorLens", ActuallyAdditionsAPI.lensColor); + itemExplosionLens = new ItemLens("itemExplosionLens", ActuallyAdditionsAPI.lensDetonation); + itemDamageLens = new ItemLens("itemDamageLens", ActuallyAdditionsAPI.lensDeath); itemCrystal = new ItemCrystal("itemCrystal"); itemLaserWrench = new ItemLaserWrench("itemLaserWrench"); itemChestToCrateUpgrade = new ItemChestToCrateUpgrade("itemChestToCrateUpgrade"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index 9f3186624..0f580e005 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -3,6 +3,7 @@ package de.ellpeck.actuallyadditions.mod.items; import cofh.api.energy.IEnergyContainerItem; import de.canitzp.rarmor.api.InventoryBase; import de.canitzp.rarmor.api.modules.IRarmorModule; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.lens.LensConversion; @@ -60,18 +61,17 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo public void onModuleTickInArmor(World world, EntityPlayer player, ItemStack armorChestplate, ItemStack module, InventoryBase inventory){ if(!world.isRemote && player.isSneaking() && player.onGround){ if(world.getTotalWorldTime()%50 == 0){ - RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, Lenses.LENS_CONVERSION.getDistance()); + IAtomicReconstructor fake = this.getFakeReconstructor(world, player, armorChestplate); + RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, fake.getLens().getDistance()); if(result != null){ BlockPos pos = result.getBlockPos(); if(pos != null){ - IAtomicReconstructor fake = this.getFakeReconstructor(world, player, armorChestplate); - int energyUse = TileEntityAtomicReconstructor.ENERGY_USE*2; if(fake.getEnergy() >= energyUse){ fake.getLens().invoke(world.getBlockState(pos), pos, fake); EnumFacing hit = result.sideHit; - TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), Lenses.LENS_CONVERSION); + TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), fake.getLens()); fake.extractEnergy(energyUse); } @@ -124,7 +124,7 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo @Override public Lens getLens(){ - return Lenses.LENS_CONVERSION; + return ActuallyAdditionsAPI.lensDefaultConversion; } }; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java index 5f5a48d45..7a500c180 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java @@ -10,14 +10,16 @@ package de.ellpeck.actuallyadditions.mod.items.lens; -import de.ellpeck.actuallyadditions.api.lens.Lens; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.lens.LensConversion; public class Lenses{ - public static final LensConversion LENS_CONVERSION = LensConversion.DEFAULT_CONVERSION; - public static final Lens LENS_DETONATION = new LensDetonation(); - public static final Lens LENS_DEATH = new LensDeath(); - public static final Lens LENS_COLOR = new LensColor(); - public static final Lens LENS_DISRUPTION = new LensDisruption(); + public static void init(){ + ActuallyAdditionsAPI.lensDefaultConversion = new LensConversion(); + ActuallyAdditionsAPI.lensDetonation = new LensDetonation(); + ActuallyAdditionsAPI.lensDeath = new LensDeath(); + ActuallyAdditionsAPI.lensColor = new LensColor(); + ActuallyAdditionsAPI.lensDisruption = new LensDisruption(); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 482a76c22..77c8f61f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; @@ -128,7 +129,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return ((ILensItem)this.slots[0].getItem()).getLens(); } } - return this.counter >= 500 ? Lenses.LENS_DISRUPTION : Lenses.LENS_CONVERSION; + return this.counter >= 500 ? ActuallyAdditionsAPI.lensDisruption : ActuallyAdditionsAPI.lensDefaultConversion; } @Override From 96c9e1895c3082f14a7ef575961eca620a505224 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 15 May 2016 12:01:26 +0200 Subject: [PATCH 149/322] Actually call it --- .../de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 0dbc8f2a6..50a0cffab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -27,6 +27,7 @@ import de.ellpeck.actuallyadditions.mod.items.InitForeignPaxels; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; +import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; import de.ellpeck.actuallyadditions.mod.misc.*; @@ -69,8 +70,9 @@ public class ActuallyAdditions{ public void preInit(FMLPreInitializationEvent event){ ModUtil.LOGGER.info("Starting PreInitialization Phase..."); - InitBooklet.preInit(); ActuallyAdditionsAPI.methodHandler = new MethodHandler(); + Lenses.init(); + InitBooklet.preInit(); new ConfigurationHandler(event.getSuggestedConfigurationFile()); PacketHandler.init(); From e693486544307b76a24084a3a3bc7687d7d34801 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 15 May 2016 12:21:28 +0200 Subject: [PATCH 150/322] Removed calls of addRenderVariant, because apparently it didn't change anything --- .../ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java | 1 - .../de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java | 3 --- .../de/ellpeck/actuallyadditions/mod/items/ItemDrill.java | 3 --- .../de/ellpeck/actuallyadditions/mod/items/ItemFoods.java | 3 --- .../de/ellpeck/actuallyadditions/mod/items/ItemMisc.java | 3 --- .../de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 5 ----- .../java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java | 2 -- .../de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java | 5 ----- 8 files changed, 25 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 3fab69c26..4ee7a25fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -56,7 +56,6 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ protected void registerRendering(){ ResourceLocation resLoc = new ResourceLocation(ModUtil.MOD_ID, "itemPaxel"); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(resLoc, "inventory")); - ActuallyAdditions.proxy.addRenderVariant(this, resLoc); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index a18fe5d08..9dd9eb46a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -58,12 +58,9 @@ public class ItemCrystal extends ItemBase{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[BlockCrystal.allCrystals.length]; for(int i = 0; i < BlockCrystal.allCrystals.length; i++){ String name = this.getRegistryName()+BlockCrystal.allCrystals[i].name; - resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } - ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 16b40e507..0d20dd8ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -335,13 +335,10 @@ public class ItemDrill extends ItemEnergy{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[16]; for(int i = 0; i < 16; i++){ String name = this.getRegistryName()+TheColoredLampColors.values()[i].name; - resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } - ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index bc5d797b0..8b0f32c60 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -102,12 +102,9 @@ public class ItemFoods extends ItemFoodBase{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[allFoods.length]; for(int i = 0; i < allFoods.length; i++){ String name = this.getRegistryName()+allFoods[i].name; - resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } - ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index e32d56e64..f4b689562 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -59,12 +59,9 @@ public class ItemMisc extends ItemBase{ @Override protected void registerRendering(){ - ResourceLocation[] resLocs = new ResourceLocation[allMiscItems.length]; for(int i = 0; i < allMiscItems.length; i++){ String name = this.getRegistryName()+allMiscItems[i].name; - resLocs[i] = new ResourceLocation(name); ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); } - ActuallyAdditions.proxy.addRenderVariant(this, resLocs); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 2806e5fdb..9bcf39d80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -164,11 +164,6 @@ public class ClientProxy implements IProxy{ modelLocationsForRegistering.put(stack, location); } - @Override - public void addRenderVariant(Item item, ResourceLocation... location){ - modelVariantsForRegistering.put(item, location); - } - @Override public void addColoredItem(Item item){ colorProdividingItemsForRegistering.add(item); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index 3b084f9e9..d319fff77 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -28,7 +28,5 @@ public interface IProxy{ void addRenderRegister(ItemStack stack, ModelResourceLocation location); - void addRenderVariant(Item item, ResourceLocation... location); - void addColoredItem(Item item); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index e00ad7c7e..15bbd6199 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -42,11 +42,6 @@ public class ServerProxy implements IProxy{ } - @Override - public void addRenderVariant(Item item, ResourceLocation... location){ - - } - @Override public void addColoredItem(Item item){ From 028accdf3eb6bc551bdf590043f944fba883eb40 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 01:04:11 +0200 Subject: [PATCH 151/322] Added spawner changer to creative tab --- .../de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 8ab5aebd3..d0822359b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -136,6 +136,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemLaserWrench); this.add(InitItems.itemCrateKeeper); this.add(InitItems.itemChestToCrateUpgrade); + this.add(InitItems.itemSpawnerChanger); this.add(InitItems.itemDrill); this.add(InitItems.itemDrillUpgradeSpeed); From e20a82a4ad235883501ebf9f771c83881e6b32c7 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 17:00:29 +0200 Subject: [PATCH 152/322] Firework Box Minecart! --- .../mod/ActuallyAdditions.java | 4 +- .../mod/creative/CreativeTab.java | 1 + .../mod/entity/EntityFireworkBoxMinecart.java | 64 ++++++++++ .../mod/entity/EntityRFMinecart.java | 36 ++++++ .../mod/entity/InitEntities.java | 18 +++ .../mod/items/InitItems.java | 9 +- .../mod/items/ItemFertilizer.java | 4 + .../mod/items/ItemFireworkBoxMinecart.java | 20 +++ .../mod/items/ItemMinecartAA.java | 116 ++++++++++++++++++ .../mod/material/InitArmorMaterials.java | 26 ++-- .../mod/material/InitToolMaterials.java | 26 ++-- .../mod/misc/BannerHelper.java | 2 +- .../mod/tile/TileEntityFireworkBox.java | 31 +++-- .../actuallyadditions/mod/util/Util.java | 22 ++-- .../assets/actuallyadditions/lang/en_US.lang | 1 + .../models/item/itemMinecartFireworkBox.json | 6 + .../items/itemMinecartFireworkBox.png | Bin 0 -> 597 bytes 17 files changed, 337 insertions(+), 49 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMinecartFireworkBox.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 50a0cffab..748dca3df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -18,6 +18,7 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.crafting.CrusherCrafting; import de.ellpeck.actuallyadditions.mod.crafting.InitCrafting; import de.ellpeck.actuallyadditions.mod.crafting.ItemCrafting; +import de.ellpeck.actuallyadditions.mod.entity.InitEntities; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.gen.InitVillager; @@ -78,6 +79,7 @@ public class ActuallyAdditions{ PacketHandler.init(); InitToolMaterials.init(); InitArmorMaterials.init(); + InitEntities.init(); InitBlocks.init(); InitFluids.init(); InitItems.init(); @@ -129,8 +131,6 @@ public class ActuallyAdditions{ @EventHandler public void serverStarting(FMLServerStartingEvent event){ - Util.registerDispenserHandler(InitItems.itemFertilizer, new DispenserHandlerFertilize()); - WorldData.init(event.getServer()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index d0822359b..daef36f91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -154,6 +154,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemBatteryQuadruple); this.add(InitItems.itemBatteryQuintuple); this.add(InitItems.itemTeleStaff); + this.add(InitItems.itemMinecartFireworkBox); this.add(InitItems.itemGrowthRing); this.add(InitItems.itemMagnetRing); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java new file mode 100644 index 000000000..c51543040 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java @@ -0,0 +1,64 @@ +package de.ellpeck.actuallyadditions.mod.entity; + +import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityFireworkBox; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class EntityFireworkBoxMinecart extends EntityRFMinecart{ + + private int cooldownTimer; + private boolean isPowered; + + public EntityFireworkBoxMinecart(World world){ + super(world, 20000, 1000); + } + + @Override + public void onActivatorRailPass(int x, int y, int z, boolean receivingPower){ + if(receivingPower != this.isPowered){ + this.isPowered = receivingPower; + } + } + + @Override + public void onUpdate(){ + super.onUpdate(); + + if(!this.worldObj.isRemote){ + if(this.cooldownTimer > 0 && this.isPowered){ + this.cooldownTimer--; + if(this.cooldownTimer <= 0){ + //TODO Check for power level here + make charging possible + TileEntityFireworkBox.spawnFireworks(this.worldObj, this.posX, this.posY, this.posZ); + this.storage.extractEnergy(TileEntityFireworkBox.USE_PER_SHOT, false); + } + } + else{ + this.cooldownTimer = 100; + } + } + } + + @Override + public IBlockState getDisplayTile(){ + return InitBlocks.blockFireworkBox.getDefaultState(); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound compound){ + super.writeEntityToNBT(compound); + + compound.setInteger("Cooldown", this.cooldownTimer); + compound.setBoolean("Powered", this.isPowered); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound compound){ + super.readEntityFromNBT(compound); + + this.cooldownTimer = compound.getInteger("Cooldown"); + this.isPowered = compound.getBoolean("Powered"); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java new file mode 100644 index 000000000..992f260d1 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java @@ -0,0 +1,36 @@ +package de.ellpeck.actuallyadditions.mod.entity; + +import cofh.api.energy.EnergyStorage; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class EntityRFMinecart extends EntityMinecart{ + + public EnergyStorage storage; + + public EntityRFMinecart(World world, int rfCap, int maxTransfer){ + super(world); + + this.storage = new EnergyStorage(rfCap, maxTransfer); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound compound){ + super.writeEntityToNBT(compound); + + this.storage.writeToNBT(compound); + } + + @Override + protected void readEntityFromNBT(NBTTagCompound compound){ + super.readEntityFromNBT(compound); + + this.storage.readFromNBT(compound); + } + + @Override + public Type getType(){ + return Type.CHEST; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java new file mode 100644 index 000000000..2cd429c80 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java @@ -0,0 +1,18 @@ +package de.ellpeck.actuallyadditions.mod.entity; + +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraftforge.common.util.EnumHelper; +import net.minecraftforge.fml.common.registry.EntityRegistry; + +import java.util.Locale; + +public class InitEntities{ + + public static void init(){ + ModUtil.LOGGER.info("Initializing Entities..."); + + EntityRegistry.registerModEntity(EntityFireworkBoxMinecart.class, ModUtil.MOD_ID+":minecartFireworkBox", 0, ActuallyAdditions.instance, 256, 1, true); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 670798c1c..0cde605b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -12,12 +12,8 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; -import de.ellpeck.actuallyadditions.mod.items.base.ItemHoeAA; -import de.ellpeck.actuallyadditions.mod.items.base.ItemSeed; -import de.ellpeck.actuallyadditions.mod.items.base.ItemSwordAA; +import de.ellpeck.actuallyadditions.mod.items.base.*; import de.ellpeck.actuallyadditions.mod.items.lens.ItemLens; -import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; @@ -210,9 +206,12 @@ public class InitItems{ public static Item itemRarmorModuleReconstructor; + public static Item itemMinecartFireworkBox; + public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemMinecartFireworkBox = new ItemFireworkBoxMinecart("itemMinecartFireworkBox"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); itemCrateKeeper = new ItemGeneric("itemCrateKeeper"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index 15e0f0d0e..4bbfe18c9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -11,6 +11,8 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.misc.DispenserHandlerFertilize; +import net.minecraft.block.BlockDispenser; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemDye; @@ -25,6 +27,8 @@ public class ItemFertilizer extends ItemBase{ public ItemFertilizer(String name){ super(name); + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, new DispenserHandlerFertilize()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java new file mode 100644 index 000000000..d217abf62 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java @@ -0,0 +1,20 @@ +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.entity.EntityFireworkBoxMinecart; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.world.World; + +public class ItemFireworkBoxMinecart extends ItemMinecartAA{ + + public ItemFireworkBoxMinecart(String name){ + super(name); + } + + @Override + public EntityMinecart createCart(World world, double x, double y, double z){ + EntityMinecart entity = new EntityFireworkBoxMinecart(world); + entity.setPosition(x, y, z); + return entity; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java new file mode 100644 index 000000000..096017f9a --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java @@ -0,0 +1,116 @@ +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import net.minecraft.block.BlockDispenser; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBehaviorDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public abstract class ItemMinecartAA extends ItemBase{ + + private static final IBehaviorDispenseItem MINECART_DISPENSER_BEHAVIOR = new BehaviorDefaultDispenseItem(){ + private final BehaviorDefaultDispenseItem behaviourDefaultDispenseItem = new BehaviorDefaultDispenseItem(); + + @Override + public ItemStack dispenseStack(IBlockSource source, ItemStack stack){ + EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); + World world = source.getWorld(); + double d0 = source.getX()+(double)facing.getFrontOffsetX()*1.125D; + double d1 = Math.floor(source.getY())+(double)facing.getFrontOffsetY(); + double d2 = source.getZ()+(double)facing.getFrontOffsetZ()*1.125D; + BlockPos pos = source.getBlockPos().offset(facing); + IBlockState state = world.getBlockState(pos); + BlockRailBase.EnumRailDirection direction = state.getBlock() instanceof BlockRailBase ? state.getValue(((BlockRailBase)state.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + double d3; + + if(BlockRailBase.isRailBlock(state)){ + if(direction.isAscending()){ + d3 = 0.6D; + } + else{ + d3 = 0.1D; + } + } + else{ + if(state.getMaterial() != Material.AIR || !BlockRailBase.isRailBlock(world.getBlockState(pos.down()))){ + return this.behaviourDefaultDispenseItem.dispense(source, stack); + } + + IBlockState state1 = world.getBlockState(pos.down()); + BlockRailBase.EnumRailDirection direction1 = state1.getBlock() instanceof BlockRailBase ? state1.getValue(((BlockRailBase)state1.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + + if(facing != EnumFacing.DOWN && direction1.isAscending()){ + d3 = -0.4D; + } + else{ + d3 = -0.9D; + } + } + + EntityMinecart cart = ((ItemMinecartAA)stack.getItem()).createCart(world, d0, d1+d3, d2); + + if(stack.hasDisplayName()){ + cart.setCustomNameTag(stack.getDisplayName()); + } + + world.spawnEntityInWorld(cart); + stack.splitStack(1); + return stack; + } + + @Override + protected void playDispenseSound(IBlockSource source){ + source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); + } + }; + + public ItemMinecartAA(String name){ + super(name); + this.maxStackSize = 1; + + BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, MINECART_DISPENSER_BEHAVIOR); + } + + public abstract EntityMinecart createCart(World world, double x, double y, double z); + + @Override + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + IBlockState state = worldIn.getBlockState(pos); + + if(!BlockRailBase.isRailBlock(state)){ + return EnumActionResult.FAIL; + } + else{ + if(!worldIn.isRemote){ + BlockRailBase.EnumRailDirection direction = state.getBlock() instanceof BlockRailBase ? state.getValue(((BlockRailBase)state.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; + double d0 = 0.0D; + + if(direction.isAscending()){ + d0 = 0.5D; + } + + EntityMinecart cart = ((ItemMinecartAA)stack.getItem()).createCart(worldIn, (double)pos.getX()+0.5D, (double)pos.getY()+0.0625D+d0, (double)pos.getZ()+0.5D); + + if(stack.hasDisplayName()){ + cart.setCustomNameTag(stack.getDisplayName()); + } + + worldIn.spawnEntityInWorld(cart); + } + + stack.stackSize--; + return EnumActionResult.SUCCESS; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index 90866e5c5..c08369f8c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -11,10 +11,14 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.entity.item.EntityMinecart; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; +import java.util.Locale; + public class InitArmorMaterials{ public static ArmorMaterial armorMaterialEmerald; @@ -31,15 +35,19 @@ public class InitArmorMaterials{ public static void init(){ ModUtil.LOGGER.info("Initializing Armor Materials..."); - armorMaterialEmerald = EnumHelper.addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialObsidian = EnumHelper.addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialQuartz = EnumHelper.addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialEmerald = addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialObsidian = addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialQuartz = addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalRed = EnumHelper.addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalLightBlue = EnumHelper.addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalBlack = EnumHelper.addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalGreen = EnumHelper.addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalWhite = EnumHelper.addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalRed = addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlue = addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalLightBlue = addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlack = addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalGreen = addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalWhite = addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + } + + private static ArmorMaterial addArmorMaterial(String name, String textureName, int durability, int[] reductionAmounts, int enchantability, SoundEvent soundOnEquip){ + return EnumHelper.addArmorMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), textureName, durability, reductionAmounts, enchantability, soundOnEquip); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java index 8df781339..c645223e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java @@ -12,8 +12,12 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.Item.ToolMaterial; +import net.minecraft.item.ItemArmor; +import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; +import java.util.Locale; + public class InitToolMaterials{ public static ToolMaterial toolMaterialEmerald; @@ -30,17 +34,21 @@ public class InitToolMaterials{ public static void init(){ ModUtil.LOGGER.info("Initializing Tool Materials..."); - toolMaterialEmerald = EnumHelper.addToolMaterial("toolMaterialEmerald", 3, 2000, 9.0F, 5.0F, 15); - toolMaterialObsidian = EnumHelper.addToolMaterial("toolMaterialObsidian", 3, 8000, 4.0F, 2.0F, 15); - toolMaterialQuartz = EnumHelper.addToolMaterial("toolMaterialQuartz", 2, 280, 6.5F, 2.0F, 10); + toolMaterialEmerald = addToolMaterial("toolMaterialEmerald", 3, 2000, 9.0F, 5.0F, 15); + toolMaterialObsidian = addToolMaterial("toolMaterialObsidian", 3, 8000, 4.0F, 2.0F, 15); + toolMaterialQuartz = addToolMaterial("toolMaterialQuartz", 2, 280, 6.5F, 2.0F, 10); - toolMaterialCrystalRed = EnumHelper.addToolMaterial("toolMaterialCrystalRed", 2, 300, 7.0F, 2.25F, 12); - toolMaterialCrystalBlue = EnumHelper.addToolMaterial("toolMaterialCrystalBlue", 2, 300, 7.0F, 2.25F, 12); - toolMaterialCrystalLightBlue = EnumHelper.addToolMaterial("toolMaterialCrystalLightBlue", 3, 1600, 9.0F, 4.0F, 14); - toolMaterialCrystalBlack = EnumHelper.addToolMaterial("toolMaterialCrystalBlack", 2, 280, 6.0F, 2.0F, 8); - toolMaterialCrystalGreen = EnumHelper.addToolMaterial("toolMaterialCrystalGreen", 4, 2200, 9.5F, 5.5F, 18); - toolMaterialCrystalWhite = EnumHelper.addToolMaterial("toolMaterialCrystalWhite", 2, 280, 6.25F, 2.5F, 15); + toolMaterialCrystalRed = addToolMaterial("toolMaterialCrystalRed", 2, 300, 7.0F, 2.25F, 12); + toolMaterialCrystalBlue = addToolMaterial("toolMaterialCrystalBlue", 2, 300, 7.0F, 2.25F, 12); + toolMaterialCrystalLightBlue = addToolMaterial("toolMaterialCrystalLightBlue", 3, 1600, 9.0F, 4.0F, 14); + toolMaterialCrystalBlack = addToolMaterial("toolMaterialCrystalBlack", 2, 280, 6.0F, 2.0F, 8); + toolMaterialCrystalGreen = addToolMaterial("toolMaterialCrystalGreen", 4, 2200, 9.5F, 5.5F, 18); + toolMaterialCrystalWhite = addToolMaterial("toolMaterialCrystalWhite", 2, 280, 6.25F, 2.5F, 15); } + private static ToolMaterial addToolMaterial(String name, int harvestLevel, int maxUses, float efficiency, float damage, int enchantability){ + return EnumHelper.addToolMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), harvestLevel, maxUses, efficiency, damage, enchantability); + } + } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java index 43867bb96..20433ae43 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -39,7 +39,7 @@ public class BannerHelper{ public static EnumBannerPattern addCraftingPattern(String name, ItemStack craftingStack){ Class[] paramTypes = {String.class, String.class, ItemStack.class}; Object[] paramValues = {ModUtil.MOD_ID+name, ModUtil.MOD_ID+name, craftingStack}; - return EnumHelper.addEnum(EnumBannerPattern.class, name.toUpperCase(Locale.ROOT), paramTypes, paramValues); + return EnumHelper.addEnum(EnumBannerPattern.class, (ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), paramTypes, paramValues); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index fd3729b9b..313b5355b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -21,6 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -71,26 +72,30 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece private void doWork(){ if(this.storage.getEnergyStored() >= USE_PER_SHOT){ - int range = 4; - int amount = Util.RANDOM.nextInt(5)+1; - for(int i = 0; i < amount; i++){ - ItemStack firework = this.makeFirework(); - - double x = this.pos.getX()+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; - double z = this.pos.getZ()+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; - EntityFireworkRocket rocket = new EntityFireworkRocket(this.worldObj, x, this.pos.getY()+0.5, z, firework); - this.worldObj.spawnEntityInWorld(rocket); - } + spawnFireworks(this.worldObj, this.pos.getX(), this.pos.getY(), this.pos.getZ()); this.storage.extractEnergy(USE_PER_SHOT, false); } } - private ItemStack makeFirework(){ + public static void spawnFireworks(World world, double x, double y, double z){ + int range = 4; + int amount = Util.RANDOM.nextInt(5)+1; + for(int i = 0; i < amount; i++){ + ItemStack firework = makeFirework(); + + double newX = x+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; + double newZ = z+MathHelper.getRandomDoubleInRange(Util.RANDOM, 0, range*2)-range; + EntityFireworkRocket rocket = new EntityFireworkRocket(world, newX, y+0.5, newZ, firework); + world.spawnEntityInWorld(rocket); + } + } + + private static ItemStack makeFirework(){ NBTTagList list = new NBTTagList(); int chargesAmount = Util.RANDOM.nextInt(2)+1; for(int i = 0; i < chargesAmount; i++){ - list.appendTag(this.makeFireworkCharge()); + list.appendTag(makeFireworkCharge()); } NBTTagCompound compound1 = new NBTTagCompound(); @@ -106,7 +111,7 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece return firework; } - private NBTTagCompound makeFireworkCharge(){ + private static NBTTagCompound makeFireworkCharge(){ NBTTagCompound compound = new NBTTagCompound(); if(Util.RANDOM.nextFloat() >= 0.65F){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 612fd438b..da45f63bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.util; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.enchantment.Enchantment; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.util.text.TextFormatting; @@ -20,6 +21,7 @@ import net.minecraftforge.common.util.EnumHelper; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.oredict.OreDictionary; +import java.util.Locale; import java.util.Random; @SuppressWarnings("unused") @@ -29,12 +31,12 @@ public class Util{ public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; public static final int BUCKET = FluidContainerRegistry.BUCKET_VOLUME; - public static final EnumRarity CRYSTAL_RED_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); - public static final EnumRarity CRYSTAL_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); - public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); - public static final EnumRarity CRYSTAL_BLACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); - public static final EnumRarity CRYSTAL_GREEN_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); - public static final EnumRarity CRYSTAL_WHITE_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); + public static final EnumRarity CRYSTAL_RED_RARITY = addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); + public static final EnumRarity CRYSTAL_BLUE_RARITY = addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); + public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = addRarity(ModUtil.MOD_ID+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); + public static final EnumRarity CRYSTAL_BLACK_RARITY = addRarity(ModUtil.MOD_ID+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); + public static final EnumRarity CRYSTAL_GREEN_RARITY = addRarity(ModUtil.MOD_ID+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); + public static final EnumRarity CRYSTAL_WHITE_RARITY = addRarity(ModUtil.MOD_ID+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); public static final EnumRarity FALLBACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+".fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); @@ -42,12 +44,12 @@ public class Util{ MinecraftForge.EVENT_BUS.register(o); } - public static boolean isDevVersion(){ - return ModUtil.VERSION.equals("@VERSION@"); + private static EnumRarity addRarity(String name, TextFormatting color, String displayName){ + return EnumHelper.addRarity((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), color, displayName); } - public static void registerDispenserHandler(Item item, BehaviorDefaultDispenseItem handler){ - BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(item, handler); + public static boolean isDevVersion(){ + return ModUtil.VERSION.equals("@VERSION@"); } public static int arrayContains(Object[] array, Object obj){ diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index efcd4cd01..05116f591 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -484,6 +484,7 @@ item.actuallyadditions.itemFoodBacon.name=Bacon item.actuallyadditions.itemMiscEnderStar.name=Ender Star item.actuallyadditions.itemSpawnerChanger.name=Spawner Changer item.actuallyadditions.itemMiscSpawnerShard.name=Spawner Shards +item.actuallyadditions.itemMinecartFireworkBox.name=Firework Box Cart #Tooltips tooltip.actuallyadditions.onSuffix.desc=On diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json b/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json new file mode 100644 index 000000000..1b49d9e00 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemMinecartFireworkBox" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMinecartFireworkBox.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMinecartFireworkBox.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0e4c10800d545a6c418d2dce15fe779798c481 GIT binary patch literal 597 zcmV-b0;>IqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^RY2^tI) z1s(;PBme*a7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M_vq?ljR5(v{ zl1obhQ5c3*1Swpa5>&X;amJ({5O^=GUl38*lzEAQAX-!)Sc_V8fff-J2|*NOw{6gc z+A7iQ=e(Wo)EQ?+JMeOb&+mD@a}HVn{F|+v4TzY36S1T!ds_5sCK*I7Az>maVWi)O z%c~34-C~)+2&gwsBs?(Y1t?ck5RAJ z@bGw#=|liyVLunp32ZhS|9-30Fgv7REat=F(tJZgaEIHCOiV_W*{^S_$fZNbv(Qw^ z>dG=Q5eeJ7o0yCRkV`2bMiawJ9&m_DLzZ(RtB++=hB}{#7ZS5R32q=093Ct5I1XG`23<8Rfh!dD6nxp*} j^aX;tx_eqqGzOL*E`avZBbpp{00000NkvXXu0mjf_`mg% literal 0 HcmV?d00001 From 0454fc521bbfd74f16a9baa3bf42018a0683a306 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 17:56:17 +0200 Subject: [PATCH 153/322] Made drop chances for wings, solid xp and cobweb more common Closes #94 --- .../actuallyadditions/mod/event/LivingDropEvent.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java index 092caf2c1..99544819f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java @@ -30,21 +30,21 @@ public class LivingDropEvent{ if(event.getSource().getEntity() instanceof EntityPlayer){ //Drop Solidified XP if(event.getEntityLiving() instanceof EntityCreature){ - if(Util.RANDOM.nextInt(15) <= 0){ + if(Util.RANDOM.nextInt(10) <= 0){ event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2)+1), 0); } } //Drop Cobwebs from Spiders if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.getEntityLiving() instanceof EntitySpider){ - if(Util.RANDOM.nextInt(80) <= 0){ + if(Util.RANDOM.nextInt(20) <= 0){ event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2)+1), 0); } } //Drop Wings from Bats if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat){ - if(Util.RANDOM.nextInt(30) <= 0){ + if(Util.RANDOM.nextInt(15) <= 0){ event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2)+1, TheMiscItems.BAT_WING.ordinal()), 0); } } From 7aa813f04e4d74a02cf7ecc5996ffd6f17f227b4 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 21:10:35 +0200 Subject: [PATCH 154/322] Made special drops dependent on the looting level you have --- .../actuallyadditions/mod/event/LivingDropEvent.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java index 99544819f..fa9e4b1e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java @@ -30,22 +30,22 @@ public class LivingDropEvent{ if(event.getSource().getEntity() instanceof EntityPlayer){ //Drop Solidified XP if(event.getEntityLiving() instanceof EntityCreature){ - if(Util.RANDOM.nextInt(10) <= 0){ - event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2)+1), 0); + if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); } } //Drop Cobwebs from Spiders if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.getEntityLiving() instanceof EntitySpider){ - if(Util.RANDOM.nextInt(20) <= 0){ - event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2)+1), 0); + if(Util.RANDOM.nextInt(20) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); } } //Drop Wings from Bats if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat){ - if(Util.RANDOM.nextInt(15) <= 0){ - event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2)+1, TheMiscItems.BAT_WING.ordinal()), 0); + if(Util.RANDOM.nextInt(15) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2+event.getLootingLevel())+1, TheMiscItems.BAT_WING.ordinal()), 0); } } } From a21981bf01039297d13752bf74b428a778f83c83 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 21:54:22 +0200 Subject: [PATCH 155/322] Minecart Rarity --- .../ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java index 096017f9a..bd23205d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java @@ -10,6 +10,7 @@ import net.minecraft.dispenser.IBehaviorDispenseItem; import net.minecraft.dispenser.IBlockSource; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; @@ -82,6 +83,11 @@ public abstract class ItemMinecartAA extends ItemBase{ BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, MINECART_DISPENSER_BEHAVIOR); } + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.UNCOMMON; + } + public abstract EntityMinecart createCart(World world, double x, double y, double z); @Override From f522b7609371244c7b4aa1baeb1886d771765823 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 22:36:28 +0200 Subject: [PATCH 156/322] Fix license capitalization and made info on locations clearer --- LICENSE.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 399f876a1..c3f049ec9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -4,27 +4,27 @@ The things listed below are special cases and exceptions from the above. They ha Everything that is not listed below applies to the above. ### YOU MAY -* Fork and modify the Code -* Submit Pull Requests -* Copy (SMALL!) Parts of the Code for other Projects -* Make a Review/Spotlight of the Mod or use it in a Modpack -* Make Let's Play (and similar) Videos containing the Mod +* Fork and modify the code. +* Submit pull requests. +* Copy (SMALL!) parts of the code for other projects. +* Make a review/spotlight of the mod or use it in a modpack. +* Make Let's Play (and similar) videos containing the mod. ### YOU CAN NOT -* Copy the entire Code or claim it is yours. -* Reupload the Code or Mod to another website or claim you made it. -* Copy entire Classes, Methods or other big Parts of Code. +* Copy the entire code or claim it is yours. +* Reupload the code or mod to another website or claim you made it. +* Copy entire classes, methods or other big parts of code. ### YOU HAVE TO * Always credit me. Don't be a jerk and copy entire portions of the code and claim they're yours. -* When it comes to the code, always link back to this Repository. -* When it comes to the Mod, always link back to the the Forum Thread linked above. +* When it comes to the code, always link back to the official repository. +* When it comes to the Mod, always link back to the the official Minecraft Forum thread or CurseForge page. ### NOTES * The Actually Additions API can be excerpted for use in other projects, however it should not be modified. It can be redistributed with other mods (if it is getting used), however it should still be visible that it is a part of Actually Additions. Do not remove the copyright header from any of the API's files. -* The above License only applies for Code I wrote myself, any APIs used (such as the CoFH API) have their own License that is being respected. -* There are some excerpts from other code used (such as the OpenBlocks XP System). Credit to the creators of these parts is always given and their Permission is granted or their License is respected. -* Almost all of the Assets used in this Mod are made by Glenthor and are owned by me. You are not allowed to copy them for any other Project. -* Parts of this License, especially restrictive ones, can be ignored with Personal Permission. Said Permission, however, will only be given to people I know or someone who has a very good reason for needing it. If you don't, don't ask. +* The above License only applies for code I wrote myself, any APIs used (such as the CoFH API) have their own License that is being respected. +* There are some excerpts from other code used (such as the OpenBlocks XP system). Credit to the creators of these parts is always given and their permission is granted or their license is respected. +* Almost all of the assets used in this mod are made by Glenthor and are owned by me. You are not allowed to copy them for any other project. +* Parts of this license, especially restrictive ones, can be ignored with personal permission. Said permission, however, will only be given to people I know or someone who has a very good reason for needing it. If you don't, don't ask. © 2015-2016 Ellpeck \ No newline at end of file From 6c1f8fec6ca3c513b9200167c7fbd15f87cb6398 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 22:52:27 +0200 Subject: [PATCH 157/322] Update copyright and cleanup code --- .../api/ActuallyAdditionsAPI.java | 6 +- .../api/booklet/BookletPage.java | 6 +- .../api/booklet/IBookletChapter.java | 6 +- .../api/booklet/IBookletEntry.java | 6 +- .../api/internal/IAtomicReconstructor.java | 6 +- .../api/internal/IBookletGui.java | 6 +- .../api/internal/IEntrySet.java | 10 +++ .../api/internal/IMethodHandler.java | 10 +++ .../actuallyadditions/api/lens/ILensItem.java | 6 +- .../actuallyadditions/api/lens/Lens.java | 6 +- .../api/lens/LensConversion.java | 6 +- .../actuallyadditions/api/package-info.java | 6 +- .../api/recipe/BallOfFurReturn.java | 6 +- .../api/recipe/CoffeeIngredient.java | 6 +- .../api/recipe/ColorLensChangerByDyeMeta.java | 10 +++ .../api/recipe/CrusherRecipe.java | 6 +- .../api/recipe/IColorLensChanger.java | 10 +++ .../api/recipe/LensConversionRecipe.java | 6 +- .../api/recipe/TreasureChestLoot.java | 6 +- .../api/tile/IPhantomTile.java | 6 +- .../mod/ActuallyAdditions.java | 6 +- .../mod/achievement/InitAchievements.java | 6 +- .../mod/achievement/TheAchievements.java | 6 +- .../mod/blocks/BlockAtomicReconstructor.java | 6 +- .../mod/blocks/BlockBlackLotus.java | 6 +- .../mod/blocks/BlockBreaker.java | 6 +- .../mod/blocks/BlockCanolaPress.java | 6 +- .../mod/blocks/BlockCoalGenerator.java | 6 +- .../mod/blocks/BlockCoffeeMachine.java | 6 +- .../mod/blocks/BlockColoredLamp.java | 6 +- .../mod/blocks/BlockCompost.java | 6 +- .../mod/blocks/BlockCrystal.java | 6 +- .../mod/blocks/BlockDirectionalBreaker.java | 6 +- .../mod/blocks/BlockDropper.java | 6 +- .../mod/blocks/BlockEnergizer.java | 6 +- .../mod/blocks/BlockFeeder.java | 6 +- .../mod/blocks/BlockFermentingBarrel.java | 6 +- .../mod/blocks/BlockFireworkBox.java | 6 +- .../mod/blocks/BlockFishingNet.java | 6 +- .../mod/blocks/BlockFluidCollector.java | 6 +- .../mod/blocks/BlockFurnaceDouble.java | 6 +- .../mod/blocks/BlockFurnaceSolar.java | 6 +- .../mod/blocks/BlockGeneric.java | 6 +- .../mod/blocks/BlockGiantChest.java | 6 +- .../mod/blocks/BlockGreenhouseGlass.java | 6 +- .../mod/blocks/BlockGrinder.java | 6 +- .../mod/blocks/BlockHeatCollector.java | 6 +- .../mod/blocks/BlockInputter.java | 6 +- .../mod/blocks/BlockItemRepairer.java | 6 +- .../mod/blocks/BlockItemViewer.java | 10 +++ .../mod/blocks/BlockLampPowerer.java | 8 +-- .../mod/blocks/BlockLaserRelay.java | 6 +- .../blocks/BlockLavaFactoryController.java | 6 +- .../mod/blocks/BlockLeafGenerator.java | 6 +- .../mod/blocks/BlockMiner.java | 6 +- .../mod/blocks/BlockMisc.java | 6 +- .../mod/blocks/BlockOilGenerator.java | 6 +- .../mod/blocks/BlockPhantom.java | 6 +- .../mod/blocks/BlockPhantomBooster.java | 6 +- .../mod/blocks/BlockRangedCollector.java | 6 +- .../mod/blocks/BlockSlabs.java | 6 +- .../mod/blocks/BlockSmileyCloud.java | 6 +- .../mod/blocks/BlockTreasureChest.java | 6 +- .../mod/blocks/BlockWallAA.java | 6 +- .../mod/blocks/BlockWildPlant.java | 6 +- .../mod/blocks/BlockXPSolidifier.java | 6 +- .../mod/blocks/IHudDisplay.java | 6 +- .../mod/blocks/InitBlocks.java | 6 +- .../mod/blocks/base/BlockBase.java | 6 +- .../mod/blocks/base/BlockBushBase.java | 6 +- .../mod/blocks/base/BlockContainerBase.java | 6 +- .../mod/blocks/base/BlockFluidFlowing.java | 6 +- .../mod/blocks/base/BlockPlant.java | 6 +- .../mod/blocks/base/BlockStair.java | 6 +- .../mod/blocks/base/ItemBlockBase.java | 6 +- .../metalists/TheColoredLampColors.java | 18 +++-- .../mod/blocks/metalists/TheMiscBlocks.java | 6 +- .../mod/blocks/metalists/TheWildPlants.java | 6 +- .../mod/blocks/render/RenderCompost.java | 6 +- .../render/RenderReconstructorLens.java | 6 +- .../mod/blocks/render/RenderSmileyCloud.java | 6 +- .../mod/booklet/BookletUtils.java | 6 +- .../mod/booklet/GuiAAAchievements.java | 6 +- .../mod/booklet/GuiBooklet.java | 6 +- .../mod/booklet/InitBooklet.java | 6 +- .../mod/booklet/button/BookmarkButton.java | 6 +- .../mod/booklet/button/IndexButton.java | 6 +- .../mod/booklet/button/TexturedButton.java | 6 +- .../mod/booklet/chapter/BookletChapter.java | 6 +- .../booklet/chapter/BookletChapterCoffee.java | 6 +- .../chapter/BookletChapterCrusher.java | 6 +- .../mod/booklet/entry/BookletEntry.java | 6 +- .../booklet/entry/BookletEntryAllSearch.java | 6 +- .../mod/booklet/entry/EntrySet.java | 6 +- .../mod/booklet/page/BookletPageAA.java | 6 +- .../mod/booklet/page/PageCoffeeRecipe.java | 6 +- .../mod/booklet/page/PageCrafting.java | 6 +- .../mod/booklet/page/PageCrusherRecipe.java | 6 +- .../mod/booklet/page/PageFurnace.java | 6 +- .../mod/booklet/page/PagePicture.java | 6 +- .../mod/booklet/page/PageReconstructor.java | 6 +- .../mod/booklet/page/PageTextOnly.java | 6 +- .../mod/config/ConfigCategories.java | 6 +- .../mod/config/ConfigValues.java | 6 +- .../mod/config/ConfigurationHandler.java | 6 +- .../mod/config/GuiConfiguration.java | 6 +- .../mod/config/GuiFactory.java | 6 +- .../mod/config/values/ConfigBoolValues.java | 6 +- .../mod/config/values/ConfigCrafting.java | 6 +- .../mod/config/values/ConfigIntValues.java | 6 +- .../mod/crafting/BlockCrafting.java | 6 +- .../mod/crafting/CrusherCrafting.java | 6 +- .../mod/crafting/FoodCrafting.java | 6 +- .../mod/crafting/InitCrafting.java | 6 +- .../mod/crafting/ItemCrafting.java | 6 +- .../mod/crafting/MiscCrafting.java | 6 +- .../mod/crafting/ToolCrafting.java | 6 +- .../mod/creative/CreativeTab.java | 6 +- .../mod/entity/EntityFireworkBoxMinecart.java | 10 +++ .../mod/entity/EntityRFMinecart.java | 10 +++ .../mod/entity/InitEntities.java | 10 +++ .../mod/event/BreakEvent.java | 10 +++ .../mod/event/EntityLivingEvent.java | 6 +- .../actuallyadditions/mod/event/HudEvent.java | 6 +- .../mod/event/InitEvents.java | 6 +- .../mod/event/LivingDropEvent.java | 6 +- .../mod/event/LogoutEvent.java | 6 +- .../mod/event/PlayerObtainEvents.java | 6 +- .../mod/event/TooltipEvent.java | 6 +- .../mod/event/WorldDecorationEvent.java | 6 +- .../mod/event/WorldLoadingEvents.java | 6 +- .../actuallyadditions/mod/fluids/FluidAA.java | 6 +- .../mod/fluids/InitFluids.java | 6 +- .../mod/gen/InitVillager.java | 6 +- .../mod/gen/JamVillagerTradeHandler.java | 6 +- .../actuallyadditions/mod/gen/OreGen.java | 6 +- .../gen/VillageComponentCustomCropField.java | 6 +- .../mod/gen/VillageComponentJamHouse.java | 6 +- .../gen/VillageCustomCropFieldHandler.java | 6 +- .../mod/gen/VillageJamHouseHandler.java | 6 +- .../mod/inventory/ContainerBreaker.java | 6 +- .../mod/inventory/ContainerCanolaPress.java | 6 +- .../mod/inventory/ContainerCoalGenerator.java | 6 +- .../mod/inventory/ContainerCoffeeMachine.java | 6 +- .../mod/inventory/ContainerCrafter.java | 6 +- .../ContainerDirectionalBreaker.java | 6 +- .../mod/inventory/ContainerDrill.java | 6 +- .../mod/inventory/ContainerDropper.java | 6 +- .../mod/inventory/ContainerEnergizer.java | 6 +- .../mod/inventory/ContainerEnervator.java | 6 +- .../mod/inventory/ContainerFeeder.java | 6 +- .../inventory/ContainerFermentingBarrel.java | 6 +- .../inventory/ContainerFluidCollector.java | 6 +- .../mod/inventory/ContainerFurnaceDouble.java | 6 +- .../mod/inventory/ContainerGiantChest.java | 6 +- .../mod/inventory/ContainerGrinder.java | 6 +- .../mod/inventory/ContainerInputter.java | 6 +- .../ContainerLaserRelayItemWhitelist.java | 6 +- .../mod/inventory/ContainerMiner.java | 6 +- .../mod/inventory/ContainerOilGenerator.java | 6 +- .../mod/inventory/ContainerPhantomPlacer.java | 6 +- .../inventory/ContainerRangedCollector.java | 6 +- .../mod/inventory/ContainerRepairer.java | 6 +- .../mod/inventory/ContainerSmileyCloud.java | 6 +- .../mod/inventory/ContainerXPSolidifier.java | 6 +- .../mod/inventory/GuiHandler.java | 6 +- .../mod/inventory/gui/GuiBreaker.java | 6 +- .../mod/inventory/gui/GuiCanolaPress.java | 6 +- .../mod/inventory/gui/GuiCoalGenerator.java | 6 +- .../mod/inventory/gui/GuiCoffeeMachine.java | 6 +- .../mod/inventory/gui/GuiCrafter.java | 6 +- .../inventory/gui/GuiDirectionalBreaker.java | 6 +- .../mod/inventory/gui/GuiDrill.java | 6 +- .../mod/inventory/gui/GuiDropper.java | 6 +- .../mod/inventory/gui/GuiEnergizer.java | 6 +- .../mod/inventory/gui/GuiEnervator.java | 6 +- .../mod/inventory/gui/GuiFeeder.java | 6 +- .../inventory/gui/GuiFermentingBarrel.java | 6 +- .../mod/inventory/gui/GuiFluidCollector.java | 6 +- .../mod/inventory/gui/GuiFurnaceDouble.java | 6 +- .../mod/inventory/gui/GuiGiantChest.java | 6 +- .../mod/inventory/gui/GuiGrinder.java | 6 +- .../mod/inventory/gui/GuiInputter.java | 6 +- .../gui/GuiLaserRelayItemWhitelist.java | 6 +- .../mod/inventory/gui/GuiMiner.java | 6 +- .../mod/inventory/gui/GuiOilGenerator.java | 6 +- .../mod/inventory/gui/GuiPhantomPlacer.java | 6 +- .../mod/inventory/gui/GuiRangedCollector.java | 6 +- .../mod/inventory/gui/GuiRepairer.java | 6 +- .../mod/inventory/gui/GuiSmileyCloud.java | 6 +- .../mod/inventory/gui/GuiXPSolidifier.java | 6 +- .../mod/inventory/slot/SlotFilter.java | 6 +- .../mod/inventory/slot/SlotImmovable.java | 6 +- .../mod/inventory/slot/SlotOutput.java | 6 +- .../mod/items/InitForeignPaxels.java | 6 +- .../mod/items/InitItems.java | 6 +- .../mod/items/ItemAllToolAA.java | 6 +- .../mod/items/ItemAxeAA.java | 6 +- .../mod/items/ItemBattery.java | 6 +- .../mod/items/ItemBooklet.java | 54 +++++++-------- .../mod/items/ItemChestToCrateUpgrade.java | 6 +- .../mod/items/ItemCoffee.java | 6 +- .../mod/items/ItemCoffeeBean.java | 6 +- .../mod/items/ItemCrafterOnAStick.java | 6 +- .../mod/items/ItemCrystal.java | 6 +- .../mod/items/ItemDrill.java | 6 +- .../mod/items/ItemDrillUpgrade.java | 6 +- .../actuallyadditions/mod/items/ItemDust.java | 6 +- .../mod/items/ItemFertilizer.java | 6 +- .../mod/items/ItemFireworkBoxMinecart.java | 10 +++ .../mod/items/ItemFoods.java | 6 +- .../mod/items/ItemGeneric.java | 6 +- .../mod/items/ItemGrowthRing.java | 6 +- .../mod/items/ItemHairyBall.java | 6 +- .../actuallyadditions/mod/items/ItemJams.java | 6 +- .../mod/items/ItemKnife.java | 6 +- .../mod/items/ItemLaserWrench.java | 28 ++++---- .../mod/items/ItemLeafBlower.java | 6 +- .../mod/items/ItemMagnetRing.java | 6 +- .../mod/items/ItemMinecartAA.java | 10 +++ .../actuallyadditions/mod/items/ItemMisc.java | 6 +- .../mod/items/ItemPhantomConnector.java | 6 +- .../mod/items/ItemPickaxeAA.java | 6 +- .../mod/items/ItemPotionRing.java | 6 +- .../items/ItemRarmorModuleReconstructor.java | 10 +++ .../mod/items/ItemResonantRice.java | 6 +- .../mod/items/ItemShovelAA.java | 6 +- .../mod/items/ItemSolidifiedExperience.java | 6 +- .../mod/items/ItemSpawnerChanger.java | 10 +++ .../mod/items/ItemTeleStaff.java | 6 +- .../mod/items/ItemWaterRemovalRing.java | 6 +- .../mod/items/ItemWingsOfTheBats.java | 6 +- .../mod/items/base/ItemArmorAA.java | 6 +- .../mod/items/base/ItemBase.java | 6 +- .../mod/items/base/ItemEnergy.java | 6 +- .../mod/items/base/ItemFoodBase.java | 6 +- .../mod/items/base/ItemHoeAA.java | 6 +- .../mod/items/base/ItemSeed.java | 6 +- .../mod/items/base/ItemSwordAA.java | 6 +- .../mod/items/base/ItemToolAA.java | 10 +++ .../mod/items/lens/ItemLens.java | 6 +- .../mod/items/lens/LensColor.java | 6 +- .../mod/items/lens/LensDeath.java | 6 +- .../mod/items/lens/LensDetonation.java | 6 +- .../mod/items/lens/LensDisruption.java | 10 +++ .../mod/items/lens/LensRecipeHandler.java | 6 +- .../mod/items/lens/Lenses.java | 6 +- .../mod/items/metalists/TheCrystals.java | 6 +- .../mod/items/metalists/TheDusts.java | 6 +- .../mod/items/metalists/TheFoods.java | 6 +- .../mod/items/metalists/TheJams.java | 6 +- .../mod/items/metalists/TheMiscItems.java | 6 +- .../mod/items/metalists/ThePotionRings.java | 6 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 12 ++-- .../mod/jei/RecipeWrapperWithButton.java | 6 +- .../jei/booklet/BookletRecipeCategory.java | 10 +-- .../mod/jei/booklet/BookletRecipeHandler.java | 6 +- .../mod/jei/booklet/BookletRecipeWrapper.java | 6 +- .../coffee/CoffeeMachineRecipeCategory.java | 10 +-- .../coffee/CoffeeMachineRecipeHandler.java | 6 +- .../coffee/CoffeeMachineRecipeWrapper.java | 6 +- .../jei/crusher/CrusherRecipeCategory.java | 10 +-- .../mod/jei/crusher/CrusherRecipeHandler.java | 6 +- .../mod/jei/crusher/CrusherRecipeWrapper.java | 6 +- .../ReconstructorRecipeCategory.java | 10 +-- .../ReconstructorRecipeHandler.java | 6 +- .../ReconstructorRecipeWrapper.java | 6 +- .../mod/material/InitArmorMaterials.java | 6 +- .../mod/material/InitToolMaterials.java | 6 +- .../mod/misc/BannerHelper.java | 10 +++ .../mod/misc/DamageSources.java | 6 +- .../mod/misc/DispenserHandlerFertilize.java | 6 +- .../mod/misc/DungeonLoot.java | 6 +- .../mod/misc/EntityColoredParticleFX.java | 6 +- .../mod/misc/LaserRelayConnectionHandler.java | 8 +-- .../mod/misc/MethodHandler.java | 10 +++ .../mod/misc/SoundHandler.java | 10 +++ .../actuallyadditions/mod/misc/WorldData.java | 6 +- .../mod/misc/cloud/ISmileyCloudEasterEgg.java | 6 +- .../mod/misc/cloud/SmileyCloudEasterEggs.java | 6 +- .../mod/misc/special/RenderSpecial.java | 6 +- .../mod/misc/special/SpecialRenderInit.java | 8 +-- .../misc/special/ThreadSpecialFetcher.java | 6 +- .../mod/nei/INEIRecipeHandler.java | 6 +- .../mod/nei/NEIActuallyAdditionsConfig.java | 6 +- .../mod/nei/NEIBookletRecipe.java | 6 +- .../mod/nei/NEICoffeeMachineRecipe.java | 6 +- .../mod/nei/NEICompostRecipe.java | 6 +- .../mod/nei/NEICrusherRecipe.java | 6 +- .../mod/nei/NEIFurnaceDoubleRecipe.java | 6 +- .../mod/nei/NEIHairyBallRecipe.java | 6 +- .../mod/nei/NEIReconstructorRecipe.java | 6 +- .../mod/nei/NEIScreenEvents.java | 6 +- .../mod/nei/NEITreasureChestRecipe.java | 6 +- .../mod/network/PacketHandler.java | 6 +- .../mod/network/PacketParticle.java | 6 +- .../mod/network/PacketUpdateTileEntity.java | 6 +- .../mod/network/gui/IButtonReactor.java | 6 +- .../mod/network/gui/INumberReactor.java | 6 +- .../mod/network/gui/IStringReactor.java | 6 +- .../mod/network/gui/PacketGuiButton.java | 6 +- .../mod/network/gui/PacketGuiNumber.java | 6 +- .../mod/network/gui/PacketGuiString.java | 6 +- .../mod/ore/InitOreDict.java | 6 +- .../mod/proxy/ClientProxy.java | 6 +- .../actuallyadditions/mod/proxy/IProxy.java | 6 +- .../mod/proxy/ServerProxy.java | 6 +- .../mod/recipe/CrusherRecipeRegistry.java | 6 +- .../mod/recipe/FuelHandler.java | 6 +- .../mod/recipe/HairyBallHandler.java | 6 +- .../mod/recipe/TreasureChestHandler.java | 6 +- .../mod/tile/IEnergyDisplay.java | 6 +- .../mod/tile/IEnergySaver.java | 6 +- .../mod/tile/IFluidSaver.java | 6 +- .../mod/tile/IRedstoneToggle.java | 6 +- .../tile/TileEntityAtomicReconstructor.java | 6 +- .../mod/tile/TileEntityBase.java | 6 +- .../mod/tile/TileEntityBreaker.java | 44 ++++++------- .../mod/tile/TileEntityCanolaPress.java | 6 +- .../mod/tile/TileEntityCoalGenerator.java | 6 +- .../mod/tile/TileEntityCoffeeMachine.java | 6 +- .../mod/tile/TileEntityCompost.java | 6 +- .../tile/TileEntityDirectionalBreaker.java | 32 +++++---- .../mod/tile/TileEntityDropper.java | 6 +- .../mod/tile/TileEntityEnergizer.java | 6 +- .../mod/tile/TileEntityEnervator.java | 6 +- .../mod/tile/TileEntityFeeder.java | 6 +- .../mod/tile/TileEntityFermentingBarrel.java | 6 +- .../mod/tile/TileEntityFireworkBox.java | 6 +- .../mod/tile/TileEntityFishingNet.java | 6 +- .../mod/tile/TileEntityFluidCollector.java | 66 +++++++++---------- .../mod/tile/TileEntityFluidPlacer.java | 10 +++ .../mod/tile/TileEntityFurnaceDouble.java | 6 +- .../mod/tile/TileEntityFurnaceSolar.java | 6 +- .../mod/tile/TileEntityGiantChest.java | 6 +- .../mod/tile/TileEntityGreenhouseGlass.java | 10 +-- .../mod/tile/TileEntityGrinder.java | 6 +- .../mod/tile/TileEntityGrinderDouble.java | 10 +++ .../mod/tile/TileEntityHeatCollector.java | 6 +- .../mod/tile/TileEntityInputter.java | 6 +- .../mod/tile/TileEntityInputterAdvanced.java | 10 +++ .../mod/tile/TileEntityInventoryBase.java | 6 +- .../mod/tile/TileEntityItemRepairer.java | 6 +- .../mod/tile/TileEntityItemViewer.java | 57 +++++++++------- .../mod/tile/TileEntityLaserRelay.java | 6 +- .../mod/tile/TileEntityLaserRelayEnergy.java | 10 +++ .../mod/tile/TileEntityLaserRelayItem.java | 10 +++ .../TileEntityLaserRelayItemWhitelist.java | 10 +++ .../tile/TileEntityLavaFactoryController.java | 6 +- .../mod/tile/TileEntityLeafGenerator.java | 6 +- .../mod/tile/TileEntityMiner.java | 6 +- .../mod/tile/TileEntityOilGenerator.java | 6 +- .../mod/tile/TileEntityPhantomBooster.java | 6 +- .../mod/tile/TileEntityPhantomBreaker.java | 10 +++ .../mod/tile/TileEntityPhantomEnergyface.java | 6 +- .../mod/tile/TileEntityPhantomItemface.java | 6 +- .../mod/tile/TileEntityPhantomLiquiface.java | 6 +- .../mod/tile/TileEntityPhantomPlacer.java | 6 +- .../tile/TileEntityPhantomRedstoneface.java | 10 +++ .../mod/tile/TileEntityPhantomface.java | 6 +- .../mod/tile/TileEntityPlacer.java | 10 +++ .../mod/tile/TileEntityRangedCollector.java | 6 +- .../mod/tile/TileEntitySmileyCloud.java | 6 +- .../mod/tile/TileEntityXPSolidifier.java | 6 +- .../mod/update/ThreadUpdateChecker.java | 6 +- .../mod/update/UpdateChecker.java | 8 +-- .../UpdateCheckerClientNotificationEvent.java | 6 +- .../actuallyadditions/mod/util/AssetUtil.java | 6 +- .../mod/util/CompatUtil.java | 6 +- .../mod/util/FakePlayerUtil.java | 6 +- .../mod/util/FluidStateMapper.java | 6 +- .../mod/util/IColorProvidingItem.java | 10 +++ .../actuallyadditions/mod/util/ItemUtil.java | 6 +- .../actuallyadditions/mod/util/ModUtil.java | 6 +- .../actuallyadditions/mod/util/PosUtil.java | 6 +- .../mod/util/RecipeUtil.java | 6 +- .../mod/util/StringUtil.java | 6 +- .../actuallyadditions/mod/util/Util.java | 6 +- .../actuallyadditions/mod/util/WorldUtil.java | 25 +++---- .../util/playerdata/PersistentClientData.java | 22 +++---- .../util/playerdata/PersistentServerData.java | 6 +- 381 files changed, 1502 insertions(+), 1222 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 4c63a1542..b1121ac86 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -1,11 +1,11 @@ /* - * This file ("ActuallyAdditionsAPI.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ActuallyAdditionsAPI.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java index e22994256..8f6bfb708 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java @@ -1,11 +1,11 @@ /* - * This file ("IBookletPage.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletPage.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java index 85900c627..9730575a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java @@ -1,11 +1,11 @@ /* - * This file ("IBookletChapter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IBookletChapter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java index c053dfa1f..50394efbb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java @@ -1,11 +1,11 @@ /* - * This file ("IBookletEntry.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IBookletEntry.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java index 32f4a7fe3..1f72b5536 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java @@ -1,11 +1,11 @@ /* - * This file ("IAtomicReconstructor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IAtomicReconstructor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.internal; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java index 65f381e6d..5aa51bf4e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java @@ -1,11 +1,11 @@ /* - * This file ("IBookletGui.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IBookletGui.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.internal; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java index 90e493e9f..cc924adf4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java @@ -1,3 +1,13 @@ +/* + * This file ("IEntrySet.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.api.internal; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java index e2406dbf3..d52887aca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java @@ -1,3 +1,13 @@ +/* + * This file ("IMethodHandler.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.api.internal; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java index e1faa032f..bfc67122e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java @@ -1,11 +1,11 @@ /* - * This file ("ILensItem.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ILensItem.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java index ba920d659..64bb1941c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java @@ -1,11 +1,11 @@ /* - * This file ("Lens.java") is part of the Actually Additions Mod for Minecraft. + * This file ("Lens.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java index 6122acf12..7bf050b63 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java @@ -1,11 +1,11 @@ /* - * This file ("LensNone.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LensConversion.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java b/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java index f2612d9f4..73e5863c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java @@ -1,11 +1,11 @@ /* - * This file ("package-info.java") is part of the Actually Additions Mod for Minecraft. + * This file ("package-info.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ @API(owner = ActuallyAdditionsAPI.MOD_ID, apiVersion = ActuallyAdditionsAPI.API_VERSION, provides = ActuallyAdditionsAPI.API_ID) package de.ellpeck.actuallyadditions.api; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java index 845a3e17b..295076b34 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java @@ -1,11 +1,11 @@ /* - * This file ("BallOfFurReturn.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BallOfFurReturn.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java index d45d66120..025cab8c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java @@ -1,11 +1,11 @@ /* - * This file ("CoffeeIngredient.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CoffeeIngredient.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java index 02831cfdb..6d9935f72 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java @@ -1,3 +1,13 @@ +/* + * This file ("ColorLensChangerByDyeMeta.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.api.recipe; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java index 7a6c04d8b..94dec798e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("CrusherRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CrusherRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java index e30de60e2..873f119cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java @@ -1,3 +1,13 @@ +/* + * This file ("IColorLensChanger.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.api.recipe; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java index 42b4e9657..efcf2e8aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("LensNoneRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LensConversionRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java index 7c02f8855..7ee6d3aea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java @@ -1,11 +1,11 @@ /* - * This file ("TreasureChestLoot.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TreasureChestLoot.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java b/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java index 3cae62727..6a3e9d7f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java @@ -1,11 +1,11 @@ /* - * This file ("IPhantomTile.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IPhantomTile.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.api.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 748dca3df..58a6fbe45 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -1,11 +1,11 @@ /* - * This file ("ActuallyAdditions.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ActuallyAdditions.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java index 3b9db821f..96f30fb2a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java @@ -1,11 +1,11 @@ /* - * This file ("InitAchievements.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitAchievements.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.achievement; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java index e9dd58bbd..a05bee1e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java @@ -1,11 +1,11 @@ /* - * This file ("TheAchievements.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheAchievements.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.achievement; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index b90d3110b..49a07aa49 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -1,11 +1,11 @@ /* - * This file ("BlockAtomicReconstructor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockAtomicReconstructor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java index da6fdd6d2..c659f8f51 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java @@ -1,11 +1,11 @@ /* - * This file ("BlockBlackLotus.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockBlackLotus.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index bb38a8c6b..0e7eb8290 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("BlockBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 27bd04c36..3e9ce3d33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -1,11 +1,11 @@ /* - * This file ("BlockCanolaPress.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockCanolaPress.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 3b4bb6a5d..bb769fd7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("BlockCoalGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockCoalGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 106879a53..633f7f027 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -1,11 +1,11 @@ /* - * This file ("BlockCoffeeMachine.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockCoffeeMachine.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index eeb54a9ba..ef0a5935b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -1,11 +1,11 @@ /* - * This file ("BlockColoredLamp.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockColoredLamp.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 7171b2035..7313e14cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -1,11 +1,11 @@ /* - * This file ("BlockCompost.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockCompost.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index 59ddb5ecd..1549c2f78 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -1,11 +1,11 @@ /* - * This file ("BlockCrystal.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockCrystal.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index d88d5516e..21ffa9d0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("BlockDirectionalBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockDirectionalBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index fd7e33566..439c1dedb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -1,11 +1,11 @@ /* - * This file ("BlockDropper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockDropper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java index 9da4e915b..34b858746 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java @@ -1,11 +1,11 @@ /* - * This file ("BlockEnergizer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockEnergizer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index dd10a1579..8a9222479 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFeeder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFeeder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index 532b85d4d..5bdeeb1c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFermentingBarrel.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFermentingBarrel.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java index dde47a345..6fa79b9a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFireworkBox.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFireworkBox.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index 1c6d40530..b5c77544b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFishingNet.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFishingNet.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 8f91920b5..df6fa97c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFluidCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFluidCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index 29d2df273..624d98a11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFurnaceDouble.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFurnaceDouble.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index f104e27ae..d4bdf27a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFurnaceSolar.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFurnaceSolar.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java index b2bad00d1..3a0a44839 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java @@ -1,11 +1,11 @@ /* - * This file ("BlockGeneric.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockGeneric.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 16a3d8867..aba472621 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -1,11 +1,11 @@ /* - * This file ("BlockGiantChest.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockGiantChest.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index d0dd697f2..b8dfbca0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -1,11 +1,11 @@ /* - * This file ("BlockGreenhouseGlass.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockGreenhouseGlass.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index d8971ee53..a1c30dcf6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -1,11 +1,11 @@ /* - * This file ("BlockGrinder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockGrinder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java index 31ed59697..e1f1e158f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java @@ -1,11 +1,11 @@ /* - * This file ("BlockHeatCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockHeatCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index c765d7838..9e1005344 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -1,11 +1,11 @@ /* - * This file ("BlockInputter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockInputter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index bdc9da2a4..749c58698 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -1,11 +1,11 @@ /* - * This file ("BlockItemRepairer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockItemRepairer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index 139007ade..28c32b17f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -1,3 +1,13 @@ +/* + * This file ("BlockItemViewer.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index 6bbd89dc5..bd3a5e032 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -1,11 +1,11 @@ /* - * This file ("BlockLampPowerer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockLampPowerer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; @@ -59,7 +59,7 @@ public class BlockLampPowerer extends BlockBase{ private void updateLamp(World world, BlockPos pos){ if(!world.isRemote){ BlockPos coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(pos, world)), pos, 0); - if(coords != null && PosUtil.getBlock(coords, world) instanceof BlockColoredLamp){ + if(PosUtil.getBlock(coords, world) instanceof BlockColoredLamp){ if(world.isBlockIndirectlyGettingPowered(pos) > 0){ if(!((BlockColoredLamp)PosUtil.getBlock(coords, world)).isOn){ PosUtil.setBlock(coords, world, InitBlocks.blockColoredLampOn, PosUtil.getMetadata(coords, world), 2); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 700ed980b..cf9082756 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -1,11 +1,11 @@ /* - * This file ("BlockLaserRelay.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockLaserRelay.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java index ae0bc9315..c697f25af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java @@ -1,11 +1,11 @@ /* - * This file ("BlockLavaFactoryController.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockLavaFactoryController.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java index 0c90045e0..23588dba8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("BlockLeafGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockLeafGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index 89f0c83e3..a615e4278 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -1,11 +1,11 @@ /* - * This file ("BlockMiner.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockMiner.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index 1e986cbb0..e075f8994 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -1,11 +1,11 @@ /* - * This file ("BlockMisc.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockMisc.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index ada610e7b..73915ce8a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("BlockOilGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockOilGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index e253de5e3..972cf7115 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -1,11 +1,11 @@ /* - * This file ("BlockPhantom.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockPhantom.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index 29ee417b4..4ea74795c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -1,11 +1,11 @@ /* - * This file ("BlockPhantomBooster.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockPhantomBooster.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java index 164e6fdb8..fce11ebba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java @@ -1,11 +1,11 @@ /* - * This file ("BlockRangedCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockRangedCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index 305b9420e..e500c6277 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -1,11 +1,11 @@ /* - * This file ("BlockSlabs.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockSlabs.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index f3f8824f3..da9763969 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -1,11 +1,11 @@ /* - * This file ("BlockSmileyCloud.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockSmileyCloud.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 18872e4d6..e08920456 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -1,11 +1,11 @@ /* - * This file ("BlockTreasureChest.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockTreasureChest.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 43024f909..1a5374715 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -1,11 +1,11 @@ /* - * This file ("BlockWallAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockWallAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index e51460d6f..83ac0de7f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -1,11 +1,11 @@ /* - * This file ("BlockWildPlant.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockWildPlant.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index c4ed64801..90ce2f589 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -1,11 +1,11 @@ /* - * This file ("BlockXPSolidifier.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockXPSolidifier.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java index bacb6f808..1f63dac41 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java @@ -1,11 +1,11 @@ /* - * This file ("IHudDisplay.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IHudDisplay.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 25e616800..e80e9e106 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -1,11 +1,11 @@ /* - * This file ("InitBlocks.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitBlocks.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index c4f68b925..aa5043483 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -1,11 +1,11 @@ /* - * This file ("BlockBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index e2760b900..55a7cf025 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -1,11 +1,11 @@ /* - * This file ("BlockBushBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockBushBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 9c438c630..c4e77e4e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -1,11 +1,11 @@ /* - * This file ("BlockContainerBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockContainerBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index 6dacad292..35c4df6a0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -1,11 +1,11 @@ /* - * This file ("BlockFluidFlowing.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockFluidFlowing.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 68025798e..5a83bf300 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -1,11 +1,11 @@ /* - * This file ("BlockPlant.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockPlant.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index 9635e8238..b6a40b8ec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -1,11 +1,11 @@ /* - * This file ("BlockStair.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockStair.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index 26f1eeca4..db31f8fb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -1,11 +1,11 @@ /* - * This file ("ItemBlockBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemBlockBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java index 8e7a06c0c..89c6c04a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java @@ -1,11 +1,11 @@ /* - * This file ("TheColoredLampColors.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheColoredLampColors.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.metalists; @@ -40,13 +40,11 @@ public enum TheColoredLampColors{ public static TheColoredLampColors getColorFromDyeName(String color){ if(color.substring(0, 3).equals("dye")){ String actualName = color.substring(3); - if(actualName != null){ - for(int i = 0; i < values().length; i++){ - String aName = values()[i].name; - if(aName != null){ - if(aName.toLowerCase(Locale.ROOT).equals(actualName.toLowerCase(Locale.ROOT))){ - return values()[i]; - } + for(int i = 0; i < values().length; i++){ + String aName = values()[i].name; + if(aName != null){ + if(aName.toLowerCase(Locale.ROOT).equals(actualName.toLowerCase(Locale.ROOT))){ + return values()[i]; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java index 865a60d3e..c0bc99a76 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java @@ -1,11 +1,11 @@ /* - * This file ("TheMiscBlocks.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheMiscBlocks.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java index 3257d776d..a441f6f18 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java @@ -1,11 +1,11 @@ /* - * This file ("TheWildPlants.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheWildPlants.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index d180e5027..90165222f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -1,11 +1,11 @@ /* - * This file ("GuiBooklet.java") is part of the Actually Additions Mod for Minecraft. + * This file ("RenderCompost.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.render; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index 012edb494..0cdde1858 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -1,11 +1,11 @@ /* - * This file ("RenderReconstructorLens.java") is part of the Actually Additions Mod for Minecraft. + * This file ("RenderReconstructorLens.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.render; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 8860a96c0..d7863c45e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -1,11 +1,11 @@ /* - * This file ("RenderSmileyCloud.java") is part of the Actually Additions Mod for Minecraft. + * This file ("RenderSmileyCloud.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.render; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index ee400e060..c33813a33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -1,11 +1,11 @@ /* - * This file ("BookletUtils.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletUtils.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java index ccbae9e75..52b61ca2e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java @@ -1,11 +1,11 @@ /* - * This file ("GuiAAAchievements.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiAAAchievements.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index d5c538424..620a190a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -1,11 +1,11 @@ /* - * This file ("GuiBooklet.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiBooklet.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 1a874c7bd..3c934dcbb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -1,11 +1,11 @@ /* - * This file ("InitBooklet.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitBooklet.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index cf4e0f776..e1d62430f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -1,11 +1,11 @@ /* - * This file ("BookmarkButton.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookmarkButton.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.button; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 0367918d7..bea62f103 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -1,11 +1,11 @@ /* - * This file ("IndexButton.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IndexButton.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.button; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index b185df808..74edd1462 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -1,11 +1,11 @@ /* - * This file ("TexturedButton.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TexturedButton.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.button; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index ded33f46e..36b23604b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -1,11 +1,11 @@ /* - * This file ("BookletChapter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletChapter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.chapter; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java index c73d63726..909bda254 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java @@ -1,11 +1,11 @@ /* - * This file ("BookletChapterCoffee.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletChapterCoffee.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.chapter; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java index 8631d823f..c6cbafdaa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java @@ -1,11 +1,11 @@ /* - * This file ("BookletChapterCrusher.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletChapterCrusher.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.chapter; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java index aaa6391cc..6ea6c37b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java @@ -1,11 +1,11 @@ /* - * This file ("BookletEntry.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletEntry.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.entry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java index 52599f884..3ecad48be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java @@ -1,11 +1,11 @@ /* - * This file ("BookletEntryAllSearch.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletEntryAllSearch.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.entry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java index 37923e087..313563212 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java @@ -1,11 +1,11 @@ /* - * This file ("EntrySet.java") is part of the Actually Additions Mod for Minecraft. + * This file ("EntrySet.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.entry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java index 7a5834efb..4a56bd6de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java @@ -1,11 +1,11 @@ /* - * This file ("BookletPage.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletPageAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java index 9f5be5112..39dc11a65 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("PageCoffeeRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PageCoffeeRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index 7301019e1..a619a0229 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("PageCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PageCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index d5073a86a..79506db4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("PageCrusherRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PageCrusherRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index c35e00c80..ab91f082e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -1,11 +1,11 @@ /* - * This file ("PageFurnace.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PageFurnace.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java index a70555d77..b271125a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java @@ -1,11 +1,11 @@ /* - * This file ("PagePicture.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PagePicture.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index 4fca61c9f..00913b407 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -1,11 +1,11 @@ /* - * This file ("PageReconstructor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PageReconstructor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java index 999eb571d..8c4d6aba1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java @@ -1,11 +1,11 @@ /* - * This file ("PageTextOnly.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PageTextOnly.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java index 54c76569e..a690c45d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java @@ -1,11 +1,11 @@ /* - * This file ("ConfigCategories.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ConfigCategories.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index 22f03b52c..00d3a61f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -1,11 +1,11 @@ /* - * This file ("ConfigValues.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ConfigValues.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index cbdd70a40..a661502e8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -1,11 +1,11 @@ /* - * This file ("ConfigurationHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ConfigurationHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java index 4e90478b4..661c2da8a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java @@ -1,11 +1,11 @@ /* - * This file ("GuiConfiguration.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiConfiguration.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java index ec8280c6a..5540bad0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java @@ -1,11 +1,11 @@ /* - * This file ("GuiFactory.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiFactory.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index f1fc862da..72f4539fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -1,11 +1,11 @@ /* - * This file ("ConfigBoolValues.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ConfigBoolValues.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config.values; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index ad9674be5..133065418 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("ConfigCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ConfigCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config.values; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java index 59344495d..f159538df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java @@ -1,11 +1,11 @@ /* - * This file ("ConfigIntValues.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ConfigIntValues.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.config.values; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 22487592d..f595547d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("BlockCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BlockCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index 8952b998c..ea13c0fac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("CrusherCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CrusherCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java index db4d3894b..7c28e618a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("FoodCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("FoodCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java index 3a7c57cf9..57dca57d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("InitCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 7eeac6768..284d367fc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("ItemCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index fb86597fd..b5fbb7530 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("MiscCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("MiscCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java index e7449f327..32a2d8cf5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java @@ -1,11 +1,11 @@ /* - * This file ("ToolCrafting.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ToolCrafting.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index daef36f91..5479b8d0e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -1,11 +1,11 @@ /* - * This file ("CreativeTab.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CreativeTab.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.creative; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java index c51543040..f981b39d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java @@ -1,3 +1,13 @@ +/* + * This file ("EntityFireworkBoxMinecart.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.entity; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java index 992f260d1..df41879fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java @@ -1,3 +1,13 @@ +/* + * This file ("EntityRFMinecart.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.entity; import cofh.api.energy.EnergyStorage; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java index 2cd429c80..2b8f0dd02 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java @@ -1,3 +1,13 @@ +/* + * This file ("InitEntities.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.entity; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java index 3b6e3919d..5f55b873a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java @@ -1,3 +1,13 @@ +/* + * This file ("BreakEvent.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.items.InitItems; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java index cb2a57119..8dfdc7968 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java @@ -1,11 +1,11 @@ /* - * This file ("EntityLivingEvent.java") is part of the Actually Additions Mod for Minecraft. + * This file ("EntityLivingEvent.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index 9d5dbd8dd..f04d33520 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -1,11 +1,11 @@ /* - * This file ("HudEvent.java") is part of the Actually Additions Mod for Minecraft. + * This file ("HudEvent.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java index 0e6df4853..2f40dbbbb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java @@ -1,11 +1,11 @@ /* - * This file ("InitEvents.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitEvents.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java index fa9e4b1e7..b80a36a02 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java @@ -1,11 +1,11 @@ /* - * This file ("LivingDropEvent.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LivingDropEvent.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java index 2d14f6a0e..8dcab818a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java @@ -1,11 +1,11 @@ /* - * This file ("LogoutEvent.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LogoutEvent.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 1ce77e9aa..7ba8f90dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -1,11 +1,11 @@ /* - * This file ("PlayerObtainEvents.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PlayerObtainEvents.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index 334f28ff8..c55a4aab9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -1,11 +1,11 @@ /* - * This file ("TooltipEvent.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TooltipEvent.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index 74b1bc10a..1d7ff205c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -1,11 +1,11 @@ /* - * This file ("WorldDecorationEvent.java") is part of the Actually Additions Mod for Minecraft. + * This file ("WorldDecorationEvent.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 00459099a..71cd54f45 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -1,11 +1,11 @@ /* - * This file ("WorldLoadingEvents.java") is part of the Actually Additions Mod for Minecraft. + * This file ("WorldLoadingEvents.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java index 8c5608b18..4bf1bc563 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java @@ -1,11 +1,11 @@ /* - * This file ("FluidAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("FluidAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.fluids; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java index 2e26ad67e..ab3aa0166 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java @@ -1,11 +1,11 @@ /* - * This file ("InitFluids.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitFluids.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.fluids; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java index 46c9cefe3..7fd06f9d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java @@ -1,11 +1,11 @@ /* - * This file ("InitVillager.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitVillager.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index 5e3bdb36f..d259200d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -1,11 +1,11 @@ /* - * This file ("JamVillagerTradeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("JamVillagerTradeHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 9203e8194..a9d2bcf54 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -1,11 +1,11 @@ /* - * This file ("OreGen.java") is part of the Actually Additions Mod for Minecraft. + * This file ("OreGen.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index 53207952f..9df54a8f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -1,11 +1,11 @@ /* - * This file ("VillageComponentCustomCropField.java") is part of the Actually Additions Mod for Minecraft. + * This file ("VillageComponentCustomCropField.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index aa68cc7dc..1486545d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -1,11 +1,11 @@ /* - * This file ("VillageComponentJamHouse.java") is part of the Actually Additions Mod for Minecraft. + * This file ("VillageComponentJamHouse.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java index 2c1cad542..03beb12de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java @@ -1,11 +1,11 @@ /* - * This file ("VillageCustomCropFieldHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("VillageCustomCropFieldHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java index 2aeab7dc7..be505da63 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java @@ -1,11 +1,11 @@ /* - * This file ("VillageJamHouseHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("VillageJamHouseHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index bb2dfd1b0..f4b5b23f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index 9501a4f0a..3ea5df3d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerCanolaPress.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerCanolaPress.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index d42bc6aa9..e323a9701 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerCoalGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerCoalGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index bafb1d5b0..766b286a0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerCoffeeMachine.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerCoffeeMachine.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index 933c268c6..ce6884a44 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerCrafter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerCrafter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index 424381fcf..d5861d404 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerDirectionalBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerDirectionalBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index 7e801193e..3e6b2813c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerDrill.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerDrill.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index 4c885893a..25afb9fa6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerDropper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerDropper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index fca361c78..18b246952 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerEnergizer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerEnergizer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 3069509aa..4f6529846 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerEnervator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerEnervator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index dc734e067..b6f12d630 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerFeeder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerFeeder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index 1395a970d..b049878d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerFermentingBarrel.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerFermentingBarrel.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 5c2c9d909..e04b3b5b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerFluidCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerFluidCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index 3c70d264d..fedf70c6b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerFurnaceDouble.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerFurnaceDouble.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 72df215f6..20d6dc92e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerGiantChest.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerGiantChest.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index 8cfb5f1eb..eda54b0d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerGrinder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerGrinder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 5dda30f55..7e969ab4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerInputter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerInputter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 72ebc5ab5..eee32cf93 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerInputter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerLaserRelayItemWhitelist.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 216b79e02..2b6671a0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerMiner.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerMiner.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 73342ea35..95d6e2f79 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerOilGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerOilGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index a96707cc1..7cce38d01 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerPhantomPlacer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerPhantomPlacer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index df17640af..e01e96812 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerRangedCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerRangedCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index 90682e099..7b5b2b1fe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerRepairer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerRepairer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java index 586303d7a..ad92f124a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerSmileyCloud.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerSmileyCloud.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index d20d040fe..fef13feb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -1,11 +1,11 @@ /* - * This file ("ContainerXPSolidifier.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ContainerXPSolidifier.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index 0fd136b54..9431b5293 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -1,11 +1,11 @@ /* - * This file ("GuiHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java index 9cc21ac2a..17702341a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("GuiBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java index 67b8739da..f84f7f6bd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java @@ -1,11 +1,11 @@ /* - * This file ("GuiCanolaPress.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiCanolaPress.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java index bfd37e45f..80c587492 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("GuiCoalGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiCoalGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index acaad95c5..63a1344e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -1,11 +1,11 @@ /* - * This file ("GuiCoffeeMachine.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiCoffeeMachine.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java index 171c49262..1730b2908 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java @@ -1,11 +1,11 @@ /* - * This file ("GuiCrafter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiCrafter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java index a769a1b36..a1522fc6a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("GuiDirectionalBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiDirectionalBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java index db2e1c464..fb68bb13e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java @@ -1,11 +1,11 @@ /* - * This file ("GuiDrill.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiDrill.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java index fcf10d836..2f4cc5c0e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java @@ -1,11 +1,11 @@ /* - * This file ("GuiDropper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiDropper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java index e84fb4eb6..ab54d5215 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java @@ -1,11 +1,11 @@ /* - * This file ("GuiEnergizer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiEnergizer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java index c82acebd3..69d2114b3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java @@ -1,11 +1,11 @@ /* - * This file ("GuiEnervator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiEnervator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java index 5aa8d3ca9..b2c45c534 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java @@ -1,11 +1,11 @@ /* - * This file ("GuiFeeder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiFeeder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java index 59bd13efb..1a79c8bec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java @@ -1,11 +1,11 @@ /* - * This file ("GuiFermentingBarrel.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiFermentingBarrel.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java index e19eab4df..e4d69c04e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java @@ -1,11 +1,11 @@ /* - * This file ("GuiFluidCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiFluidCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java index 436c2e602..4baab8f37 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java @@ -1,11 +1,11 @@ /* - * This file ("GuiFurnaceDouble.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiFurnaceDouble.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index d6c673f30..90f688909 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -1,11 +1,11 @@ /* - * This file ("GuiGiantChest.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiGiantChest.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java index 2c0abe989..993d9d411 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java @@ -1,11 +1,11 @@ /* - * This file ("GuiGrinder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiGrinder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 10ae2acfb..1926f78ac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -1,11 +1,11 @@ /* - * This file ("GuiInputter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiInputter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index 9e80b01b0..14d6a043b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -1,11 +1,11 @@ /* - * This file ("GuiOilGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiLaserRelayItemWhitelist.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index bc65456c5..a688a0086 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -1,11 +1,11 @@ /* - * This file ("GuiMiner.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiMiner.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index 4938c3ebe..5571b488e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("GuiOilGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiOilGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java index a6802ec58..d76208187 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java @@ -1,11 +1,11 @@ /* - * This file ("GuiPhantomPlacer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiPhantomPlacer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index 965c6e391..6a8c8e865 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -1,11 +1,11 @@ /* - * This file ("GuiRangedCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiRangedCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 121498598..1f4939f5c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -1,11 +1,11 @@ /* - * This file ("GuiRepairer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiRepairer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index 58564a0e1..64bae0eda 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -1,11 +1,11 @@ /* - * This file ("GuiSmileyCloud.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiSmileyCloud.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index bd22443bf..c2057b8bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -1,11 +1,11 @@ /* - * This file ("GuiXPSolidifier.java") is part of the Actually Additions Mod for Minecraft. + * This file ("GuiXPSolidifier.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java index 77042179f..9f7cb5d36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java @@ -1,11 +1,11 @@ /* - * This file ("SlotFilter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("SlotFilter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.slot; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java index 91e13df92..277ec57be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java @@ -1,11 +1,11 @@ /* - * This file ("SlotImmovable.java") is part of the Actually Additions Mod for Minecraft. + * This file ("SlotImmovable.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.slot; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java index 98b004186..2eece5500 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java @@ -1,11 +1,11 @@ /* - * This file ("SlotOutput.java") is part of the Actually Additions Mod for Minecraft. + * This file ("SlotOutput.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.slot; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java index 95fd3d25c..131546425 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java @@ -1,11 +1,11 @@ /* - * This file ("InitForeignPaxels.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitForeignPaxels.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 0cde605b8..75d009276 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -1,11 +1,11 @@ /* - * This file ("InitItems.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitItems.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 4ee7a25fd..7ff24acd4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -1,11 +1,11 @@ /* - * This file ("ItemAllToolAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemAllToolAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index ca1f386d9..fe4932fc9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -1,11 +1,11 @@ /* - * This file ("ItemAxeAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemAxeAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java index 7baf5e9d5..4f80708d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java @@ -1,11 +1,11 @@ /* - * This file ("ItemBattery.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemBattery.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 85380abdd..3ec17dcc9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -1,11 +1,11 @@ /* - * This file ("ItemBooklet.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemBooklet.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; @@ -60,15 +60,13 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ if(player.isSneaking()){ Block block = PosUtil.getBlock(pos, world); ItemStack blockStack = new ItemStack(block, 1, PosUtil.getMetadata(pos, world)); - if(blockStack != null){ - BookletPage page = BookletUtils.getFirstPageForStack(blockStack); - if(page != null){ - if(world.isRemote){ - forcedEntry = new EntrySet(page, page.getChapter(), page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1); - } - this.onItemRightClick(stack, world, player, hand); - return EnumActionResult.SUCCESS; + BookletPage page = BookletUtils.getFirstPageForStack(blockStack); + if(page != null){ + if(world.isRemote){ + forcedEntry = new EntrySet(page, page.getChapter(), page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1); } + this.onItemRightClick(stack, world, player, hand); + return EnumActionResult.SUCCESS; } } return EnumActionResult.FAIL; @@ -101,30 +99,28 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ Block block = PosUtil.getBlock(posHit.getBlockPos(), minecraft.theWorld); if(block != null && !block.isAir(minecraft.theWorld.getBlockState(posHit.getBlockPos()), minecraft.theWorld, posHit.getBlockPos())){ ItemStack blockStack = new ItemStack(block, 1, PosUtil.getMetadata(posHit.getBlockPos(), minecraft.theWorld)); - if(blockStack != null){ - int height = resolution.getScaledHeight()/5*3; - if(player.isSneaking()){ - BookletPage page = BookletUtils.getFirstPageForStack(blockStack); - if(page != null){ - String strg1 = page.getChapter().getLocalizedName(); - String strg2 = "Page "+page.getID(); - String strg3 = "Right-Click to open..."; + int height = resolution.getScaledHeight()/5*3; + if(player.isSneaking()){ + BookletPage page = BookletUtils.getFirstPageForStack(blockStack); + if(page != null){ + String strg1 = page.getChapter().getLocalizedName(); + String strg2 = "Page "+page.getID(); + String strg3 = "Right-Click to open..."; - AssetUtil.renderStackToGui(page.getChapter().getDisplayItemStack() != null ? page.getChapter().getDisplayItemStack() : new ItemStack(InitItems.itemBooklet), resolution.getScaledWidth()/2-10, height+41, 1F); - minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg1, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg1)/2, height+20, StringUtil.DECIMAL_COLOR_WHITE); - minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg2, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg2)/2, height+30, StringUtil.DECIMAL_COLOR_WHITE); - minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.GOLD+strg3, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg3)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); - } - else{ - String strg = TextFormatting.DARK_RED+"No Info available! Sorry :("; - minecraft.fontRendererObj.drawStringWithShadow(strg, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); - } + AssetUtil.renderStackToGui(page.getChapter().getDisplayItemStack() != null ? page.getChapter().getDisplayItemStack() : new ItemStack(InitItems.itemBooklet), resolution.getScaledWidth()/2-10, height+41, 1F); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg1, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg1)/2, height+20, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg2, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg2)/2, height+30, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.GOLD+strg3, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg3)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); } else{ - String strg = TextFormatting.DARK_GREEN+""+TextFormatting.ITALIC+"Sneak!"; + String strg = TextFormatting.DARK_RED+"No Info available! Sorry :("; minecraft.fontRendererObj.drawStringWithShadow(strg, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); } } + else{ + String strg = TextFormatting.DARK_GREEN+""+TextFormatting.ITALIC+"Sneak!"; + minecraft.fontRendererObj.drawStringWithShadow(strg, resolution.getScaledWidth()/2-minecraft.fontRendererObj.getStringWidth(strg)/2, height+60, StringUtil.DECIMAL_COLOR_WHITE); + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index a2b0467d6..32797572e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -1,11 +1,11 @@ /* - * This file ("ItemChestToCrateUpgrade.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemChestToCrateUpgrade.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index 7fb0cabc8..388dcbfda 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -1,11 +1,11 @@ /* - * This file ("ItemCoffee.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemCoffee.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java index 9e65ea4f8..003698d73 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java @@ -1,11 +1,11 @@ /* - * This file ("ItemCoffeeBean.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemCoffeeBean.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java index ae6e6f355..f3443eff3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java @@ -1,11 +1,11 @@ /* - * This file ("ItemCrafterOnAStick.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemCrafterOnAStick.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 9dd9eb46a..44b1841aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -1,11 +1,11 @@ /* - * This file ("ItemCrystal.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemCrystal.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 0d20dd8ab..00907f0c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -1,11 +1,11 @@ /* - * This file ("ItemDrill.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemDrill.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java index a3899da8a..79f1fd2f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java @@ -1,11 +1,11 @@ /* - * This file ("ItemDrillUpgrade.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemDrillUpgrade.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 1abfdd164..601538b90 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -1,11 +1,11 @@ /* - * This file ("ItemDust.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemDust.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index 4bbfe18c9..5d7b51e9d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -1,11 +1,11 @@ /* - * This file ("ItemFertilizer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemFertilizer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java index d217abf62..8c76e25eb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java @@ -1,3 +1,13 @@ +/* + * This file ("ItemFireworkBoxMinecart.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.entity.EntityFireworkBoxMinecart; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 8b0f32c60..1bebbe094 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -1,11 +1,11 @@ /* - * This file ("ItemFoods.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemFoods.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java index 3b1c5e464..6b215de75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java @@ -1,11 +1,11 @@ /* - * This file ("ItemGeneric.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemGeneric.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index 73ec81110..edcd69ddb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -1,11 +1,11 @@ /* - * This file ("ItemGrowthRing.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemGrowthRing.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index c8cbcc13f..0d755aaf9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -1,11 +1,11 @@ /* - * This file ("ItemHairyBall.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemHairyBall.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 39aa9b4f2..dd95ae6e3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -1,11 +1,11 @@ /* - * This file ("ItemJams.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemJams.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index 8b6b1e676..06da31f84 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -1,11 +1,11 @@ /* - * This file ("ItemKnife.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemKnife.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 2e723e48d..ba94a6f9c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -1,11 +1,11 @@ /* - * This file ("ItemLaserWrench.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemLaserWrench.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; @@ -50,18 +50,20 @@ public class ItemLaserWrench extends ItemBase{ } else{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); - TileEntity savedTile = world.getTileEntity(savedPos); - if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.getInstance().addConnection(savedPos, pos)){ - ItemPhantomConnector.clearStorage(stack); + if(savedPos != null){ + TileEntity savedTile = world.getTileEntity(savedPos); + if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.getInstance().addConnection(savedPos, pos)){ + ItemPhantomConnector.clearStorage(stack); - ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); - ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); + ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); + ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.connected.desc"))); - } - else{ - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.cantConnect.desc"))); - ItemPhantomConnector.clearStorage(stack); + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.connected.desc"))); + } + else{ + player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.cantConnect.desc"))); + ItemPhantomConnector.clearStorage(stack); + } } } return EnumActionResult.SUCCESS; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 92cbac320..5433cfed6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -1,11 +1,11 @@ /* - * This file ("ItemLeafBlower.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemLeafBlower.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index 6bf7110ae..81f94f184 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -1,11 +1,11 @@ /* - * This file ("ItemMagnetRing.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemMagnetRing.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java index bd23205d4..bae0b854c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java @@ -1,3 +1,13 @@ +/* + * This file ("ItemMinecartAA.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index f4b689562..fe4970b63 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -1,11 +1,11 @@ /* - * This file ("ItemMisc.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemMisc.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 4fd624182..9b5cd5753 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -1,11 +1,11 @@ /* - * This file ("ItemPhantomConnector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemPhantomConnector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index 663e570be..0039db059 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -1,11 +1,11 @@ /* - * This file ("ItemPickaxeAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemPickaxeAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 9fe1c4f14..a0e07c307 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -1,11 +1,11 @@ /* - * This file ("ItemPotionRing.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemPotionRing.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index 0f580e005..81b2a3778 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -1,3 +1,13 @@ +/* + * This file ("ItemRarmorModuleReconstructor.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.items; import cofh.api.energy.IEnergyContainerItem; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 1cee8bfe0..0cd6cfe18 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -1,11 +1,11 @@ /* - * This file ("ItemResonantRice.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemResonantRice.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index e58bbfe55..4cab8b5a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -1,11 +1,11 @@ /* - * This file ("ItemShovelAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemShovelAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index 3faa54230..fe5d61eff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -1,11 +1,11 @@ /* - * This file ("ItemSolidifiedExperience.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemSolidifiedExperience.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index 31cdb9117..a79f1f040 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -1,3 +1,13 @@ +/* + * This file ("ItemSpawnerChanger.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index 7b5ca10f0..1d32fae1d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -1,11 +1,11 @@ /* - * This file ("ItemTeleStaff.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemTeleStaff.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index b4852521b..c7e9b099b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -1,11 +1,11 @@ /* - * This file ("ItemWaterRemovalRing.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemWaterRemovalRing.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index 50dca5adb..bfec90675 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -1,11 +1,11 @@ /* - * This file ("ItemWingsOfTheBats.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemWingsOfTheBats.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 8a1a8ae15..0d67fe3b9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -1,11 +1,11 @@ /* - * This file ("ItemArmorAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemArmorAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index 6e40d567d..a00dbb530 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -1,11 +1,11 @@ /* - * This file ("ItemBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 98634a849..d25b51340 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -1,11 +1,11 @@ /* - * This file ("ItemEnergy.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemEnergy.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index 8312c2da7..0e3cb1888 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -1,11 +1,11 @@ /* - * This file ("ItemFoodBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemFoodBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index 8bc6bfdcc..419b83765 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -1,11 +1,11 @@ /* - * This file ("ItemHoeAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemHoeAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 1ff8c36a9..7fcfe94c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -1,11 +1,11 @@ /* - * This file ("ItemSeed.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemSeed.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index 573bfa58a..f96611c28 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -1,11 +1,11 @@ /* - * This file ("ItemSwordAA.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemSwordAA.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index aa46e8544..9c97e14cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -1,3 +1,13 @@ +/* + * This file ("ItemToolAA.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java index 5ba2e0d6c..9f40e9179 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java @@ -1,11 +1,11 @@ /* - * This file ("ItemLens.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemLens.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 905e27d74..a4868ef1e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -1,11 +1,11 @@ /* - * This file ("LensColor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LensColor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java index e7151d65e..b775c93e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java @@ -1,11 +1,11 @@ /* - * This file ("LensDeath.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LensDeath.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java index 96cccebea..2a602a22c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java @@ -1,11 +1,11 @@ /* - * This file ("LensDetonation.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LensDetonation.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java index 62da1ae6d..bff78205a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java @@ -1,3 +1,13 @@ +/* + * This file ("LensDisruption.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java index 98c1c027a..5e175c355 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java @@ -1,11 +1,11 @@ /* - * This file ("LensNoneRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LensRecipeHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java index 7a500c180..d24bb9df1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java @@ -1,11 +1,11 @@ /* - * This file ("Lenses.java") is part of the Actually Additions Mod for Minecraft. + * This file ("Lenses.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java index ab719ca13..2023c3912 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java @@ -1,11 +1,11 @@ /* - * This file ("TheCrystals.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheCrystals.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java index c54c6bea7..bdc3a222c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java @@ -1,11 +1,11 @@ /* - * This file ("TheDusts.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheDusts.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java index 7d40f48ca..eeb5e2b97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java @@ -1,11 +1,11 @@ /* - * This file ("TheFoods.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheFoods.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java index 2056c0a79..b545cddac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java @@ -1,11 +1,11 @@ /* - * This file ("TheJams.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheJams.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java index 556ceb3b6..e367a7a1f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java @@ -1,11 +1,11 @@ /* - * This file ("TheMiscItems.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TheMiscItems.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java index 4e1ade2f2..d38de6336 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java @@ -1,11 +1,11 @@ /* - * This file ("ThePotionRings.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ThePotionRings.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index 8baa62f86..b14e09905 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -1,11 +1,11 @@ /* - * This file ("JEIActuallyAdditionsPlugin.java") is part of the Actually Additions Mod for Minecraft. + * This file ("JEIActuallyAdditionsPlugin.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei; @@ -34,11 +34,13 @@ import mezz.jei.api.recipe.VanillaRecipeCategoryUid; import mezz.jei.api.recipe.transfer.IRecipeTransferRegistry; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + @JEIPlugin public class JEIActuallyAdditionsPlugin implements IModPlugin{ @Override - public void register(IModRegistry registry){ + public void register(@Nonnull IModRegistry registry){ IJeiHelpers helpers = registry.getJeiHelpers(); registry.addRecipeCategories( @@ -98,7 +100,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ } @Override - public void onRuntimeAvailable(IJeiRuntime jeiRuntime){ + public void onRuntimeAvailable(@Nonnull IJeiRuntime jeiRuntime){ } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java index 8c7507482..1be528381 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java @@ -1,11 +1,11 @@ /* - * This file ("RecipeWrapperWithButton.java") is part of the Actually Additions Mod for Minecraft. + * This file ("RecipeWrapperWithButton.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index 89b47f6f9..cccb2e9cc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -1,11 +1,11 @@ /* - * This file ("BookletRecipeCategory.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletRecipeCategory.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.booklet; @@ -49,12 +49,12 @@ public class BookletRecipeCategory implements IRecipeCategory{ } @Override - public void drawExtras(Minecraft minecraft){ + public void drawExtras(@Nonnull Minecraft minecraft){ } @Override - public void drawAnimations(Minecraft minecraft){ + public void drawAnimations(@Nonnull Minecraft minecraft){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java index ddae626ff..33a224d70 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java @@ -1,11 +1,11 @@ /* - * This file ("BookletRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletRecipeHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index 00596b513..0462ce14a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -1,11 +1,11 @@ /* - * This file ("BookletRecipeWrapper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("BookletRecipeWrapper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java index 95c20d762..a11f109d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java @@ -1,11 +1,11 @@ /* - * This file ("CoffeeMachineRecipeCategory.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CoffeeMachineRecipeCategory.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.coffee; @@ -49,12 +49,12 @@ public class CoffeeMachineRecipeCategory implements IRecipeCategory{ } @Override - public void drawExtras(Minecraft minecraft){ + public void drawExtras(@Nonnull Minecraft minecraft){ } @Override - public void drawAnimations(Minecraft minecraft){ + public void drawAnimations(@Nonnull Minecraft minecraft){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java index e2c796052..5183f9605 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java @@ -1,11 +1,11 @@ /* - * This file ("CoffeeMachineRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CoffeeMachineRecipeHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.coffee; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index 80f04422e..e9ec62477 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -1,11 +1,11 @@ /* - * This file ("CoffeeMachineRecipeWrapper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CoffeeMachineRecipeWrapper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.coffee; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java index d00501956..d35fc4345 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java @@ -1,11 +1,11 @@ /* - * This file ("CrusherRecipeCategor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CrusherRecipeCategory.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.crusher; @@ -52,12 +52,12 @@ public class CrusherRecipeCategory implements IRecipeCategory{ } @Override - public void drawExtras(Minecraft minecraft){ + public void drawExtras(@Nonnull Minecraft minecraft){ } @Override - public void drawAnimations(Minecraft minecraft){ + public void drawAnimations(@Nonnull Minecraft minecraft){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java index 698e59d7a..12d04e76d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java @@ -1,11 +1,11 @@ /* - * This file ("CrusherRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CrusherRecipeHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.crusher; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java index 6326b1c93..13b48b5f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java @@ -1,11 +1,11 @@ /* - * This file ("CrusherRecipeWrapper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CrusherRecipeWrapper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.crusher; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java index 6608d1111..a5eb30d0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java @@ -1,11 +1,11 @@ /* - * This file ("ReconstructorRecipeCategory.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ReconstructorRecipeCategory.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.reconstructor; @@ -52,12 +52,12 @@ public class ReconstructorRecipeCategory implements IRecipeCategory{ } @Override - public void drawExtras(Minecraft minecraft){ + public void drawExtras(@Nonnull Minecraft minecraft){ AssetUtil.renderStackToGui(RECONSTRUCTOR, 34, 19, 1.0F); } @Override - public void drawAnimations(Minecraft minecraft){ + public void drawAnimations(@Nonnull Minecraft minecraft){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java index ed8e90b36..10370ed68 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java @@ -1,11 +1,11 @@ /* - * This file ("ReconstructorRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ReconstructorRecipeHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.reconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java index c2f270e24..3caf25099 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java @@ -1,11 +1,11 @@ /* - * This file ("ReconstructorRecipeWrapper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ReconstructorRecipeWrapper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.reconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index c08369f8c..dbcf3b8d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -1,11 +1,11 @@ /* - * This file ("InitArmorMaterials.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitArmorMaterials.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.material; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java index c645223e2..e6b8e299a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java @@ -1,11 +1,11 @@ /* - * This file ("InitToolMaterials.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitToolMaterials.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.material; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java index 20433ae43..98eca7a82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -1,3 +1,13 @@ +/* + * This file ("BannerHelper.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.misc; import de.ellpeck.actuallyadditions.mod.items.InitItems; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 3f0d7d5cd..8a066e6b7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -1,11 +1,11 @@ /* - * This file ("DamageSources.java") is part of the Actually Additions Mod for Minecraft. + * This file ("DamageSources.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index 31f093b83..48f21c546 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -1,11 +1,11 @@ /* - * This file ("DispenserHandlerFertilize.java") is part of the Actually Additions Mod for Minecraft. + * This file ("DispenserHandlerFertilize.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java index f8235e5e5..2f38f0a32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java @@ -1,11 +1,11 @@ /* - * This file ("DungeonLoot.java") is part of the Actually Additions Mod for Minecraft. + * This file ("DungeonLoot.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java index e2753ae57..eb8523558 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java @@ -1,11 +1,11 @@ /* - * This file ("EntityColoredParticleFX.java") is part of the Actually Additions Mod for Minecraft. + * This file ("EntityColoredParticleFX.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 9c6e2427a..4c1eb9d9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -1,11 +1,11 @@ /* - * This file ("LaserRelayConnectionHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("LaserRelayConnectionHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; @@ -132,7 +132,7 @@ public class LaserRelayConnectionHandler{ firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay)); } //Only second network exists - else if(secondNetwork != null){ + else{ secondNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay)); } WorldData.makeDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index 7ab847f44..12f6fcc95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -1,3 +1,13 @@ +/* + * This file ("MethodHandler.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.misc; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java index 3c188adcd..a4174845c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java @@ -1,3 +1,13 @@ +/* + * This file ("SoundHandler.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.misc; import de.ellpeck.actuallyadditions.mod.util.ModUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index b551acbb7..20f8a26a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -1,11 +1,11 @@ /* - * This file ("WorldData.java") is part of the Actually Additions Mod for Minecraft. + * This file ("WorldData.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java index 832b13f30..da8871f7b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java @@ -1,11 +1,11 @@ /* - * This file ("ISmileyCloudEasterEgg.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ISmileyCloudEasterEgg.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.cloud; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 977152179..13d1adcb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -1,11 +1,11 @@ /* - * This file ("SmileyCloudEasterEggs.java") is part of the Actually Additions Mod for Minecraft. + * This file ("SmileyCloudEasterEggs.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.cloud; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java index 41bbca263..9f7303753 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java @@ -1,11 +1,11 @@ /* - * This file ("RenderSpecial.java") is part of the Actually Additions Mod for Minecraft. + * This file ("RenderSpecial.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.special; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index be90ec6cd..4888f758a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -1,11 +1,11 @@ /* - * This file ("SpecialRenderInit.java") is part of the Actually Additions Mod for Minecraft. + * This file ("SpecialRenderInit.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.special; @@ -36,7 +36,7 @@ public class SpecialRenderInit{ public static void parse(Properties properties){ for(String key : properties.stringPropertyNames()){ String[] values = properties.getProperty(key).split("@"); - if(values != null && values.length > 0){ + if(values.length > 0){ String itemName = values[0]; int meta; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java index 6fce22f5c..516232490 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java @@ -1,11 +1,11 @@ /* - * This file ("ThreadSpecialFetcher.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ThreadSpecialFetcher.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.special; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java index d4c570a6e..63c0385c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java @@ -1,11 +1,11 @@ /* - * This file ("INEIRecipeHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("INEIRecipeHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java index 37d43ec4d..e26b9dcc3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java @@ -1,11 +1,11 @@ /* - * This file ("NEIActuallyAdditionsConfig.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEIActuallyAdditionsConfig.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java index 5aa9843ce..1e826e08d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEIBookletRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEIBookletRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java index aec86f53e..8b5de32e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEICoffeeMachineRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEICoffeeMachineRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java index 9c4bbed13..df4c32ba2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEICompostRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEICompostRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java index 86feeffe4..23db6e621 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEICrusherRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEICrusherRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java index 40a3ff087..6c8653919 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEIFurnaceDoubleRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEIFurnaceDoubleRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java index a7b1c3ad9..363917801 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEIHairyBallRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEIHairyBallRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java index eb2d06c85..43f4b8dea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEIReconstructorRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEIReconstructorRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java index 86f29539d..acc580ca5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java @@ -1,11 +1,11 @@ /* - * This file ("NEIScreenEvents.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEIScreenEvents.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java index 0c0ec8e33..dc81fb8e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java @@ -1,11 +1,11 @@ /* - * This file ("NEITreasureChestRecipe.java") is part of the Actually Additions Mod for Minecraft. + * This file ("NEITreasureChestRecipe.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 0f8e48585..10e43d8d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -1,11 +1,11 @@ /* - * This file ("PacketHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PacketHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index 11b95a104..e3f69eb5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -1,11 +1,11 @@ /* - * This file ("PacketParticle.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PacketParticle.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java index c69f908dc..2983d6f6b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java @@ -1,11 +1,11 @@ /* - * This file ("PacketUpdateTileEntity.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PacketUpdateTileEntity.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java index 3e46569b8..936d19ec5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java @@ -1,11 +1,11 @@ /* - * This file ("IButtonReactor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IButtonReactor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java index 93fb7f525..3b6e87c22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java @@ -1,11 +1,11 @@ /* - * This file ("INumberReactor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("INumberReactor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java index f3e6c9fc9..786cbfbc1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java @@ -1,11 +1,11 @@ /* - * This file ("IStringReactor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IStringReactor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java index 017310db8..445699555 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java @@ -1,11 +1,11 @@ /* - * This file ("PacketGuiButton.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PacketGuiButton.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java index 37f9d162f..df773b034 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java @@ -1,11 +1,11 @@ /* - * This file ("PacketGuiNumber.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PacketGuiNumber.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java index 5db75eb07..a8bbe7456 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java @@ -1,11 +1,11 @@ /* - * This file ("PacketGuiString.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PacketGuiString.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java index dcf06e9ba..4fb863ddd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java @@ -1,11 +1,11 @@ /* - * This file ("InitOreDict.java") is part of the Actually Additions Mod for Minecraft. + * This file ("InitOreDict.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.ore; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 9bcf39d80..5cb1fb702 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -1,11 +1,11 @@ /* - * This file ("ClientProxy.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ClientProxy.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.proxy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index d319fff77..b8ddd495c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -1,11 +1,11 @@ /* - * This file ("IProxy.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IProxy.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.proxy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index 15bbd6199..5f21fead0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -1,11 +1,11 @@ /* - * This file ("ServerProxy.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ServerProxy.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.proxy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index 1c26d7e77..677381eca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -1,11 +1,11 @@ /* - * This file ("CrusherRecipeRegistry.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CrusherRecipeRegistry.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index 080f057f9..4df41d6c9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -1,11 +1,11 @@ /* - * This file ("FuelHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("FuelHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java index 0adf325fd..39bdc73cc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java @@ -1,11 +1,11 @@ /* - * This file ("HairyBallHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("HairyBallHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java index 76b96dc15..74d34d374 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java @@ -1,11 +1,11 @@ /* - * This file ("TreasureChestHandler.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TreasureChestHandler.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java index 59113953f..be0601cfd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java @@ -1,11 +1,11 @@ /* - * This file ("IEnergyDisplay.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IEnergyDisplay.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java index c6f432f56..d96edb3e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java @@ -1,11 +1,11 @@ /* - * This file ("IEnergySaver.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IEnergySaver.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java index f6ac5393b..c96800dd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java @@ -1,11 +1,11 @@ /* - * This file ("IFluidSaver.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IFluidSaver.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java index ca5712b50..d1aed5785 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java @@ -1,11 +1,11 @@ /* - * This file ("IRedstoneToggle.java") is part of the Actually Additions Mod for Minecraft. + * This file ("IRedstoneToggle.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 77c8f61f9..90d5b65f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityAtomicReconstructor.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityAtomicReconstructor.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 1e53019ea..715985108 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index b927e26ab..7d03154bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; @@ -81,30 +81,28 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, 0); - if(coordsBlock != null){ - Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); - IBlockState stateToBreak = this.worldObj.getBlockState(coordsBlock); - if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(stateToBreak, this.worldObj, coordsBlock) > -1.0F){ - List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, stateToBreak, 0); - float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); + Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + IBlockState stateToBreak = this.worldObj.getBlockState(coordsBlock); + if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(stateToBreak, this.worldObj, coordsBlock) > -1.0F){ + List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, stateToBreak, 0); + float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); - if(Util.RANDOM.nextFloat() <= chance){ - if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); - } - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); - WorldUtil.addToInventory(this, drops, true, true); - this.markDirty(); + if(Util.RANDOM.nextFloat() <= chance){ + if(WorldUtil.addToInventory(this, drops, false, true)){ + if(!ConfigValues.lessBlockBreakingEffects){ + this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); } + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + WorldUtil.addToInventory(this, drops, true, true); + this.markDirty(); } } - else if(this.isPlacer){ - int theSlot = WorldUtil.findFirstFilledSlot(this.slots); - this.setInventorySlotContents(theSlot, WorldUtil.useItemAtSide(sideToManipulate, this.worldObj, this.pos, this.slots[theSlot])); - if(this.slots[theSlot] != null && this.slots[theSlot].stackSize <= 0){ - this.slots[theSlot] = null; - } + } + else if(this.isPlacer){ + int theSlot = WorldUtil.findFirstFilledSlot(this.slots); + this.setInventorySlotContents(theSlot, WorldUtil.useItemAtSide(sideToManipulate, this.worldObj, this.pos, this.slots[theSlot])); + if(this.slots[theSlot] != null && this.slots[theSlot].stackSize <= 0){ + this.slots[theSlot] = null; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index d11cfdab2..0f32c69eb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityCanolaPress.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityCanolaPress.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 1700ea0b6..ed536e6d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityCoalGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityCoalGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index b004276f2..a91b7d92a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityCoffeeMachine.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityCoffeeMachine.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index 5f9993bec..fdcd75c26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityCompost.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityCompost.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index e4788635a..45872dd8c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityDirectionalBreaker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityDirectionalBreaker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; @@ -84,22 +84,20 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem for(int i = 0; i < RANGE; i++){ BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); - if(coordsBlock != null){ - Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); - if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(this.worldObj.getBlockState(coordsBlock), this.worldObj, this.pos) > -1.0F){ - List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0); - float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); + Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(this.worldObj.getBlockState(coordsBlock), this.worldObj, this.pos) > -1.0F){ + List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0); + float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); - if(Util.RANDOM.nextFloat() <= chance){ - if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); - } - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); - WorldUtil.addToInventory(this, drops, true, true); - this.storage.extractEnergy(ENERGY_USE, false); - this.markDirty(); + if(Util.RANDOM.nextFloat() <= chance){ + if(WorldUtil.addToInventory(this, drops, false, true)){ + if(!ConfigValues.lessBlockBreakingEffects){ + this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); } + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); + WorldUtil.addToInventory(this, drops, true, true); + this.storage.extractEnergy(ENERGY_USE, false); + this.markDirty(); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 81211d751..3811eeafc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityDropper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityDropper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index 7b9059379..8ea0bdef1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityEnergizer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityEnergizer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 852eec83a..211d74a9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityEnervator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityEnervator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index ee2437aee..c57c2d6aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityFeeder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityFeeder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index b2775098e..5b53cac26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityFermentingBarrel.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityFermentingBarrel.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index 313b5355b..b5c044993 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityFireworkBox.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityFireworkBox.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index ce0cb97e8..31f6cd66b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityFishingNet.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityFishingNet.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index e83c081d0..08b922cb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityFluidCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityFluidCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; @@ -60,39 +60,37 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, 0); - if(coordsBlock != null){ - Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); - if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, this.worldObj) == 0 && Util.BUCKET <= this.tank.getCapacity()-this.tank.getFluidAmount()){ - if(blockToBreak instanceof IFluidBlock && ((IFluidBlock)blockToBreak).getFluid() != null){ - if(this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), false) >= Util.BUCKET){ - this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), true); - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); - } - } - else if(blockToBreak == Blocks.LAVA || blockToBreak == Blocks.FLOWING_LAVA){ - if(this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), false) >= Util.BUCKET){ - this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), true); - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); - } - } - else if(blockToBreak == Blocks.WATER || blockToBreak == Blocks.FLOWING_WATER){ - if(this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), false) >= Util.BUCKET){ - this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), true); - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); - } + Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, this.worldObj) == 0 && Util.BUCKET <= this.tank.getCapacity()-this.tank.getFluidAmount()){ + if(blockToBreak instanceof IFluidBlock && ((IFluidBlock)blockToBreak).getFluid() != null){ + if(this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), true); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } - else if(this.isPlacer && PosUtil.getBlock(coordsBlock, this.worldObj).isReplaceable(this.worldObj, coordsBlock)){ - if(this.tank.getFluidAmount() >= Util.BUCKET){ - Block block = this.tank.getFluid().getFluid().getBlock(); - if(block != null){ - BlockPos offsetPos = this.pos.offset(sideToManipulate); - Block blockPresent = PosUtil.getBlock(offsetPos, this.worldObj); - boolean placeable = !(blockPresent instanceof BlockLiquid) && !(blockPresent instanceof IFluidBlock) && blockPresent.isReplaceable(this.worldObj, offsetPos); - if(placeable){ - PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); - this.tank.drain(Util.BUCKET, true); - } + else if(blockToBreak == Blocks.LAVA || blockToBreak == Blocks.FLOWING_LAVA){ + if(this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), true); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + } + } + else if(blockToBreak == Blocks.WATER || blockToBreak == Blocks.FLOWING_WATER){ + if(this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), true); + WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + } + } + } + else if(this.isPlacer && PosUtil.getBlock(coordsBlock, this.worldObj).isReplaceable(this.worldObj, coordsBlock)){ + if(this.tank.getFluidAmount() >= Util.BUCKET){ + Block block = this.tank.getFluid().getFluid().getBlock(); + if(block != null){ + BlockPos offsetPos = this.pos.offset(sideToManipulate); + Block blockPresent = PosUtil.getBlock(offsetPos, this.worldObj); + boolean placeable = !(blockPresent instanceof BlockLiquid) && !(blockPresent instanceof IFluidBlock) && blockPresent.isReplaceable(this.worldObj, offsetPos); + if(placeable){ + PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); + this.tank.drain(Util.BUCKET, true); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java index fcbf2bed1..ce5084996 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityFluidPlacer.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityFluidPlacer extends TileEntityFluidCollector{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index 95bae6e95..7e87da414 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityFurnaceDouble.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityFurnaceDouble.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index ed4740804..93438f8c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityFurnaceSolar.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityFurnaceSolar.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index 5c22be285..dbab33fdc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityGiantChest.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityGiantChest.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index 4dfdaac40..dc9961d52 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityGreenhouseGlass.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityGreenhouseGlass.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; @@ -68,8 +68,8 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ } public BlockPos blockToFertilize(){ - for(int i = -1; i > 0; i--){ - BlockPos offset = PosUtil.offset(this.pos, 0, i, 0); + for(int i = this.pos.getY()-1; i > 0; i--){ + BlockPos offset = new BlockPos(this.pos.getX(), i, this.pos.getZ()); Block block = PosUtil.getBlock(this.pos, this.worldObj); if(block != null && !(this.worldObj.isAirBlock(offset))){ if((block instanceof IGrowable || block instanceof IPlantable) && !(block instanceof BlockGrass)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 6aa38d368..f1da78834 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityGrinder.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityGrinder.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java index ca111de61..1a9bb167f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityGrinderDouble.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityGrinderDouble extends TileEntityGrinder{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 04703218f..ff98d7cea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityHeatCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityHeatCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 19010a69f..a7a1b386a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityInputter.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityInputter.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java index 0845f636f..f4d7739bd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityInputterAdvanced.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityInputterAdvanced extends TileEntityInputter{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 884dd300c..3b8a9e1f1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityInventoryBase.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityInventoryBase.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index 554233eb2..c9f25474d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityItemRepairer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityItemRepairer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 15084e533..0107bce58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityItemViewer.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; @@ -8,6 +18,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -31,17 +42,19 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private SpecificItemHandlerInfo getSwitchedIndexHandler(int i){ List infos = this.getItemHandlerInfos(); - Collections.sort(infos); - int currentI = 0; if(infos != null && !infos.isEmpty()){ - for(GenericItemHandlerInfo info : infos){ - for(IItemHandler handler : info.handlers){ - int slotAmount = handler.getSlots(); - if(currentI+slotAmount > i){ - return new SpecificItemHandlerInfo(handler, i-currentI, info.relayInQuestion); - } - else{ - currentI += slotAmount; + Collections.sort(infos); + int currentI = 0; + if(!infos.isEmpty()){ + for(GenericItemHandlerInfo info : infos){ + for(IItemHandler handler : info.handlers){ + int slotAmount = handler.getSlots(); + if(currentI+slotAmount > i){ + return new SpecificItemHandlerInfo(handler, i-currentI, info.relayInQuestion); + } + else{ + currentI += slotAmount; + } } } } @@ -92,7 +105,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private boolean isWhitelisted(SpecificItemHandlerInfo handler, ItemStack stack){ boolean whitelisted = handler.relayInQuestion.isWhitelisted(stack); TileEntityLaserRelayItem connected = this.getConnectedRelay(); - if(connected != handler.relayInQuestion){ + if(connected != null && connected != handler.relayInQuestion){ return whitelisted && connected.isWhitelisted(stack); } else{ @@ -223,19 +236,19 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } @Override - public int compareTo(GenericItemHandlerInfo other){ - if(other != null){ - boolean thisWhitelist = this.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; - boolean otherWhitelist = other.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; + public int compareTo(@Nonnull GenericItemHandlerInfo other){ + boolean thisWhitelist = this.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; + boolean otherWhitelist = other.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; - if(!thisWhitelist && otherWhitelist){ - return 1; - } - else if(thisWhitelist && !otherWhitelist){ - return -1; - } + if(!thisWhitelist && otherWhitelist){ + return 1; + } + else if(thisWhitelist && !otherWhitelist){ + return -1; + } + else{ + return 0; } - return 0; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 2979da094..8568574fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityLaserRelay.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityLaserRelay.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 3d6add3c4..447a140b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityLaserRelayEnergy.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyReceiver; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index 545ca07ff..ffe069c0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityLaserRelayItem.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 32eeff4a5..5acf816e8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityLaserRelayItemWhitelist.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index df91f798e..89c2118db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityLavaFactoryController.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityLavaFactoryController.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index e95cf7373..29094edb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityLeafGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityLeafGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 71218f421..50294e2ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityMiner.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityMiner.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 970dd4a83..199c8576a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityOilGenerator.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityOilGenerator.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java index b2e5a5753..c1c3a2841 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityPhantomBooster.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityPhantomBooster.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java index 2985f6214..9dcedab03 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityPhantomBreaker.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityPhantomBreaker extends TileEntityPhantomPlacer{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 82dbc792b..5b3abc9ec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityPhantomEnergyface.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityPhantomEnergyface.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 145c3378a..bdf5bc832 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityPhantomItemface.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityPhantomItemface.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index 7a890b370..1692a5467 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityPhantomLiquiface.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityPhantomLiquiface.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 029a59b26..0c077bfce 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityPhantomPlacer.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityPhantomPlacer.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java index bda187eec..bc1383612 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityPhantomRedstoneface.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; import net.minecraft.block.Block; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index bcd426668..1bb0c119a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityPhantomface.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityPhantomface.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java index efc71d633..8161fcae0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java @@ -1,3 +1,13 @@ +/* + * This file ("TileEntityPlacer.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityPlacer extends TileEntityBreaker{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index 603d11e5e..3c9f3d194 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityRangedCollector.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityRangedCollector.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 839960dba..1f48b2241 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntitySmileyCloud.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntitySmileyCloud.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 5a09920e0..b59203d13 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -1,11 +1,11 @@ /* - * This file ("TileEntityXPSolidifier.java") is part of the Actually Additions Mod for Minecraft. + * This file ("TileEntityXPSolidifier.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java index 3f75021c1..26268a2d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java @@ -1,11 +1,11 @@ /* - * This file ("ThreadUpdateChecker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ThreadUpdateChecker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.update; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java index cf2d896ab..e524f6705 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java @@ -1,11 +1,11 @@ /* - * This file ("UpdateChecker.java") is part of the Actually Additions Mod for Minecraft. + * This file ("UpdateChecker.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.update; @@ -17,7 +17,7 @@ import de.ellpeck.actuallyadditions.mod.util.Util; public class UpdateChecker{ public static final String DOWNLOAD_LINK = "http://ellpeck.de/actadddownload"; - public static final String CHANGELOG_LINK = "http://ellpeck.de/actaddchangelog/"; + public static final String CHANGELOG_LINK = "http://ellpeck.de/actaddchangelog"; public static boolean checkFailed; public static boolean needsUpdateNotify; public static int updateVersionInt; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java index a7b7c691e..7c8709710 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java @@ -1,11 +1,11 @@ /* - * This file ("UpdateCheckerClientNotificationEvent.java") is part of the Actually Additions Mod for Minecraft. + * This file ("UpdateCheckerClientNotificationEvent.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.update; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 23e317e3e..543ed5d11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -1,11 +1,11 @@ /* - * This file ("AssetUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("AssetUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java index f07454a4a..b0c69d660 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java @@ -1,11 +1,11 @@ /* - * This file ("CompatUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("CompatUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java index 89eed29d7..bb9ad1ad7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java @@ -1,11 +1,11 @@ /* - * This file ("FakePlayerUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("FakePlayerUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index 372c81316..c1611bb95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -1,11 +1,11 @@ /* - * This file ("FluidStateMapper.java") is part of the Actually Additions Mod for Minecraft. + * This file ("FluidStateMapper.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java index ba8fc0fd1..6df817aa9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java @@ -1,3 +1,13 @@ +/* + * This file ("IColorProvidingItem.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck Ellpeck + */ + package de.ellpeck.actuallyadditions.mod.util; import net.minecraft.client.renderer.color.IItemColor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index bbee0a09a..4b24dffe9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -1,11 +1,11 @@ /* - * This file ("ItemUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ItemUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java index 1f4d68da4..5d6922e7a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java @@ -1,11 +1,11 @@ /* - * This file ("ModUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("ModUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index b84b4d060..94d01ad84 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -1,11 +1,11 @@ /* - * This file ("PosUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PosUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java index 53db6ddfb..5ce6162fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java @@ -1,11 +1,11 @@ /* - * This file ("RecipeUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("RecipeUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index 508a3f4f4..08415eb40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -1,11 +1,11 @@ /* - * This file ("StringUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("StringUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index da45f63bb..ad545e38e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -1,11 +1,11 @@ /* - * This file ("Util.java") is part of the Actually Additions Mod for Minecraft. + * This file ("Util.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index d964ef0ba..e8b1203a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -1,11 +1,11 @@ /* - * This file ("WorldUtil.java") is part of the Actually Additions Mod for Minecraft. + * This file ("WorldUtil.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; @@ -79,10 +79,7 @@ public class WorldUtil{ public static TileEntity getTileEntityFromSide(EnumFacing side, World world, BlockPos pos){ BlockPos c = getCoordsFromSide(side, pos, 0); - if(c != null){ - return world.getTileEntity(c); - } - return null; + return world.getTileEntity(c); } /** @@ -169,13 +166,11 @@ public class WorldUtil{ public static void dropItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ BlockPos coords = getCoordsFromSide(side, pos, 0); - if(coords != null){ - EntityItem item = new EntityItem(world, coords.getX()+0.5, coords.getY()+0.5, coords.getZ()+0.5, stack); - item.motionX = 0; - item.motionY = 0; - item.motionZ = 0; - world.spawnEntityInWorld(item); - } + EntityItem item = new EntityItem(world, coords.getX()+0.5, coords.getY()+0.5, coords.getZ()+0.5, stack); + item.motionX = 0; + item.motionY = 0; + item.motionZ = 0; + world.spawnEntityInWorld(item); } public static EnumFacing getDirectionBySidesInOrder(int side){ @@ -259,7 +254,7 @@ public class WorldUtil{ } //Load the slots again - if(!actuallyDo && backupSlots != null){ + if(!actuallyDo){ for(int i = 0; i < backupSlots.length; i++){ inventory.setInventorySlotContents(i, backupSlots[i]); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java index d20c3e30c..750a7a699 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java @@ -1,11 +1,11 @@ /* - * This file ("PersistentClientData.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PersistentClientData.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util.playerdata; @@ -34,20 +34,20 @@ public class PersistentClientData{ public static void saveBookPage(GuiBooklet gui){ NBTTagCompound baseCompound = getBaseCompound(); NBTTagCompound worldCompound = getCompoundForWorld(baseCompound); - //Save Entry etc. if(worldCompound != null){ + //Save Entry etc. worldCompound.setTag("SavedEntry", gui.currentEntrySet.writeToNBT()); worldCompound.setString("SearchWord", gui.searchField.getText()); - } - //Save Bookmarks - NBTTagList list = new NBTTagList(); - for(int i = 0; i < gui.bookmarkButtons.length; i++){ - BookmarkButton button = (BookmarkButton)gui.bookmarkButtons[i]; + //Save Bookmarks + NBTTagList list = new NBTTagList(); + for(int i = 0; i < gui.bookmarkButtons.length; i++){ + BookmarkButton button = (BookmarkButton)gui.bookmarkButtons[i]; - list.appendTag(button.assignedEntry.writeToNBT()); + list.appendTag(button.assignedEntry.writeToNBT()); + } + worldCompound.setTag("Bookmarks", list); } - worldCompound.setTag("Bookmarks", list); writeCompound(baseCompound, worldCompound); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java index 80bcb3501..6833c403b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java @@ -1,11 +1,11 @@ /* - * This file ("PersistentServerData.java") is part of the Actually Additions Mod for Minecraft. + * This file ("PersistentServerData.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense/ + * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2016 Ellpeck + * © 2015-2016 Ellpeck Ellpeck */ package de.ellpeck.actuallyadditions.mod.util.playerdata; From a2d360d61072205b72321325994f2cb633da9283 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 16 May 2016 22:54:42 +0200 Subject: [PATCH 158/322] How did I not notice this..? --- .../de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java | 2 +- .../de/ellpeck/actuallyadditions/api/booklet/BookletPage.java | 2 +- .../ellpeck/actuallyadditions/api/booklet/IBookletChapter.java | 2 +- .../de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java | 2 +- .../actuallyadditions/api/internal/IAtomicReconstructor.java | 2 +- .../de/ellpeck/actuallyadditions/api/internal/IBookletGui.java | 2 +- .../de/ellpeck/actuallyadditions/api/internal/IEntrySet.java | 2 +- .../ellpeck/actuallyadditions/api/internal/IMethodHandler.java | 2 +- .../java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java | 2 +- src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java | 2 +- .../de/ellpeck/actuallyadditions/api/lens/LensConversion.java | 2 +- .../java/de/ellpeck/actuallyadditions/api/package-info.java | 2 +- .../ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java | 2 +- .../ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java | 2 +- .../actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java | 2 +- .../de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java | 2 +- .../ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java | 2 +- .../actuallyadditions/api/recipe/LensConversionRecipe.java | 2 +- .../ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java | 2 +- .../de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java | 2 +- .../de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java | 2 +- .../actuallyadditions/mod/achievement/InitAchievements.java | 2 +- .../actuallyadditions/mod/achievement/TheAchievements.java | 2 +- .../actuallyadditions/mod/blocks/BlockAtomicReconstructor.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java | 2 +- .../actuallyadditions/mod/blocks/BlockCoalGenerator.java | 2 +- .../actuallyadditions/mod/blocks/BlockCoffeeMachine.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java | 2 +- .../actuallyadditions/mod/blocks/BlockDirectionalBreaker.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java | 2 +- .../actuallyadditions/mod/blocks/BlockFermentingBarrel.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java | 2 +- .../actuallyadditions/mod/blocks/BlockFluidCollector.java | 2 +- .../actuallyadditions/mod/blocks/BlockFurnaceDouble.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java | 2 +- .../actuallyadditions/mod/blocks/BlockGreenhouseGlass.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java | 2 +- .../actuallyadditions/mod/blocks/BlockHeatCollector.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java | 2 +- .../mod/blocks/BlockLavaFactoryController.java | 2 +- .../actuallyadditions/mod/blocks/BlockLeafGenerator.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java | 2 +- .../actuallyadditions/mod/blocks/BlockPhantomBooster.java | 2 +- .../actuallyadditions/mod/blocks/BlockRangedCollector.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java | 2 +- .../actuallyadditions/mod/blocks/BlockTreasureChest.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java | 2 +- .../actuallyadditions/mod/blocks/base/BlockBushBase.java | 2 +- .../actuallyadditions/mod/blocks/base/BlockContainerBase.java | 2 +- .../actuallyadditions/mod/blocks/base/BlockFluidFlowing.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java | 2 +- .../actuallyadditions/mod/blocks/base/ItemBlockBase.java | 2 +- .../mod/blocks/metalists/TheColoredLampColors.java | 2 +- .../actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java | 2 +- .../actuallyadditions/mod/blocks/metalists/TheWildPlants.java | 2 +- .../actuallyadditions/mod/blocks/render/RenderCompost.java | 2 +- .../mod/blocks/render/RenderReconstructorLens.java | 2 +- .../actuallyadditions/mod/blocks/render/RenderSmileyCloud.java | 2 +- .../de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java | 2 +- .../actuallyadditions/mod/booklet/GuiAAAchievements.java | 2 +- .../de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java | 2 +- .../de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java | 2 +- .../actuallyadditions/mod/booklet/button/BookmarkButton.java | 2 +- .../actuallyadditions/mod/booklet/button/IndexButton.java | 2 +- .../actuallyadditions/mod/booklet/button/TexturedButton.java | 2 +- .../actuallyadditions/mod/booklet/chapter/BookletChapter.java | 2 +- .../mod/booklet/chapter/BookletChapterCoffee.java | 2 +- .../mod/booklet/chapter/BookletChapterCrusher.java | 2 +- .../actuallyadditions/mod/booklet/entry/BookletEntry.java | 2 +- .../mod/booklet/entry/BookletEntryAllSearch.java | 2 +- .../ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java | 2 +- .../actuallyadditions/mod/booklet/page/BookletPageAA.java | 2 +- .../actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java | 2 +- .../actuallyadditions/mod/booklet/page/PageCrafting.java | 2 +- .../actuallyadditions/mod/booklet/page/PageCrusherRecipe.java | 2 +- .../ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java | 2 +- .../ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java | 2 +- .../actuallyadditions/mod/booklet/page/PageReconstructor.java | 2 +- .../actuallyadditions/mod/booklet/page/PageTextOnly.java | 2 +- .../ellpeck/actuallyadditions/mod/config/ConfigCategories.java | 2 +- .../de/ellpeck/actuallyadditions/mod/config/ConfigValues.java | 2 +- .../actuallyadditions/mod/config/ConfigurationHandler.java | 2 +- .../ellpeck/actuallyadditions/mod/config/GuiConfiguration.java | 2 +- .../de/ellpeck/actuallyadditions/mod/config/GuiFactory.java | 2 +- .../actuallyadditions/mod/config/values/ConfigBoolValues.java | 2 +- .../actuallyadditions/mod/config/values/ConfigCrafting.java | 2 +- .../actuallyadditions/mod/config/values/ConfigIntValues.java | 2 +- .../ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java | 2 +- .../ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java | 2 +- .../de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java | 2 +- .../de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java | 2 +- .../de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java | 2 +- .../de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java | 2 +- .../de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java | 2 +- .../de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java | 2 +- .../actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java | 2 +- .../ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java | 2 +- .../de/ellpeck/actuallyadditions/mod/entity/InitEntities.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java | 2 +- .../ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java | 2 +- .../de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java | 2 +- .../de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java | 2 +- .../ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java | 2 +- .../de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java | 2 +- .../actuallyadditions/mod/event/WorldDecorationEvent.java | 2 +- .../ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java | 2 +- .../actuallyadditions/mod/gen/JamVillagerTradeHandler.java | 2 +- src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java | 2 +- .../mod/gen/VillageComponentCustomCropField.java | 2 +- .../actuallyadditions/mod/gen/VillageComponentJamHouse.java | 2 +- .../mod/gen/VillageCustomCropFieldHandler.java | 2 +- .../actuallyadditions/mod/gen/VillageJamHouseHandler.java | 2 +- .../actuallyadditions/mod/inventory/ContainerBreaker.java | 2 +- .../actuallyadditions/mod/inventory/ContainerCanolaPress.java | 2 +- .../actuallyadditions/mod/inventory/ContainerCoalGenerator.java | 2 +- .../actuallyadditions/mod/inventory/ContainerCoffeeMachine.java | 2 +- .../actuallyadditions/mod/inventory/ContainerCrafter.java | 2 +- .../mod/inventory/ContainerDirectionalBreaker.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java | 2 +- .../actuallyadditions/mod/inventory/ContainerDropper.java | 2 +- .../actuallyadditions/mod/inventory/ContainerEnergizer.java | 2 +- .../actuallyadditions/mod/inventory/ContainerEnervator.java | 2 +- .../actuallyadditions/mod/inventory/ContainerFeeder.java | 2 +- .../mod/inventory/ContainerFermentingBarrel.java | 2 +- .../mod/inventory/ContainerFluidCollector.java | 2 +- .../actuallyadditions/mod/inventory/ContainerFurnaceDouble.java | 2 +- .../actuallyadditions/mod/inventory/ContainerGiantChest.java | 2 +- .../actuallyadditions/mod/inventory/ContainerGrinder.java | 2 +- .../actuallyadditions/mod/inventory/ContainerInputter.java | 2 +- .../mod/inventory/ContainerLaserRelayItemWhitelist.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java | 2 +- .../actuallyadditions/mod/inventory/ContainerOilGenerator.java | 2 +- .../actuallyadditions/mod/inventory/ContainerPhantomPlacer.java | 2 +- .../mod/inventory/ContainerRangedCollector.java | 2 +- .../actuallyadditions/mod/inventory/ContainerRepairer.java | 2 +- .../actuallyadditions/mod/inventory/ContainerSmileyCloud.java | 2 +- .../actuallyadditions/mod/inventory/ContainerXPSolidifier.java | 2 +- .../de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiCanolaPress.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java | 2 +- .../mod/inventory/gui/GuiDirectionalBreaker.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiEnergizer.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiEnervator.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java | 2 +- .../mod/inventory/gui/GuiFermentingBarrel.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiFluidCollector.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiGiantChest.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiInputter.java | 2 +- .../mod/inventory/gui/GuiLaserRelayItemWhitelist.java | 2 +- .../ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiOilGenerator.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiRangedCollector.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiRepairer.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java | 2 +- .../actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java | 2 +- .../actuallyadditions/mod/inventory/slot/SlotFilter.java | 2 +- .../actuallyadditions/mod/inventory/slot/SlotImmovable.java | 2 +- .../actuallyadditions/mod/inventory/slot/SlotOutput.java | 2 +- .../ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/InitItems.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemBattery.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java | 2 +- .../actuallyadditions/mod/items/ItemChestToCrateUpgrade.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java | 2 +- .../actuallyadditions/mod/items/ItemCrafterOnAStick.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java | 2 +- .../ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java | 2 +- .../actuallyadditions/mod/items/ItemFireworkBoxMinecart.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java | 2 +- .../actuallyadditions/mod/items/ItemPhantomConnector.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java | 2 +- .../mod/items/ItemRarmorModuleReconstructor.java | 2 +- .../ellpeck/actuallyadditions/mod/items/ItemResonantRice.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java | 2 +- .../actuallyadditions/mod/items/ItemSolidifiedExperience.java | 2 +- .../ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java | 2 +- .../actuallyadditions/mod/items/ItemWaterRemovalRing.java | 2 +- .../ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java | 2 +- .../actuallyadditions/mod/items/lens/LensDetonation.java | 2 +- .../actuallyadditions/mod/items/lens/LensDisruption.java | 2 +- .../actuallyadditions/mod/items/lens/LensRecipeHandler.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java | 2 +- .../actuallyadditions/mod/items/metalists/TheCrystals.java | 2 +- .../ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java | 2 +- .../ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java | 2 +- .../ellpeck/actuallyadditions/mod/items/metalists/TheJams.java | 2 +- .../actuallyadditions/mod/items/metalists/TheMiscItems.java | 2 +- .../actuallyadditions/mod/items/metalists/ThePotionRings.java | 2 +- .../actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java | 2 +- .../actuallyadditions/mod/jei/RecipeWrapperWithButton.java | 2 +- .../mod/jei/booklet/BookletRecipeCategory.java | 2 +- .../actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java | 2 +- .../actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java | 2 +- .../mod/jei/coffee/CoffeeMachineRecipeCategory.java | 2 +- .../mod/jei/coffee/CoffeeMachineRecipeHandler.java | 2 +- .../mod/jei/coffee/CoffeeMachineRecipeWrapper.java | 2 +- .../mod/jei/crusher/CrusherRecipeCategory.java | 2 +- .../actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java | 2 +- .../actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java | 2 +- .../mod/jei/reconstructor/ReconstructorRecipeCategory.java | 2 +- .../mod/jei/reconstructor/ReconstructorRecipeHandler.java | 2 +- .../mod/jei/reconstructor/ReconstructorRecipeWrapper.java | 2 +- .../actuallyadditions/mod/material/InitArmorMaterials.java | 2 +- .../actuallyadditions/mod/material/InitToolMaterials.java | 2 +- .../de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java | 2 +- .../de/ellpeck/actuallyadditions/mod/misc/DamageSources.java | 2 +- .../actuallyadditions/mod/misc/DispenserHandlerFertilize.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java | 2 +- .../actuallyadditions/mod/misc/EntityColoredParticleFX.java | 2 +- .../actuallyadditions/mod/misc/LaserRelayConnectionHandler.java | 2 +- .../de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java | 2 +- .../de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java | 2 +- .../actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java | 2 +- .../actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java | 2 +- .../actuallyadditions/mod/misc/special/RenderSpecial.java | 2 +- .../actuallyadditions/mod/misc/special/SpecialRenderInit.java | 2 +- .../mod/misc/special/ThreadSpecialFetcher.java | 2 +- .../de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java | 2 +- .../actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java | 2 +- .../de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java | 2 +- .../actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java | 2 +- .../de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java | 2 +- .../de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java | 2 +- .../actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java | 2 +- .../ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java | 2 +- .../actuallyadditions/mod/nei/NEIReconstructorRecipe.java | 2 +- .../de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java | 2 +- .../actuallyadditions/mod/nei/NEITreasureChestRecipe.java | 2 +- .../de/ellpeck/actuallyadditions/mod/network/PacketHandler.java | 2 +- .../ellpeck/actuallyadditions/mod/network/PacketParticle.java | 2 +- .../actuallyadditions/mod/network/PacketUpdateTileEntity.java | 2 +- .../actuallyadditions/mod/network/gui/IButtonReactor.java | 2 +- .../actuallyadditions/mod/network/gui/INumberReactor.java | 2 +- .../actuallyadditions/mod/network/gui/IStringReactor.java | 2 +- .../actuallyadditions/mod/network/gui/PacketGuiButton.java | 2 +- .../actuallyadditions/mod/network/gui/PacketGuiNumber.java | 2 +- .../actuallyadditions/mod/network/gui/PacketGuiString.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java | 2 +- .../de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java | 2 +- .../de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java | 2 +- .../actuallyadditions/mod/recipe/CrusherRecipeRegistry.java | 2 +- .../de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java | 2 +- .../ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java | 2 +- .../actuallyadditions/mod/recipe/TreasureChestHandler.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java | 2 +- .../mod/tile/TileEntityAtomicReconstructor.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java | 2 +- .../actuallyadditions/mod/tile/TileEntityCanolaPress.java | 2 +- .../actuallyadditions/mod/tile/TileEntityCoalGenerator.java | 2 +- .../actuallyadditions/mod/tile/TileEntityCoffeeMachine.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java | 2 +- .../mod/tile/TileEntityDirectionalBreaker.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java | 2 +- .../actuallyadditions/mod/tile/TileEntityFermentingBarrel.java | 2 +- .../actuallyadditions/mod/tile/TileEntityFireworkBox.java | 2 +- .../actuallyadditions/mod/tile/TileEntityFishingNet.java | 2 +- .../actuallyadditions/mod/tile/TileEntityFluidCollector.java | 2 +- .../actuallyadditions/mod/tile/TileEntityFluidPlacer.java | 2 +- .../actuallyadditions/mod/tile/TileEntityFurnaceDouble.java | 2 +- .../actuallyadditions/mod/tile/TileEntityFurnaceSolar.java | 2 +- .../actuallyadditions/mod/tile/TileEntityGiantChest.java | 2 +- .../actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java | 2 +- .../actuallyadditions/mod/tile/TileEntityGrinderDouble.java | 2 +- .../actuallyadditions/mod/tile/TileEntityHeatCollector.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java | 2 +- .../actuallyadditions/mod/tile/TileEntityInputterAdvanced.java | 2 +- .../actuallyadditions/mod/tile/TileEntityInventoryBase.java | 2 +- .../actuallyadditions/mod/tile/TileEntityItemRepairer.java | 2 +- .../actuallyadditions/mod/tile/TileEntityItemViewer.java | 2 +- .../actuallyadditions/mod/tile/TileEntityLaserRelay.java | 2 +- .../actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java | 2 +- .../actuallyadditions/mod/tile/TileEntityLaserRelayItem.java | 2 +- .../mod/tile/TileEntityLaserRelayItemWhitelist.java | 2 +- .../mod/tile/TileEntityLavaFactoryController.java | 2 +- .../actuallyadditions/mod/tile/TileEntityLeafGenerator.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java | 2 +- .../actuallyadditions/mod/tile/TileEntityOilGenerator.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomBooster.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomBreaker.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomItemface.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomPlacer.java | 2 +- .../mod/tile/TileEntityPhantomRedstoneface.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomface.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java | 2 +- .../actuallyadditions/mod/tile/TileEntityRangedCollector.java | 2 +- .../actuallyadditions/mod/tile/TileEntitySmileyCloud.java | 2 +- .../actuallyadditions/mod/tile/TileEntityXPSolidifier.java | 2 +- .../actuallyadditions/mod/update/ThreadUpdateChecker.java | 2 +- .../de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java | 2 +- .../mod/update/UpdateCheckerClientNotificationEvent.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java | 2 +- .../de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java | 2 +- .../de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java | 2 +- .../ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java | 2 +- src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java | 2 +- .../mod/util/playerdata/PersistentClientData.java | 2 +- .../mod/util/playerdata/PersistentServerData.java | 2 +- 381 files changed, 381 insertions(+), 381 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index b1121ac86..672a84f33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java index 8f6bfb708..e8842732a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java index 9730575a2..41179427b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletChapter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java index 50394efbb..a46b9dc44 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/IBookletEntry.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java index 1f72b5536..bcd2153c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IAtomicReconstructor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.internal; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java index 5aa51bf4e..1081d84da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.internal; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java index cc924adf4..7340e315b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IEntrySet.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.internal; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java index d52887aca..388c1971b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IMethodHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.internal; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java index bfc67122e..339e24820 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/ILensItem.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java index 64bb1941c..d1a1c3004 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/Lens.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java index 7bf050b63..a187717bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java b/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java index 73e5863c0..1a290e29b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/package-info.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ @API(owner = ActuallyAdditionsAPI.MOD_ID, apiVersion = ActuallyAdditionsAPI.API_VERSION, provides = ActuallyAdditionsAPI.API_ID) package de.ellpeck.actuallyadditions.api; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java index 295076b34..ddd719438 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java index 025cab8c3..b195fc671 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CoffeeIngredient.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java index 6d9935f72..87b6095e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/ColorLensChangerByDyeMeta.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java index 94dec798e..530b892cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CrusherRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java index 873f119cf..e80da6b2a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/IColorLensChanger.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java index efcf2e8aa..4def0f0f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java index 7ee6d3aea..29873bb7c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java b/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java index 6a3e9d7f6..80b6729ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/tile/IPhantomTile.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.api.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 58a6fbe45..be9d2d245 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java index 96f30fb2a..a2f9b415f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.achievement; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java index a05bee1e2..91e15beb3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.achievement; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 49a07aa49..2b417ff34 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java index c659f8f51..ffcab7678 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBlackLotus.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index 0e7eb8290..af3c12ba2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 3e9ce3d33..5a56dabea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index bb769fd7e..f73329b7f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 633f7f027..e2055d1e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index ef0a5935b..8f3a99026 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 7313e14cd..3dd70aaa8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index 1549c2f78..083d3ba9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index 21ffa9d0b..0ffd5342b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index 439c1dedb..502b455b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java index 34b858746..559b7f69e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index 8a9222479..c9b558659 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index 5bdeeb1c4..584a93fa0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java index 6fa79b9a8..f7cb32596 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index b5c77544b..e981c5866 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index df6fa97c7..3d7aa97c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index 624d98a11..0983bbbe8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index d4bdf27a8..4359881d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java index 3a0a44839..1aa04970c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index aba472621..05f0722d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index b8dfbca0d..6a0d28d4c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index a1c30dcf6..ffab840ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java index e1f1e158f..0106f57e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index 9e1005344..4423ff778 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index 749c58698..9de86c201 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index 28c32b17f..883a2b3dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index bd3a5e032..19ad88cbb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index cf9082756..32f96858f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java index c697f25af..7459c4c06 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java index 23588dba8..ed1d2ebd7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index a615e4278..452002a96 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index e075f8994..6203a5c6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 73915ce8a..b0883ea80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index 972cf7115..d8a095ba6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index 4ea74795c..5ddd375e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java index fce11ebba..c14e25eae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index e500c6277..4dff97682 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index da9763969..3777eda2c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index e08920456..345294052 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 1a5374715..9d6aeb85f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 83ac0de7f..e696a1a56 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index 90ce2f589..b8770aa39 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java index 1f63dac41..8475604f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/IHudDisplay.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index e80e9e106..d6c3c553e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index aa5043483..38a6fa8d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index 55a7cf025..54b6bc22a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index c4e77e4e7..e2469b7c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index 35c4df6a0..71ca2925d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 5a83bf300..a70e503ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index b6a40b8ec..ef049fd32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index db31f8fb7..3316ae28f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java index 89c6c04a4..b8a3ab6bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java index c0bc99a76..ecfad5592 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheMiscBlocks.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java index a441f6f18..28eaf04a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheWildPlants.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index 90165222f..d3d1557a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.render; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index 0cdde1858..24d749c32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.render; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index d7863c45e..02a9a3b74 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.blocks.render; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index c33813a33..4f88d88c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java index 52b61ca2e..117f5fa25 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 620a190a7..f2bf68080 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 3c934dcbb..ef38bf9ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index e1d62430f..56358ea88 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.button; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index bea62f103..76e39663a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.button; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index 74edd1462..de8815d21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.button; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index 36b23604b..8c095d393 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.chapter; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java index 909bda254..414840b8f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.chapter; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java index c6cbafdaa..3cd608e5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.chapter; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java index 6ea6c37b5..a1d7902bd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntry.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.entry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java index 3ecad48be..e82c7e744 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.entry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java index 313563212..5ccb632f7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.entry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java index 4a56bd6de..e697dc69b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java index 39dc11a65..09da186f1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index a619a0229..39f675063 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index 79506db4f..429dc35ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index ab91f082e..4e3ba0f8c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java index b271125a9..5ecdf1136 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index 00913b407..6f525382d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java index 8c4d6aba1..c13bcf77b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.booklet.page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java index a690c45d9..70349d8ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index 00d3a61f6..e8143c8c2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index a661502e8..515be1d8a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java index 661c2da8a..bc523e7b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiConfiguration.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java index 5540bad0b..5b5da4615 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 72f4539fa..74d05525c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config.values; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index 133065418..47bc54091 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config.values; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java index f159538df..6d7a91006 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.config.values; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index f595547d4..4b3a1315e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index ea13c0fac..f15aa8e9c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java index 7c28e618a..9ae14c044 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java index 57dca57d1..7c6a1d7d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 284d367fc..5e3065495 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index b5fbb7530..7cc54cd64 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java index 32a2d8cf5..fd67cf182 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.crafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 5479b8d0e..8e67c02e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.creative; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java index f981b39d7..32f9e63da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.entity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java index df41879fb..809e17e28 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.entity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java index 2b8f0dd02..7e9371573 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.entity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java index 5f55b873a..2faa47750 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java index 8dfdc7968..c15e0e0f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index f04d33520..2333e9b75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java index 2f40dbbbb..72050a4e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java index b80a36a02..a6168f2b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java index 8dcab818a..faaf2dc12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 7ba8f90dc..9390cf74f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index c55a4aab9..da16ff8ea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index 1d7ff205c..21c0f808f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 71cd54f45..472f3fe10 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.event; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java index 4bf1bc563..c1bd9b6ff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/FluidAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.fluids; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java index ab3aa0166..98f73541d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.fluids; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java index 7fd06f9d5..42911866c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index d259200d7..e64951714 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index a9d2bcf54..2f9fd0925 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index 9df54a8f6..f1f0110d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index 1486545d8..ae103bbfd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java index 03beb12de..198e85d57 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageCustomCropFieldHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java index be505da63..ac2809b31 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageJamHouseHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.gen; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index f4b5b23f2..ff7d973be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index 3ea5df3d7..98e6f994f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index e323a9701..6580ec0d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index 766b286a0..8b480ec04 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index ce6884a44..f8436c4d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index d5861d404..cbfa01211 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index 3e6b2813c..cecb638a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index 25afb9fa6..d46f03f34 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 18b246952..56eacee7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 4f6529846..db8b79995 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index b6f12d630..7fa1a5620 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index b049878d4..418499da6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index e04b3b5b4..a9aef28d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index fedf70c6b..3c02b9ddd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 20d6dc92e..9a511087a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index eda54b0d9..456e88f88 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 7e969ab4f..449402c2f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index eee32cf93..11007e9de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 2b6671a0c..1b500582f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 95d6e2f79..7bdacc476 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index 7cce38d01..4fc112576 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index e01e96812..9060f34ff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index 7b5b2b1fe..460973a90 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java index ad92f124a..7e32752a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index fef13feb7..95ce9a7f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index 9431b5293..ad62baaf1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java index 17702341a..fcc0a972b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java index f84f7f6bd..9b787e683 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java index 80c587492..a435052f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 63a1344e1..3194c7995 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java index 1730b2908..4988e219f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java index a1522fc6a..e2c0ca26d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java index fb68bb13e..58823fdad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java index 2f4cc5c0e..5539a47ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java index ab54d5215..2f080dbbb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java index 69d2114b3..a55d4bea4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java index b2c45c534..9d4546013 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java index 1a79c8bec..dcb6aadaf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java index e4d69c04e..2238539d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java index 4baab8f37..931478215 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index 90f688909..dceeac866 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java index 993d9d411..d815f1c89 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 1926f78ac..0ab68f096 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index 14d6a043b..bbd77098f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index a688a0086..caf811bbe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index 5571b488e..81b1f3842 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java index d76208187..952ae36a3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index 6a8c8e865..17c93bf39 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 1f4939f5c..7fee48ddb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index 64bae0eda..3e11b4d09 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index c2057b8bf..e23914994 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java index 9f7cb5d36..d79532795 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.slot; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java index 277ec57be..897cef9f7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.slot; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java index 2eece5500..1cd4ed9ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotOutput.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.inventory.slot; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java index 131546425..bb0fe2f7b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 75d009276..e60ccea3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 7ff24acd4..48d33573b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index fe4932fc9..0c31cf28a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java index 4f80708d2..19fc959ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 3ec17dcc9..e5a2479e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index 32797572e..de44d2ff9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index 388dcbfda..018de5430 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java index 003698d73..51622519d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java index f3443eff3..7ad64abbb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 44b1841aa..d931e2ca3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 00907f0c6..bbe86937d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java index 79f1fd2f9..c076bfde1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 601538b90..17fa26b8e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index 5d7b51e9d..08563140e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java index 8c76e25eb..a078784fe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 1bebbe094..f1fe99480 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java index 6b215de75..7c93d1bb2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index edcd69ddb..11427f011 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index 0d755aaf9..d45db89ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index dd95ae6e3..8fdefb846 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index 06da31f84..ca40804f1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index ba94a6f9c..75a99c2e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 5433cfed6..c3f0ec950 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index 81f94f184..9f1d30b7f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java index bae0b854c..0058045b9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index fe4970b63..59df1de4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 9b5cd5753..cf75a861a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index 0039db059..79019a955 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index a0e07c307..82b32282b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index 81b2a3778..c2e19bcda 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 0cd6cfe18..90fb054d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index 4cab8b5a2..99babedc2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index fe5d61eff..5c1c7bf21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index a79f1f040..82547e527 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index 1d32fae1d..570438f2d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index c7e9b099b..c2165d225 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index bfec90675..a9fac2555 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 0d67fe3b9..c1df378d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index a00dbb530..3b7d018dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index d25b51340..0b3141e2b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index 0e3cb1888..5d9e6e36d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index 419b83765..a9e93815f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 7fcfe94c4..8a88a1e89 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index f96611c28..f492a2514 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index 9c97e14cd..a9beaa7cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.base; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java index 9f40e9179..f2fd6ed79 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index a4868ef1e..08d5a4f3a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java index b775c93e2..d74e5b6da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java index 2a602a22c..017291cd9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java index bff78205a..ba55e8126 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java index 5e175c355..4e55a5fa7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java index d24bb9df1..572e18895 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.lens; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java index 2023c3912..27c235633 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheCrystals.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java index bdc3a222c..1ffc2e117 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheDusts.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java index eeb5e2b97..998143dbd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheFoods.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java index b545cddac..4e44b5cb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheJams.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java index e367a7a1f..ab1fc0009 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java index d38de6336..863df3032 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/ThePotionRings.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.items.metalists; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index b14e09905..5a2815ee3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java index 1be528381..afddebba9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index cccb2e9cc..ab7ee1467 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java index 33a224d70..a61b1ff7d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index 0462ce14a..e0065e683 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java index a11f109d0..c99f9eeed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.coffee; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java index 5183f9605..fe575fc22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.coffee; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index e9ec62477..aeec37750 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.coffee; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java index d35fc4345..8806aaf7d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.crusher; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java index 12d04e76d..690024479 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.crusher; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java index 13b48b5f3..66032a2ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.crusher; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java index a5eb30d0d..38ffdd941 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.reconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java index 10370ed68..fb6ed5630 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.reconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java index 3caf25099..fd7d35066 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.jei.reconstructor; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index dbcf3b8d6..fd9566658 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.material; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java index e6b8e299a..1c4f9feb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.material; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java index 98eca7a82..a6cd7602f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 8a066e6b7..796456ae9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index 48f21c546..9322f22d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java index 2f38f0a32..1ef86a672 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java index eb8523558..b6af18e4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 4c1eb9d9e..38d25fc5c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index 12f6fcc95..54bd7b0e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java index a4174845c..0105f55fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index 20f8a26a4..a2e04be56 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java index da8871f7b..6c5b90f88 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/ISmileyCloudEasterEgg.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.cloud; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 13d1adcb7..d57a1de6d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.cloud; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java index 9f7303753..35618b8a3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/RenderSpecial.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.special; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index 4888f758a..119b4eab3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.special; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java index 516232490..e34a9bf08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/ThreadSpecialFetcher.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.misc.special; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java index 63c0385c3..0c5550c9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java index e26b9dcc3..31f086e20 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java index 1e826e08d..e004fb9b3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java index 8b5de32e5..2cf4e03b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java index df4c32ba2..e281a37cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java index 23db6e621..6b0af03e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java index 6c8653919..554545af7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java index 363917801..348cdbc26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java index 43f4b8dea..655e71a82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java index acc580ca5..888ce197e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java index dc81fb8e5..e8603cfaa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.nei; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 10e43d8d2..45bd82260 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index e3f69eb5f..59331ec55 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java index 2983d6f6b..7c09d3fc8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java index 936d19ec5..b53f86187 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IButtonReactor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java index 3b6e87c22..c9f4f4e30 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/INumberReactor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java index 786cbfbc1..9584e303a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/IStringReactor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java index 445699555..1458e0ae8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java index df773b034..d2f760c75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java index a8bbe7456..eebd62ffb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.network.gui; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java index 4fb863ddd..b83861a1e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.ore; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 5cb1fb702..f5b7dacaa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.proxy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index b8ddd495c..cd5a4f494 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.proxy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index 5f21fead0..7ee18a66e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.proxy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index 677381eca..cc946e6d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index 4df41d6c9..b33f75ece 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java index 39bdc73cc..97a642993 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java index 74d34d374..2f848a05c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java index be0601cfd..fb6ba9aa9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java index d96edb3e7..bf36a147c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java index c96800dd3..90a706d69 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java index d1aed5785..60a877c26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 90d5b65f2..5f553df15 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 715985108..d6dc24fec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 7d03154bf..e8bedd46e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 0f32c69eb..04c3ec2db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index ed536e6d0..f3f180609 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index a91b7d92a..da11a8764 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index fdcd75c26..daccdcb66 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 45872dd8c..85ed6fa8d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 3811eeafc..7d7758543 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index 8ea0bdef1..7aad72f3a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 211d74a9e..ce5ca8e4e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index c57c2d6aa..5b14bebf4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index 5b53cac26..5eb3c205e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index b5c044993..e4d49acc5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index 31f6cd66b..9b41dc36c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 08b922cb5..79d601778 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java index ce5084996..de7bc752d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidPlacer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index 7e87da414..f1d8ac5ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 93438f8c0..33c99ea2d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index dbab33fdc..dc259ff9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index dc9961d52..3f555a6f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index f1da78834..2b540f197 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java index 1a9bb167f..fd809f905 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinderDouble.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index ff98d7cea..20e594eea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index a7a1b386a..fcd91c5b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java index f4d7739bd..f6f441c7c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputterAdvanced.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 3b8a9e1f1..880ea1a16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index c9f25474d..f8192a96c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 0107bce58..937b8bc92 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 8568574fb..152f56691 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 447a140b0..0947ac40b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index ffe069c0b..c9c3b8a43 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 5acf816e8..040999203 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 89c2118db..338299bbe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 29094edb5..9c80b6e12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 50294e2ee..c175507c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 199c8576a..df2dbbbf2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java index c1c3a2841..4627b68c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBooster.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java index 9dcedab03..808fe96ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomBreaker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 5b3abc9ec..5c636ef9a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index bdf5bc832..05ba3042a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index 1692a5467..85236a0f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 0c077bfce..8462f8c95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java index bc1383612..53004ae6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 1bb0c119a..3192446ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java index 8161fcae0..c68c2e5f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlacer.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index 3c9f3d194..7fe3f936b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 1f48b2241..820b0b8f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index b59203d13..26c9b797c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java index 26268a2d7..8db0addf9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/ThreadUpdateChecker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.update; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java index e524f6705..25866dd9b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.update; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java index 7c8709710..a04e2b562 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.update; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 543ed5d11..b7160f304 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java index b0c69d660..85b0f6eb3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java index bb9ad1ad7..71647cbc0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index c1611bb95..5d465b788 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java index 6df817aa9..b28fd3e32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/IColorProvidingItem.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index 4b24dffe9..4bfe8c252 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java index 5d6922e7a..f8c42d172 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index 94d01ad84..be19a509b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java index 5ce6162fa..0dd5cf3ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index 08415eb40..e36e07e0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index ad545e38e..424b3ef4b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index e8b1203a5..143126385 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java index 750a7a699..66de9c155 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util.playerdata; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java index 6833c403b..d012513aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java @@ -5,7 +5,7 @@ * http://ellpeck.de/actaddlicense * View the source code at https://github.com/Ellpeck/ActuallyAdditions * - * © 2015-2016 Ellpeck Ellpeck + * © 2015-2016 Ellpeck */ package de.ellpeck.actuallyadditions.mod.util.playerdata; From fd407d3983037832b12090ce4d80cf6c376c0673 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 17 May 2016 11:34:50 +0200 Subject: [PATCH 159/322] Changed client data and fake player to completely lower case --- .../de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 2 +- .../de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index f5b7dacaa..5388fc3a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -95,7 +95,7 @@ public class ClientProxy implements IProxy{ ModUtil.LOGGER.warn("You have turned Seasonal Mode off. Therefore, you are evil."); } - PersistentClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"Data.dat")); + PersistentClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"data.dat")); for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), entry.getValue()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java index 71647cbc0..49f92d963 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java @@ -20,7 +20,7 @@ import java.util.UUID; public class FakePlayerUtil{ - private static final String FAKE_NAME = ModUtil.MOD_ID+"FakePlayer"; + private static final String FAKE_NAME = ModUtil.MOD_ID+"fakeplayer"; private static final GameProfile FAKE_PROFILE = new GameProfile(UUID.nameUUIDFromBytes(FAKE_NAME.getBytes()), FAKE_NAME); private static FakePlayer theFakePlayer; From b5e8cf03452754c1145a20da1858514be4ad04dd Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 17 May 2016 15:59:12 +0200 Subject: [PATCH 160/322] Start of cave world. Whaaaat? --- .../mod/ActuallyAdditions.java | 7 + .../mod/config/ConfigValues.java | 2 + .../mod/gen/CaveWorldType.java | 145 ++++++++++++++++++ .../actuallyadditions/mod/misc/WorldData.java | 70 +++++---- .../mod/proxy/ClientProxy.java | 4 - .../mod/tile/TileEntityXPSolidifier.java | 4 +- 6 files changed, 197 insertions(+), 35 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index be9d2d245..a5bebb08e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.booklet.InitBooklet; +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.crafting.CrusherCrafting; import de.ellpeck.actuallyadditions.mod.crafting.InitCrafting; @@ -21,6 +22,7 @@ import de.ellpeck.actuallyadditions.mod.crafting.ItemCrafting; import de.ellpeck.actuallyadditions.mod.entity.InitEntities; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; +import de.ellpeck.actuallyadditions.mod.gen.CaveWorldType; import de.ellpeck.actuallyadditions.mod.gen.InitVillager; import de.ellpeck.actuallyadditions.mod.gen.OreGen; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; @@ -104,6 +106,11 @@ public class ActuallyAdditions{ InitEvents.init(); InitCrafting.init(); DungeonLoot.init(); + + if(ConfigValues.caveWorld){ + new CaveWorldType(); + } + proxy.init(event); ModUtil.LOGGER.info("Initialization Finished."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index e8143c8c2..fd5ef7651 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -41,6 +41,8 @@ public class ConfigValues{ public static boolean lessParticles; public static boolean lessBlockBreakingEffects; + public static boolean caveWorld = true; //TODO Make this proper + public static void defineConfigValues(Configuration config){ for(ConfigCrafting currConf : craftingConfig){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java new file mode 100644 index 000000000..9395fbd4e --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java @@ -0,0 +1,145 @@ +/* + * This file ("CaveWorldType.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.gen; + +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentServerData; +import net.minecraft.block.BlockPlanks; +import net.minecraft.block.BlockSlab; +import net.minecraft.block.BlockWoodSlab; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldType; +import net.minecraft.world.chunk.IChunkGenerator; +import net.minecraft.world.gen.ChunkProviderFlat; +import net.minecraft.world.gen.feature.WorldGenTrees; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class CaveWorldType extends WorldType{ + + public CaveWorldType(){ + //Name can't be longer than 16 :'( + super("actaddcaveworld"); + + Util.registerEvent(this); + } + + public static boolean isCave(World world){ + return ConfigValues.caveWorld && world.getWorldType() instanceof CaveWorldType; + } + + @Override + public IChunkGenerator getChunkGenerator(World world, String generatorOptions){ + return new ChunkProviderFlat(world, world.getSeed(), false, "3;minecraft:bedrock,254*minecraft:stone,minecraft:bedrock;2;"); + } + + @Override + public int getSpawnFuzz(WorldServer world, MinecraftServer server){ + return 1; + } + + private void generateCave(World world, BlockPos center){ + this.makeSphere(world, center, 8); + this.makeSphere(world, center.add(-3, 4, 3), 4); + this.makeSphere(world, center.add(4, 6, 1), 4); + this.makeSphere(world, center.add(3, 4, -3), 6); + this.makeSphere(world, center.add(4, -2, -3), 2); + this.makeSphere(world, center.add(5, 0, -3), 4); + this.makeSphere(world, center.add(1, 4, 3), 6); + this.makeSphere(world, center.add(-5, 1, 1), 4); + this.makeSphere(world, center.add(-1, 1, -7), 6); + this.makeSphere(world, center.add(-2, -1, 8), 3); + + world.setBlockState(center.add(-1, -5, -8), Blocks.DIRT.getStateFromMeta(1)); + WorldGenTrees trees = new WorldGenTrees(true); + trees.generate(world, Util.RANDOM, center.add(-1, -4, -8)); + + for(int z = 0; z <= 24; z++){ + for(int x = 0; x < 5; x++){ + for(int y = 0; y < 4; y++){ + BlockPos pos = center.add(x-3, y-4, 11+z); + + if(z%4 == 0 && (x == 0 || x == 4)){ + world.setBlockState(pos, Blocks.LOG2.getStateFromMeta(1)); + } + else if((z%4 == 0 || x == 0 || x == 4) && y == 3){ + world.setBlockState(pos, Blocks.PLANKS.getStateFromMeta(1)); + } + else if(!((y == 0 || y == 3) && Util.RANDOM.nextInt(5) <= 0)){ + world.setBlockToAir(pos); + } + } + } + } + + world.setBlockState(center.down(1), Blocks.GLOWSTONE.getDefaultState()); + } + + private void makeSphere(World world, BlockPos center, int radius){ + for(double x = -radius; x < radius; x++){ + for(double y = -radius; y < radius; y++){ + for(double z = -radius; z < radius; z++){ + if(Math.sqrt((x*x)+(y*y)+(z*z)) < radius){ + world.setBlockToAir(center.add(x, y, z)); + } + } + } + } + } + + @SubscribeEvent + public void onUpdate(LivingEvent.LivingUpdateEvent event){ + if(event.getEntity() != null){ + World world = event.getEntity().getEntityWorld(); + if(world != null && isCave(world) && !world.isRemote){ + BlockPos spawn = world.getSpawnPoint(); + BlockPos center = new BlockPos(spawn.getX(), 100, spawn.getZ()); + + NBTTagCompound data = WorldData.additionalData; + if(!data.getBoolean("GeneratedCave")){ + + ModUtil.LOGGER.info("Starting to generate cave world..."); + this.generateCave(world, center); + ModUtil.LOGGER.info("Generating cave world completed!"); + + data.setBoolean("GeneratedCave", true); + WorldData.makeDirty(); + } + + if(event.getEntity() instanceof EntityPlayerMP){ + EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); + if(player.posY >= world.getHeight()){ + player.playerNetServerHandler.setPlayerLocation(center.getX()+0.5, center.getY()+1, center.getZ()+0.5, player.rotationYaw, player.rotationPitch); + } + + NBTTagCompound playerData = PersistentServerData.getDataFromPlayer(player); + if(!playerData.getBoolean("SpawnedFirst")){ + player.inventory.addItemStackToInventory(new ItemStack(InitItems.itemBooklet)); + + playerData.setBoolean("SpawnedFirst", true); + WorldData.makeDirty(); + } + } + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index a2e04be56..8ea3d4c88 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -21,7 +21,9 @@ import net.minecraft.world.WorldSavedData; public class WorldData extends WorldSavedData{ public static final String DATA_TAG = ModUtil.MOD_ID+"WorldData"; - public static WorldData instance; + private static WorldData instance; + + public static NBTTagCompound additionalData = new NBTTagCompound(); public WorldData(String tag){ super(tag); @@ -40,13 +42,13 @@ public class WorldData extends WorldSavedData{ clearOldData(); ModUtil.LOGGER.info("Loading WorldData!"); - WorldData savedData = (WorldData)world.loadItemData(WorldData.class, WorldData.DATA_TAG); + WorldData savedData = (WorldData)world.loadItemData(WorldData.class, DATA_TAG); //Generate new SavedData if(savedData == null){ ModUtil.LOGGER.info("No WorldData found, creating..."); - savedData = new WorldData(WorldData.DATA_TAG); - world.setItemData(WorldData.DATA_TAG, savedData); + savedData = new WorldData(DATA_TAG); + world.setItemData(DATA_TAG, savedData); } else{ ModUtil.LOGGER.info("WorldData sucessfully received!"); @@ -67,40 +69,50 @@ public class WorldData extends WorldSavedData{ ModUtil.LOGGER.info("Clearing leftover Persistent Server Data from other worlds!"); PersistentServerData.playerSaveData.clear(); } + if(!additionalData.hasNoTags()){ + ModUtil.LOGGER.info("Clearing leftover Additional Data from other worlds!"); + additionalData = new NBTTagCompound(); + } } @Override public void readFromNBT(NBTTagCompound compound){ - //Laser World Data - NBTTagList networkList = compound.getTagList("Networks", 10); - for(int i = 0; i < networkList.tagCount(); i++){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i)); - LaserRelayConnectionHandler.getInstance().networks.add(network); - } + //Laser World Data + NBTTagList networkList = compound.getTagList("Networks", 10); + for(int i = 0; i < networkList.tagCount(); i++){ + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i)); + LaserRelayConnectionHandler.getInstance().networks.add(network); + } - //Player Data - NBTTagList playerList = compound.getTagList("PlayerData", 10); - for(int i = 0; i < playerList.tagCount(); i++){ - PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); - PersistentServerData.playerSaveData.add(aSave); - } + //Player Data + NBTTagList playerList = compound.getTagList("PlayerData", 10); + for(int i = 0; i < playerList.tagCount(); i++){ + PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); + PersistentServerData.playerSaveData.add(aSave); + } + + //Additional Data + additionalData = compound.getCompoundTag("Additional"); } @Override public void writeToNBT(NBTTagCompound compound){ - //Laser World Data - NBTTagList networkList = new NBTTagList(); - for(LaserRelayConnectionHandler.Network network : LaserRelayConnectionHandler.getInstance().networks){ - networkList.appendTag(LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(network)); - } - compound.setTag("Networks", networkList); + //Laser World Data + NBTTagList networkList = new NBTTagList(); + for(LaserRelayConnectionHandler.Network network : LaserRelayConnectionHandler.getInstance().networks){ + networkList.appendTag(LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(network)); + } + compound.setTag("Networks", networkList); - //Player Data - NBTTagList playerList = new NBTTagList(); - for(int i = 0; i < PersistentServerData.playerSaveData.size(); i++){ - PersistentServerData.PlayerSave theSave = PersistentServerData.playerSaveData.get(i); - playerList.appendTag(theSave.toNBT()); - } - compound.setTag("PlayerData", playerList); + //Player Data + NBTTagList playerList = new NBTTagList(); + for(int i = 0; i < PersistentServerData.playerSaveData.size(); i++){ + PersistentServerData.PlayerSave theSave = PersistentServerData.playerSaveData.get(i); + playerList.appendTag(theSave.toNBT()); + } + compound.setTag("PlayerData", playerList); + + //Additional Data + compound.setTag("Additional", additionalData); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 5388fc3a1..1b7807a1e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -59,7 +59,6 @@ public class ClientProxy implements IProxy{ private static List colorProdividingItemsForRegistering = new ArrayList(); private static Map modelLocationsForRegistering = new HashMap(); - private static Map modelVariantsForRegistering = new HashMap(); private static void countBookletWords(){ bookletWordCount = 0; @@ -100,9 +99,6 @@ public class ClientProxy implements IProxy{ for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), entry.getValue()); } - for(Map.Entry entry : modelVariantsForRegistering.entrySet()){ - ModelBakery.registerItemVariants(entry.getKey(), entry.getValue()); - } this.registerCustomFluidBlockRenderer(InitFluids.fluidCanolaOil); this.registerCustomFluidBlockRenderer(InitFluids.fluidOil); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 26c9b797c..6b087fb41 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -142,10 +142,10 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I return level*17; } else if(level > 15 && level < 31){ - return (int)(1.5*Math.pow(level, 2)-29.5*level+360); + return (int)(1.5*(level*level)-29.5*level+360); } else{ - return (int)(3.5*Math.pow(level, 2)-151.5*level+2220); + return (int)(3.5*(level*level)-151.5*level+2220); } } return 0; From 22b0a9a64e987ec12b586bc49808379bdd4ffebe Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 17 May 2016 22:26:26 +0200 Subject: [PATCH 161/322] Changed cave world spawning a bit, made the world generate with cobble and glowstone in the walls --- .../mod/ActuallyAdditions.java | 3 +- .../mod/gen/CaveWorldType.java | 145 ------------------ .../mod/gen/cave/CaveWorldType.java | 73 +++++++++ .../mod/gen/cave/ChunkProviderCave.java | 101 ++++++++++++ .../mod/gen/cave/WorldGenCaveSpawn.java | 115 ++++++++++++++ 5 files changed, 290 insertions(+), 147 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index a5bebb08e..27bb736cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -22,7 +22,7 @@ import de.ellpeck.actuallyadditions.mod.crafting.ItemCrafting; import de.ellpeck.actuallyadditions.mod.entity.InitEntities; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.gen.CaveWorldType; +import de.ellpeck.actuallyadditions.mod.gen.cave.CaveWorldType; import de.ellpeck.actuallyadditions.mod.gen.InitVillager; import de.ellpeck.actuallyadditions.mod.gen.OreGen; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; @@ -44,7 +44,6 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java deleted file mode 100644 index 9395fbd4e..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/CaveWorldType.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * This file ("CaveWorldType.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.gen; - -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentServerData; -import net.minecraft.block.BlockPlanks; -import net.minecraft.block.BlockSlab; -import net.minecraft.block.BlockWoodSlab; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraft.world.WorldType; -import net.minecraft.world.chunk.IChunkGenerator; -import net.minecraft.world.gen.ChunkProviderFlat; -import net.minecraft.world.gen.feature.WorldGenTrees; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -public class CaveWorldType extends WorldType{ - - public CaveWorldType(){ - //Name can't be longer than 16 :'( - super("actaddcaveworld"); - - Util.registerEvent(this); - } - - public static boolean isCave(World world){ - return ConfigValues.caveWorld && world.getWorldType() instanceof CaveWorldType; - } - - @Override - public IChunkGenerator getChunkGenerator(World world, String generatorOptions){ - return new ChunkProviderFlat(world, world.getSeed(), false, "3;minecraft:bedrock,254*minecraft:stone,minecraft:bedrock;2;"); - } - - @Override - public int getSpawnFuzz(WorldServer world, MinecraftServer server){ - return 1; - } - - private void generateCave(World world, BlockPos center){ - this.makeSphere(world, center, 8); - this.makeSphere(world, center.add(-3, 4, 3), 4); - this.makeSphere(world, center.add(4, 6, 1), 4); - this.makeSphere(world, center.add(3, 4, -3), 6); - this.makeSphere(world, center.add(4, -2, -3), 2); - this.makeSphere(world, center.add(5, 0, -3), 4); - this.makeSphere(world, center.add(1, 4, 3), 6); - this.makeSphere(world, center.add(-5, 1, 1), 4); - this.makeSphere(world, center.add(-1, 1, -7), 6); - this.makeSphere(world, center.add(-2, -1, 8), 3); - - world.setBlockState(center.add(-1, -5, -8), Blocks.DIRT.getStateFromMeta(1)); - WorldGenTrees trees = new WorldGenTrees(true); - trees.generate(world, Util.RANDOM, center.add(-1, -4, -8)); - - for(int z = 0; z <= 24; z++){ - for(int x = 0; x < 5; x++){ - for(int y = 0; y < 4; y++){ - BlockPos pos = center.add(x-3, y-4, 11+z); - - if(z%4 == 0 && (x == 0 || x == 4)){ - world.setBlockState(pos, Blocks.LOG2.getStateFromMeta(1)); - } - else if((z%4 == 0 || x == 0 || x == 4) && y == 3){ - world.setBlockState(pos, Blocks.PLANKS.getStateFromMeta(1)); - } - else if(!((y == 0 || y == 3) && Util.RANDOM.nextInt(5) <= 0)){ - world.setBlockToAir(pos); - } - } - } - } - - world.setBlockState(center.down(1), Blocks.GLOWSTONE.getDefaultState()); - } - - private void makeSphere(World world, BlockPos center, int radius){ - for(double x = -radius; x < radius; x++){ - for(double y = -radius; y < radius; y++){ - for(double z = -radius; z < radius; z++){ - if(Math.sqrt((x*x)+(y*y)+(z*z)) < radius){ - world.setBlockToAir(center.add(x, y, z)); - } - } - } - } - } - - @SubscribeEvent - public void onUpdate(LivingEvent.LivingUpdateEvent event){ - if(event.getEntity() != null){ - World world = event.getEntity().getEntityWorld(); - if(world != null && isCave(world) && !world.isRemote){ - BlockPos spawn = world.getSpawnPoint(); - BlockPos center = new BlockPos(spawn.getX(), 100, spawn.getZ()); - - NBTTagCompound data = WorldData.additionalData; - if(!data.getBoolean("GeneratedCave")){ - - ModUtil.LOGGER.info("Starting to generate cave world..."); - this.generateCave(world, center); - ModUtil.LOGGER.info("Generating cave world completed!"); - - data.setBoolean("GeneratedCave", true); - WorldData.makeDirty(); - } - - if(event.getEntity() instanceof EntityPlayerMP){ - EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); - if(player.posY >= world.getHeight()){ - player.playerNetServerHandler.setPlayerLocation(center.getX()+0.5, center.getY()+1, center.getZ()+0.5, player.rotationYaw, player.rotationPitch); - } - - NBTTagCompound playerData = PersistentServerData.getDataFromPlayer(player); - if(!playerData.getBoolean("SpawnedFirst")){ - player.inventory.addItemStackToInventory(new ItemStack(InitItems.itemBooklet)); - - playerData.setBoolean("SpawnedFirst", true); - WorldData.makeDirty(); - } - } - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java new file mode 100644 index 000000000..13139a71a --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java @@ -0,0 +1,73 @@ +/* + * This file ("CaveWorldType.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.gen.cave; + +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentServerData; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.WorldType; +import net.minecraft.world.chunk.IChunkGenerator; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class CaveWorldType extends WorldType{ + + public CaveWorldType(){ + //Name can't be longer than 16 :'( + super("actaddcaveworld"); + + Util.registerEvent(this); + } + + public static boolean isCave(World world){ + return ConfigValues.caveWorld && world.getWorldType() instanceof CaveWorldType; + } + + @Override + public IChunkGenerator getChunkGenerator(World world, String generatorOptions){ + return new ChunkProviderCave(world); + } + + @Override + public int getSpawnFuzz(WorldServer world, MinecraftServer server){ + return 1; + } + + @SubscribeEvent + public void onSpawn(LivingEvent.LivingUpdateEvent event){ + if(event.getEntity() instanceof EntityPlayerMP){ + EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); + if(isCave(player.worldObj) && !player.worldObj.isRemote){ + if(player.posY >= player.worldObj.getHeight() && !player.isSpectator()){ + BlockPos spawn = player.worldObj.getSpawnPoint(); + player.playerNetServerHandler.setPlayerLocation(spawn.getX()+0.5, spawn.getY()+1, spawn.getZ()+0.5, player.rotationYaw, player.rotationPitch); + } + + NBTTagCompound playerData = PersistentServerData.getDataFromPlayer(player); + if(!playerData.getBoolean("SpawnedFirst")){ + player.inventory.addItemStackToInventory(new ItemStack(InitItems.itemBooklet)); + + playerData.setBoolean("SpawnedFirst", true); + WorldData.makeDirty(); + } + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java new file mode 100644 index 000000000..3d9ca0e8c --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java @@ -0,0 +1,101 @@ +/* + * This file ("ChunkProviderCave.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.gen.cave; + +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.chunk.IChunkGenerator; +import net.minecraft.world.gen.MapGenBase; +import net.minecraft.world.gen.MapGenCaves; +import net.minecraft.world.gen.feature.WorldGenerator; + +import java.util.List; + +public class ChunkProviderCave implements IChunkGenerator{ + + private boolean generatedSpawn; + private World world; + + private WorldGenerator spawnGenerator = new WorldGenCaveSpawn(); + + public ChunkProviderCave(World world){ + this.world = world; + } + + @Override + public Chunk provideChunk(int chunkX, int chunkZ){ + ChunkPrimer primer = new ChunkPrimer(); + + for(int x = 0; x < 16; x++){ + for(int z = 0; z < 16; z++){ + for(int y = 0; y < this.world.getHeight(); y++){ + if(y == this.world.getHeight()-1 || y == 0){ + primer.setBlockState(x, y, z, Blocks.BEDROCK.getDefaultState()); + } + else{ + if(Util.RANDOM.nextInt(5) <= 0){ + if(Util.RANDOM.nextFloat() <= 0.95F){ + primer.setBlockState(x, y, z, (Util.RANDOM.nextFloat() >= 0.85F ? Blocks.MOSSY_COBBLESTONE : Blocks.COBBLESTONE).getDefaultState()); + } + else{ + primer.setBlockState(x, y, z, Blocks.GLOWSTONE.getDefaultState()); + } + } + else{ + primer.setBlockState(x, y, z, Blocks.STONE.getDefaultState()); + } + } + } + } + } + + Chunk chunk = new Chunk(this.world, primer, chunkX, chunkZ); + chunk.generateSkylightMap(); + return chunk; + } + + @Override + public void populate(int x, int z){ + if(!this.generatedSpawn){ + BlockPos spawn = this.world.getSpawnPoint(); + Chunk chunk = this.world.getChunkFromBlockCoords(spawn); + if(chunk.xPosition == x && chunk.zPosition == z){ + this.generatedSpawn = this.spawnGenerator.generate(this.world, this.world.rand, spawn); + } + } + } + + @Override + public boolean generateStructures(Chunk chunkIn, int x, int z){ + return false; + } + + @Override + public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos){ + return null; + } + + @Override + public BlockPos getStrongholdGen(World worldIn, String structureName, BlockPos position){ + return null; + } + + @Override + public void recreateStructures(Chunk chunkIn, int x, int z){ + + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java new file mode 100644 index 000000000..ea48ae893 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java @@ -0,0 +1,115 @@ +/* + * This file ("WorldGeneratorCaveSpawn.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.gen.cave; + +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.BlockLadder; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenTrees; +import net.minecraft.world.gen.feature.WorldGenerator; + +import java.util.Random; + +public class WorldGenCaveSpawn extends WorldGenerator{ + + @Override + public boolean generate(World world, Random rand, BlockPos position){ + this.generateCave(world, position); + return true; + } + + private void generateCave(World world, BlockPos center){ + this.makeSphere(world, center, 8); + this.makeSphere(world, center.add(-3, 4, 3), 4); + this.makeSphere(world, center.add(4, 6, 1), 4); + this.makeSphere(world, center.add(3, 4, -3), 6); + this.makeSphere(world, center.add(4, -2, -3), 2); + this.makeSphere(world, center.add(5, 0, -3), 4); + this.makeSphere(world, center.add(1, 4, 3), 6); + this.makeSphere(world, center.add(-5, 1, 1), 4); + this.makeSphere(world, center.add(-1, 1, -7), 6); + this.makeSphere(world, center.add(-2, -1, 8), 3); + + world.setBlockState(center.add(-1, -5, -8), Blocks.DIRT.getStateFromMeta(1)); + WorldGenTrees trees = new WorldGenTrees(true); + trees.generate(world, Util.RANDOM, center.add(-1, -4, -8)); + + int length = Util.RANDOM.nextInt(20)+20; + for(int z = 0; z <= length; z++){ + for(int x = 0; x < 5; x++){ + for(int y = 0; y < 4; y++){ + BlockPos pos = center.add(x-3, y-4, 11+z); + + if(z%4 == 0 && (x == 0 || x == 4)){ + world.setBlockState(pos, Blocks.LOG2.getStateFromMeta(1)); + } + else if((z%4 == 0 || x == 0 || x == 4) && y == 3){ + world.setBlockState(pos, Blocks.PLANKS.getStateFromMeta(1)); + } + else if(!((y == 0 || y == 3) && Util.RANDOM.nextInt(5) <= 0)){ + world.setBlockToAir(pos); + } + } + } + } + BlockPos chestPos = center.add(-1, -4, 11+length); + world.setBlockState(chestPos, Blocks.CHEST.getDefaultState()); + TileEntity tile = world.getTileEntity(chestPos); + if(tile instanceof TileEntityChest){ + TileEntityChest chest = (TileEntityChest)tile; + chest.setInventorySlotContents(12, new ItemStack(InitItems.itemFoods, MathHelper.getRandomIntegerInRange(Util.RANDOM, 5, 15), Util.RANDOM.nextInt(TheFoods.values().length))); + chest.setInventorySlotContents(14, new ItemStack(InitItems.itemAxeCrystalBlack)); + } + + for(int x = -2; x <= 2; x++){ + for(int z = -2; z <= 2; z++){ + for(int y = -7; y <= 0; y++){ + if(x%2 == 0 && z%2 == 0 && x != 0 && z != 0){ + world.setBlockState(center.add(x, y, z), Blocks.LOG.getDefaultState()); + } + else if(y == 0 && (x == -2 || x == 2 || z == -2 || z == 2)){ + world.setBlockState(center.add(x, y, z), Blocks.OAK_FENCE.getDefaultState()); + } + else if(y == -1){ + world.setBlockState(center.add(x, y, z), Blocks.PLANKS.getStateFromMeta(1)); + } + } + } + } + + for(int y = 3; y <= 12; y++){ + world.setBlockState(center.add(0, y, 0), Blocks.LADDER.getDefaultState().withProperty(BlockLadder.FACING, EnumFacing.WEST)); + world.setBlockState(center.add(1, y, 0), Blocks.PLANKS.getDefaultState()); + } + world.setBlockState(center.add(0, 13, 0), Blocks.COBBLESTONE.getDefaultState()); + } + + private void makeSphere(World world, BlockPos center, int radius){ + for(double x = -radius; x < radius; x++){ + for(double y = -radius; y < radius; y++){ + for(double z = -radius; z < radius; z++){ + if(Math.sqrt((x*x)+(y*y)+(z*z)) < radius){ + world.setBlockToAir(center.add(x, y, z)); + } + } + } + } + } +} From aec4bfbaa40818d1a57a67976f33dd17bdb75bb2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 17 May 2016 22:30:05 +0200 Subject: [PATCH 162/322] Change this name --- .../ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java index 13139a71a..46dd77996 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java @@ -51,7 +51,7 @@ public class CaveWorldType extends WorldType{ } @SubscribeEvent - public void onSpawn(LivingEvent.LivingUpdateEvent event){ + public void onUpdate(LivingEvent.LivingUpdateEvent event){ if(event.getEntity() instanceof EntityPlayerMP){ EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); if(isCave(player.worldObj) && !player.worldObj.isRemote){ From 05f159f48a9ad8e21f8982e871589bf76948eb14 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 18 May 2016 19:34:57 +0200 Subject: [PATCH 163/322] Made blocks in the cave world be determined by seed, added impure iron ore that spawns in cave world --- .../mod/blocks/BlockGeneric.java | 14 +++++--- .../mod/blocks/InitBlocks.java | 9 ++++++ .../mod/creative/CreativeTab.java | 5 +++ .../actuallyadditions/mod/gen/OreGen.java | 30 +++++++----------- .../mod/gen/cave/ChunkProviderCave.java | 17 +++++----- .../mod/gen/cave/WorldGenCaveSpawn.java | 14 +++++--- .../blockstates/blockImpureIron.json | 14 ++++++++ .../assets/actuallyadditions/lang/en_US.lang | 1 + .../textures/blocks/blockImpureIron.png | Bin 0 -> 369 bytes 9 files changed, 68 insertions(+), 36 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockImpureIron.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java index 1aa04970c..43582bdd6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGeneric.java @@ -19,11 +19,15 @@ import net.minecraft.item.ItemStack; public class BlockGeneric extends BlockBase{ public BlockGeneric(String name){ - super(Material.ROCK, name); - this.setHarvestLevel("pickaxe", 0); - this.setHardness(1.5F); - this.setResistance(10.0F); - this.setSoundType(SoundType.STONE); + this(name, Material.ROCK, SoundType.STONE, 1.5F, 10.0F, "pickaxe", 0); + } + + public BlockGeneric(String name, Material material, SoundType sound, float hardness, float resistance, String harvestTool, int harvestLevel){ + super(material, name); + this.setHarvestLevel(harvestTool, harvestLevel); + this.setHardness(hardness); + this.setResistance(resistance); + this.setSoundType(sound); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index d6c3c553e..a5e0080ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -13,9 +13,12 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.util.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; public class InitBlocks{ @@ -114,9 +117,15 @@ public class InitBlocks{ public static Block blockPillarQuartzStair; public static Block blockPillarQuartzSlab; + public static Block blockImpureIron; + public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + if(ConfigValues.caveWorld){ + blockImpureIron = new BlockGeneric("blockImpureIron", Material.ROCK, SoundType.STONE, 3.5F, 12.5F, "pickaxe", 1); + } + blockItemViewer = new BlockItemViewer("blockItemViewer"); blockFireworkBox = new BlockFireworkBox("blockFireworkBox"); blockMiner = new BlockMiner("blockMiner"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 8e67c02e4..ef0387a22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.creative; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.items.InitForeignPaxels; import de.ellpeck.actuallyadditions.mod.items.InitItems; @@ -303,6 +304,10 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemChestCrystalWhite); this.add(InitItems.itemPantsCrystalWhite); this.add(InitItems.itemBootsCrystalWhite); + + if(ConfigValues.caveWorld){ + this.add(InitBlocks.blockImpureIron); + } } public void add(Item item){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 2f9fd0925..8ab5361e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.gen.cave.CaveWorldType; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; @@ -43,31 +44,22 @@ public class OreGen implements IWorldGenerator{ @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){ - if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimension()) < 0){ - switch(world.provider.getDimension()){ - case -1: - this.generateNether(world, random, chunkX*16, chunkZ*16); - //case 0: - // generateSurface(world, random, chunkX*16, chunkZ*16); - case 1: - this.generateEnd(world, random, chunkX*16, chunkZ*16); - default: - this.generateSurface(world, random, chunkX*16, chunkZ*16); + int dimension = world.provider.getDimension(); + if(dimension != -1 && dimension != 1){ + if(CaveWorldType.isCave(world)){ + this.generateCave(world, random, chunkX*16, chunkZ*16); + } + else if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimension()) < 0){ + this.generateDefault(world, random, chunkX*16, chunkZ*16); } } } - @SuppressWarnings("unused") - private void generateNether(World world, Random random, int x, int z){ - + private void generateCave(World world, Random random, int x, int z){ + this.addOreSpawn(InitBlocks.blockImpureIron, 0, Blocks.STONE, world, random, x, z, MathHelper.getRandomIntegerInRange(random, 5, 10), 60, 0, world.getHeight()); } - @SuppressWarnings("unused") - private void generateEnd(World world, Random random, int x, int z){ - - } - - private void generateSurface(World world, Random random, int x, int z){ + private void generateDefault(World world, Random random, int x, int z){ if(ConfigBoolValues.GENERATE_QUARTZ.isEnabled()){ this.addOreSpawn(InitBlocks.blockMisc, TheMiscBlocks.ORE_QUARTZ.ordinal(), Blocks.STONE, world, random, x, z, MathHelper.getRandomIntegerInRange(random, 5, 8), 10, QUARTZ_MIN, QUARTZ_MAX); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java index 3d9ca0e8c..d0a987917 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.gen.cave; -import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; @@ -19,21 +18,23 @@ import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.chunk.IChunkGenerator; -import net.minecraft.world.gen.MapGenBase; -import net.minecraft.world.gen.MapGenCaves; import net.minecraft.world.gen.feature.WorldGenerator; import java.util.List; +import java.util.Random; public class ChunkProviderCave implements IChunkGenerator{ private boolean generatedSpawn; private World world; + private Random rand; - private WorldGenerator spawnGenerator = new WorldGenCaveSpawn(); + private WorldGenerator spawnGenerator; public ChunkProviderCave(World world){ this.world = world; + this.rand = new Random(world.getSeed()); + this.spawnGenerator = new WorldGenCaveSpawn(this.rand); } @Override @@ -47,9 +48,9 @@ public class ChunkProviderCave implements IChunkGenerator{ primer.setBlockState(x, y, z, Blocks.BEDROCK.getDefaultState()); } else{ - if(Util.RANDOM.nextInt(5) <= 0){ - if(Util.RANDOM.nextFloat() <= 0.95F){ - primer.setBlockState(x, y, z, (Util.RANDOM.nextFloat() >= 0.85F ? Blocks.MOSSY_COBBLESTONE : Blocks.COBBLESTONE).getDefaultState()); + if(this.rand.nextInt(5) <= 0){ + if(this.rand.nextFloat() <= 0.95F){ + primer.setBlockState(x, y, z, (this.rand.nextFloat() >= 0.85F ? Blocks.MOSSY_COBBLESTONE : Blocks.COBBLESTONE).getDefaultState()); } else{ primer.setBlockState(x, y, z, Blocks.GLOWSTONE.getDefaultState()); @@ -74,7 +75,7 @@ public class ChunkProviderCave implements IChunkGenerator{ BlockPos spawn = this.world.getSpawnPoint(); Chunk chunk = this.world.getChunkFromBlockCoords(spawn); if(chunk.xPosition == x && chunk.zPosition == z){ - this.generatedSpawn = this.spawnGenerator.generate(this.world, this.world.rand, spawn); + this.generatedSpawn = this.spawnGenerator.generate(this.world, this.rand, spawn); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java index ea48ae893..e1b242560 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java @@ -29,6 +29,12 @@ import java.util.Random; public class WorldGenCaveSpawn extends WorldGenerator{ + private Random rand; + + public WorldGenCaveSpawn(Random rand){ + this.rand = rand; + } + @Override public boolean generate(World world, Random rand, BlockPos position){ this.generateCave(world, position); @@ -49,9 +55,9 @@ public class WorldGenCaveSpawn extends WorldGenerator{ world.setBlockState(center.add(-1, -5, -8), Blocks.DIRT.getStateFromMeta(1)); WorldGenTrees trees = new WorldGenTrees(true); - trees.generate(world, Util.RANDOM, center.add(-1, -4, -8)); + trees.generate(world, this.rand, center.add(-1, -4, -8)); - int length = Util.RANDOM.nextInt(20)+20; + int length = this.rand.nextInt(20)+20; for(int z = 0; z <= length; z++){ for(int x = 0; x < 5; x++){ for(int y = 0; y < 4; y++){ @@ -63,7 +69,7 @@ public class WorldGenCaveSpawn extends WorldGenerator{ else if((z%4 == 0 || x == 0 || x == 4) && y == 3){ world.setBlockState(pos, Blocks.PLANKS.getStateFromMeta(1)); } - else if(!((y == 0 || y == 3) && Util.RANDOM.nextInt(5) <= 0)){ + else if(!((y == 0 || y == 3) && this.rand.nextInt(5) <= 0)){ world.setBlockToAir(pos); } } @@ -74,7 +80,7 @@ public class WorldGenCaveSpawn extends WorldGenerator{ TileEntity tile = world.getTileEntity(chestPos); if(tile instanceof TileEntityChest){ TileEntityChest chest = (TileEntityChest)tile; - chest.setInventorySlotContents(12, new ItemStack(InitItems.itemFoods, MathHelper.getRandomIntegerInRange(Util.RANDOM, 5, 15), Util.RANDOM.nextInt(TheFoods.values().length))); + chest.setInventorySlotContents(12, new ItemStack(InitItems.itemFoods, MathHelper.getRandomIntegerInRange(this.rand, 5, 15), this.rand.nextInt(TheFoods.values().length))); chest.setInventorySlotContents(14, new ItemStack(InitItems.itemAxeCrystalBlack)); } diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json b/src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json new file mode 100644 index 000000000..836a5fdcf --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockImpureIron" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 05116f591..49d002769 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -206,6 +206,7 @@ tile.actuallyadditions.blockPillarQuartzSlab.name=Black Quartz Pillar Slab tile.actuallyadditions.blockLaserRelayItem.name=Item Laser Relay tile.actuallyadditions.blockLaserRelayItemWhitelist.name=Advanced Item Laser Relay tile.actuallyadditions.blockItemViewer.name=Item Interface +tile.actuallyadditions.blockImpureIron.name=Impure Iron #ESD tile.actuallyadditions.blockInputter.name=ESD diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockImpureIron.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockImpureIron.png new file mode 100644 index 0000000000000000000000000000000000000000..727ff786e05a2bf9e5ca2de0fce044f0d1f54b9a GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXPIMM=Lb~t-qXb~ z#KOOH(nj9H1_I2s>(~t@T$-t%7nIs+5~tvL%ww*r$Q^cdfu>jip&u&$<1cJkm;HO+ z{I{F$-`=Fdx+C{C*JqpSmCIH)m~gcGej9Y?38zbb0IS2SS>+9#m)*=h$1!?ZJUbyh zBm2Pj2Aw@}*X{mgEJ>T2sm@w534=p| zXF9jrFIsuiusMb`j(-J%gOE literal 0 HcmV?d00001 From 8b433056d2510521c267efce72d0a8b654433a74 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 18 May 2016 21:14:11 +0200 Subject: [PATCH 164/322] Made impure iron convert in water and in the crusher --- .../mod/blocks/BlockImpureIron.java | 92 +++++++++++++++++++ .../mod/blocks/InitBlocks.java | 2 +- .../mod/crafting/CrusherCrafting.java | 7 ++ 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java new file mode 100644 index 000000000..8639fb69e --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java @@ -0,0 +1,92 @@ +/* + * This file ("BlockImpureIron.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks; + +import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; +import de.ellpeck.actuallyadditions.mod.gen.cave.CaveWorldType; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.WorldServer; + +public class BlockImpureIron extends BlockGeneric{ + + public BlockImpureIron(String name){ + super(name, Material.ROCK, SoundType.STONE, 3.5F, 12.5F, "pickaxe", 1); + } + + @Override + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); + } + + public static class TheItemBlock extends ItemBlockBase{ + + public TheItemBlock(Block block){ + super(block); + this.setHasSubtypes(false); + this.setMaxDamage(0); + } + + @Override + public String getUnlocalizedName(ItemStack stack){ + return this.getUnlocalizedName(); + } + + @Override + public int getMetadata(int damage){ + return damage; + } + + @Override + public boolean onEntityItemUpdate(EntityItem item){ + if(item != null && CaveWorldType.isCave(item.getEntityWorld())){ + if(item.isInWater()){ + if(!item.getEntityWorld().isRemote){ + ItemStack stack = item.getEntityItem(); + if(stack != null){ + if(!stack.hasTagCompound()){ + stack.setTagCompound(new NBTTagCompound()); + } + NBTTagCompound compound = stack.getTagCompound(); + + int conversionTimer = compound.getInteger("ConversionTimer"); + if(conversionTimer >= 2000){ + item.setEntityItemStack(new ItemStack(InitItems.itemDust, 1, TheDusts.IRON.ordinal())); + + if(item.getEntityWorld() instanceof WorldServer){ + ((WorldServer)item.getEntityWorld()).spawnParticle(EnumParticleTypes.SMOKE_NORMAL, item.posX, item.posY, item.posZ, 30, 0D, 0D, 0D, 0.05D); + } + } + else{ + compound.setInteger("ConversionTimer", conversionTimer+1); + } + } + } + else{ + if(item.getEntityWorld().getTotalWorldTime()%20 == 0){ + item.getEntityWorld().spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, MathHelper.floor_double(item.posX)+Util.RANDOM.nextDouble(), MathHelper.floor_double(item.posY)+Util.RANDOM.nextDouble(), MathHelper.floor_double(item.posZ)+Util.RANDOM.nextDouble(), 0D, 0D, 0D); + } + } + } + } + return false; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index a5e0080ee..e14482166 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -123,7 +123,7 @@ public class InitBlocks{ ModUtil.LOGGER.info("Initializing Blocks..."); if(ConfigValues.caveWorld){ - blockImpureIron = new BlockGeneric("blockImpureIron", Material.ROCK, SoundType.STONE, 3.5F, 12.5F, "pickaxe", 1); + blockImpureIron = new BlockImpureIron("blockImpureIron"); } blockItemViewer = new BlockItemViewer("blockItemViewer"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index f15aa8e9c..defb2b03e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -12,8 +12,11 @@ package de.ellpeck.actuallyadditions.mod.crafting; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; +import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; +import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -34,6 +37,10 @@ public class CrusherCrafting{ public static void init(){ ModUtil.LOGGER.info("Initializing Crusher Recipes..."); + if(ConfigValues.caveWorld){ + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(InitBlocks.blockImpureIron), new ItemStack(InitItems.itemDust, 2, TheDusts.IRON.ordinal())); + } + ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.BONE), new ItemStack(Items.DYE, 6, 15)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.REEDS), new ItemStack(Items.SUGAR, 3)); From 5cef7badac1798830ce3e720cce823d35608f3a0 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 19 May 2016 16:03:37 +0200 Subject: [PATCH 165/322] Removed Firework Box Minecart. Aaw :( --- .../mod/ActuallyAdditions.java | 2 - .../mod/creative/CreativeTab.java | 1 - .../mod/entity/EntityFireworkBoxMinecart.java | 74 ------------------- .../mod/entity/EntityRFMinecart.java | 46 ------------ .../mod/entity/InitEntities.java | 28 ------- .../mod/items/InitItems.java | 3 - .../mod/items/ItemFireworkBoxMinecart.java | 30 -------- .../models/item/itemMinecartFireworkBox.json | 6 -- 8 files changed, 190 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java delete mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 27bb736cb..19cd898ff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -19,7 +19,6 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.crafting.CrusherCrafting; import de.ellpeck.actuallyadditions.mod.crafting.InitCrafting; import de.ellpeck.actuallyadditions.mod.crafting.ItemCrafting; -import de.ellpeck.actuallyadditions.mod.entity.InitEntities; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.gen.cave.CaveWorldType; @@ -80,7 +79,6 @@ public class ActuallyAdditions{ PacketHandler.init(); InitToolMaterials.init(); InitArmorMaterials.init(); - InitEntities.init(); InitBlocks.init(); InitFluids.init(); InitItems.init(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index ef0387a22..fce687f15 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -155,7 +155,6 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemBatteryQuadruple); this.add(InitItems.itemBatteryQuintuple); this.add(InitItems.itemTeleStaff); - this.add(InitItems.itemMinecartFireworkBox); this.add(InitItems.itemGrowthRing); this.add(InitItems.itemMagnetRing); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java deleted file mode 100644 index 32f9e63da..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityFireworkBoxMinecart.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file ("EntityFireworkBoxMinecart.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.entity; - -import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityFireworkBox; -import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class EntityFireworkBoxMinecart extends EntityRFMinecart{ - - private int cooldownTimer; - private boolean isPowered; - - public EntityFireworkBoxMinecart(World world){ - super(world, 20000, 1000); - } - - @Override - public void onActivatorRailPass(int x, int y, int z, boolean receivingPower){ - if(receivingPower != this.isPowered){ - this.isPowered = receivingPower; - } - } - - @Override - public void onUpdate(){ - super.onUpdate(); - - if(!this.worldObj.isRemote){ - if(this.cooldownTimer > 0 && this.isPowered){ - this.cooldownTimer--; - if(this.cooldownTimer <= 0){ - //TODO Check for power level here + make charging possible - TileEntityFireworkBox.spawnFireworks(this.worldObj, this.posX, this.posY, this.posZ); - this.storage.extractEnergy(TileEntityFireworkBox.USE_PER_SHOT, false); - } - } - else{ - this.cooldownTimer = 100; - } - } - } - - @Override - public IBlockState getDisplayTile(){ - return InitBlocks.blockFireworkBox.getDefaultState(); - } - - @Override - protected void writeEntityToNBT(NBTTagCompound compound){ - super.writeEntityToNBT(compound); - - compound.setInteger("Cooldown", this.cooldownTimer); - compound.setBoolean("Powered", this.isPowered); - } - - @Override - protected void readEntityFromNBT(NBTTagCompound compound){ - super.readEntityFromNBT(compound); - - this.cooldownTimer = compound.getInteger("Cooldown"); - this.isPowered = compound.getBoolean("Powered"); - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java deleted file mode 100644 index 809e17e28..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/EntityRFMinecart.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file ("EntityRFMinecart.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.entity; - -import cofh.api.energy.EnergyStorage; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -public class EntityRFMinecart extends EntityMinecart{ - - public EnergyStorage storage; - - public EntityRFMinecart(World world, int rfCap, int maxTransfer){ - super(world); - - this.storage = new EnergyStorage(rfCap, maxTransfer); - } - - @Override - protected void writeEntityToNBT(NBTTagCompound compound){ - super.writeEntityToNBT(compound); - - this.storage.writeToNBT(compound); - } - - @Override - protected void readEntityFromNBT(NBTTagCompound compound){ - super.readEntityFromNBT(compound); - - this.storage.readFromNBT(compound); - } - - @Override - public Type getType(){ - return Type.CHEST; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java b/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java deleted file mode 100644 index 7e9371573..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/entity/InitEntities.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This file ("InitEntities.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.entity; - -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.fml.common.registry.EntityRegistry; - -import java.util.Locale; - -public class InitEntities{ - - public static void init(){ - ModUtil.LOGGER.info("Initializing Entities..."); - - EntityRegistry.registerModEntity(EntityFireworkBoxMinecart.class, ModUtil.MOD_ID+":minecartFireworkBox", 0, ActuallyAdditions.instance, 256, 1, true); - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index e60ccea3e..f88de705f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -206,12 +206,9 @@ public class InitItems{ public static Item itemRarmorModuleReconstructor; - public static Item itemMinecartFireworkBox; - public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); - itemMinecartFireworkBox = new ItemFireworkBoxMinecart("itemMinecartFireworkBox"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); itemCrateKeeper = new ItemGeneric("itemCrateKeeper"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java deleted file mode 100644 index a078784fe..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFireworkBoxMinecart.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file ("ItemFireworkBoxMinecart.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items; - -import de.ellpeck.actuallyadditions.mod.entity.EntityFireworkBoxMinecart; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraft.world.World; - -public class ItemFireworkBoxMinecart extends ItemMinecartAA{ - - public ItemFireworkBoxMinecart(String name){ - super(name); - } - - @Override - public EntityMinecart createCart(World world, double x, double y, double z){ - EntityMinecart entity = new EntityFireworkBoxMinecart(world); - entity.setPosition(x, y, z); - return entity; - } -} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json b/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json deleted file mode 100644 index 1b49d9e00..000000000 --- a/src/main/resources/assets/actuallyadditions/models/item/itemMinecartFireworkBox.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "actuallyadditions:item/standardItem", - "textures": { - "layer0": "actuallyadditions:items/itemMinecartFireworkBox" - } -} From cddb514382d620b11a98092bab153fa7f070aa8a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 19 May 2016 16:06:27 +0200 Subject: [PATCH 166/322] Turned cave mode off for now. Working on it some more at some other point. --- .../de/ellpeck/actuallyadditions/mod/config/ConfigValues.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index fd5ef7651..e66a3410e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -41,7 +41,7 @@ public class ConfigValues{ public static boolean lessParticles; public static boolean lessBlockBreakingEffects; - public static boolean caveWorld = true; //TODO Make this proper + public static boolean caveWorld = false; //TODO Make this proper public static void defineConfigValues(Configuration config){ From b00e214217c3d091219f9ce9477124c376cceab9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 19 May 2016 20:05:12 +0200 Subject: [PATCH 167/322] 1.9.4! Go suck a dick now. --- build.gradle | 14 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../cofh/api/energy/TileEnergyHandler.java | 67 --------- .../api/ActuallyAdditionsAPI.java | 40 +++--- .../api/lens/LensConversion.java | 2 +- .../api/recipe/BallOfFurReturn.java | 2 +- .../api/recipe/LensConversionRecipe.java | 4 +- .../api/recipe/TreasureChestLoot.java | 6 +- .../mod/achievement/InitAchievements.java | 2 +- .../mod/blocks/BlockAtomicReconstructor.java | 14 +- .../mod/blocks/BlockBreaker.java | 9 +- .../mod/blocks/BlockCanolaPress.java | 9 +- .../mod/blocks/BlockCoalGenerator.java | 6 +- .../mod/blocks/BlockCoffeeMachine.java | 10 +- .../mod/blocks/BlockColoredLamp.java | 15 +- .../mod/blocks/BlockCompost.java | 53 +++---- .../mod/blocks/BlockCrystal.java | 2 + .../mod/blocks/BlockDirectionalBreaker.java | 7 +- .../mod/blocks/BlockDropper.java | 7 +- .../mod/blocks/BlockEnergizer.java | 9 +- .../mod/blocks/BlockFeeder.java | 7 +- .../mod/blocks/BlockFermentingBarrel.java | 9 +- .../mod/blocks/BlockFireworkBox.java | 7 +- .../mod/blocks/BlockFishingNet.java | 6 +- .../mod/blocks/BlockFluidCollector.java | 11 +- .../mod/blocks/BlockFurnaceDouble.java | 8 +- .../mod/blocks/BlockFurnaceSolar.java | 6 +- .../mod/blocks/BlockGiantChest.java | 9 +- .../mod/blocks/BlockGreenhouseGlass.java | 8 +- .../mod/blocks/BlockGrinder.java | 8 +- .../mod/blocks/BlockHeatCollector.java | 5 +- .../mod/blocks/BlockImpureIron.java | 3 + .../mod/blocks/BlockInputter.java | 13 +- .../mod/blocks/BlockItemRepairer.java | 9 +- .../mod/blocks/BlockItemViewer.java | 5 +- .../mod/blocks/BlockLampPowerer.java | 4 +- .../mod/blocks/BlockLaserRelay.java | 8 +- .../blocks/BlockLavaFactoryController.java | 5 +- .../mod/blocks/BlockLeafGenerator.java | 7 +- .../mod/blocks/BlockMiner.java | 7 +- .../mod/blocks/BlockMisc.java | 14 +- .../mod/blocks/BlockOilGenerator.java | 8 +- .../mod/blocks/BlockPhantom.java | 9 +- .../mod/blocks/BlockPhantomBooster.java | 6 +- .../mod/blocks/BlockRangedCollector.java | 7 +- .../mod/blocks/BlockSlabs.java | 14 +- .../mod/blocks/BlockSmileyCloud.java | 6 +- .../mod/blocks/BlockTreasureChest.java | 9 +- .../mod/blocks/BlockWallAA.java | 15 +- .../mod/blocks/BlockWildPlant.java | 10 +- .../mod/blocks/BlockXPSolidifier.java | 7 +- .../mod/blocks/InitBlocks.java | 2 - .../mod/blocks/base/BlockBase.java | 6 +- .../mod/blocks/base/BlockBushBase.java | 6 +- .../mod/blocks/base/BlockContainerBase.java | 20 +-- .../mod/blocks/base/BlockFluidFlowing.java | 2 +- .../mod/blocks/base/BlockPlant.java | 14 +- .../mod/blocks/base/BlockStair.java | 2 +- .../mod/blocks/base/ItemBlockBase.java | 4 + .../metalists/TheColoredLampColors.java | 2 +- .../mod/blocks/render/RenderCompost.java | 4 +- .../render/RenderReconstructorLens.java | 4 +- .../mod/blocks/render/RenderSmileyCloud.java | 3 +- .../mod/booklet/BookletUtils.java | 10 +- .../mod/booklet/GuiAAAchievements.java | 6 +- .../mod/booklet/GuiBooklet.java | 21 +-- .../mod/booklet/InitBooklet.java | 1 - .../mod/booklet/button/BookmarkButton.java | 5 +- .../mod/booklet/button/IndexButton.java | 6 +- .../mod/booklet/button/TexturedButton.java | 5 +- .../mod/booklet/chapter/BookletChapter.java | 6 +- .../booklet/chapter/BookletChapterCoffee.java | 2 +- .../mod/booklet/entry/EntrySet.java | 4 +- .../mod/booklet/page/BookletPageAA.java | 6 +- .../mod/booklet/page/PageCoffeeRecipe.java | 2 +- .../mod/booklet/page/PageCrusherRecipe.java | 2 +- .../mod/booklet/page/PagePicture.java | 4 +- .../mod/booklet/page/PageReconstructor.java | 2 +- .../mod/config/ConfigValues.java | 12 +- .../mod/crafting/BlockCrafting.java | 2 +- .../mod/crafting/CrusherCrafting.java | 2 +- .../mod/crafting/ItemCrafting.java | 6 +- .../mod/crafting/MiscCrafting.java | 4 +- .../mod/crafting/ToolCrafting.java | 2 +- .../mod/creative/CreativeTab.java | 7 +- .../mod/event/WorldDecorationEvent.java | 6 +- .../mod/gen/JamVillagerTradeHandler.java | 2 +- .../gen/VillageComponentCustomCropField.java | 3 +- .../mod/gen/VillageComponentJamHouse.java | 5 +- .../mod/gen/cave/CaveWorldType.java | 9 +- .../mod/gen/cave/ChunkProviderCave.java | 28 ++-- .../mod/gen/cave/WorldGenCaveSpawn.java | 6 +- .../mod/inventory/ContainerBreaker.java | 6 +- .../mod/inventory/ContainerCanolaPress.java | 6 +- .../mod/inventory/ContainerCoalGenerator.java | 6 +- .../mod/inventory/ContainerCoffeeMachine.java | 6 +- .../mod/inventory/ContainerCrafter.java | 14 +- .../ContainerDirectionalBreaker.java | 6 +- .../mod/inventory/ContainerDrill.java | 18 ++- .../mod/inventory/ContainerDropper.java | 6 +- .../mod/inventory/ContainerEnergizer.java | 6 +- .../mod/inventory/ContainerEnervator.java | 6 +- .../mod/inventory/ContainerFeeder.java | 6 +- .../inventory/ContainerFermentingBarrel.java | 6 +- .../inventory/ContainerFluidCollector.java | 6 +- .../mod/inventory/ContainerFurnaceDouble.java | 6 +- .../mod/inventory/ContainerGiantChest.java | 6 +- .../mod/inventory/ContainerGrinder.java | 7 +- .../mod/inventory/ContainerInputter.java | 8 +- .../ContainerLaserRelayItemWhitelist.java | 6 +- .../mod/inventory/ContainerMiner.java | 6 +- .../mod/inventory/ContainerOilGenerator.java | 6 +- .../mod/inventory/ContainerPhantomPlacer.java | 6 +- .../inventory/ContainerRangedCollector.java | 6 +- .../mod/inventory/ContainerRepairer.java | 6 +- .../mod/inventory/ContainerSmileyCloud.java | 4 +- .../mod/inventory/ContainerXPSolidifier.java | 6 +- .../mod/inventory/GuiHandler.java | 2 +- .../mod/inventory/gui/GuiBreaker.java | 7 +- .../mod/inventory/gui/GuiCanolaPress.java | 2 +- .../mod/inventory/gui/GuiCoalGenerator.java | 2 +- .../mod/inventory/gui/GuiCoffeeMachine.java | 10 +- .../inventory/gui/GuiDirectionalBreaker.java | 2 +- .../mod/inventory/gui/GuiDropper.java | 7 +- .../mod/inventory/gui/GuiEnergizer.java | 2 +- .../mod/inventory/gui/GuiEnervator.java | 2 +- .../mod/inventory/gui/GuiFeeder.java | 2 +- .../inventory/gui/GuiFermentingBarrel.java | 2 +- .../mod/inventory/gui/GuiFluidCollector.java | 2 +- .../mod/inventory/gui/GuiFurnaceDouble.java | 2 +- .../mod/inventory/gui/GuiGiantChest.java | 2 +- .../mod/inventory/gui/GuiGrinder.java | 4 +- .../mod/inventory/gui/GuiInputter.java | 17 +-- .../gui/GuiLaserRelayItemWhitelist.java | 2 +- .../mod/inventory/gui/GuiMiner.java | 7 +- .../mod/inventory/gui/GuiOilGenerator.java | 2 +- .../mod/inventory/gui/GuiPhantomPlacer.java | 7 +- .../mod/inventory/gui/GuiRangedCollector.java | 10 +- .../mod/inventory/gui/GuiRepairer.java | 2 +- .../mod/inventory/gui/GuiSmileyCloud.java | 16 +-- .../mod/inventory/gui/GuiXPSolidifier.java | 15 +- .../mod/inventory/slot/SlotImmovable.java | 3 + .../mod/items/InitForeignPaxels.java | 6 +- .../mod/items/ItemAllToolAA.java | 9 +- .../mod/items/ItemAxeAA.java | 3 +- .../mod/items/ItemBattery.java | 3 + .../mod/items/ItemBooklet.java | 8 +- .../mod/items/ItemChestToCrateUpgrade.java | 6 +- .../mod/items/ItemCoffee.java | 7 +- .../mod/items/ItemCoffeeBean.java | 3 + .../mod/items/ItemCrafterOnAStick.java | 6 +- .../mod/items/ItemCrystal.java | 4 +- .../mod/items/ItemDrill.java | 16 ++- .../mod/items/ItemDrillUpgrade.java | 7 +- .../actuallyadditions/mod/items/ItemDust.java | 5 +- .../mod/items/ItemFertilizer.java | 6 +- .../mod/items/ItemFoods.java | 7 +- .../mod/items/ItemGeneric.java | 3 + .../mod/items/ItemGrowthRing.java | 4 +- .../mod/items/ItemHairyBall.java | 8 +- .../actuallyadditions/mod/items/ItemJams.java | 7 +- .../mod/items/ItemKnife.java | 9 +- .../mod/items/ItemLaserWrench.java | 3 + .../mod/items/ItemLeafBlower.java | 8 +- .../mod/items/ItemMagnetRing.java | 2 + .../mod/items/ItemMinecartAA.java | 132 ------------------ .../actuallyadditions/mod/items/ItemMisc.java | 4 +- .../mod/items/ItemPhantomConnector.java | 3 + .../mod/items/ItemPickaxeAA.java | 3 +- .../mod/items/ItemPotionRing.java | 10 +- .../items/ItemRarmorModuleReconstructor.java | 4 +- .../mod/items/ItemResonantRice.java | 6 +- .../mod/items/ItemShovelAA.java | 2 + .../mod/items/ItemSolidifiedExperience.java | 6 +- .../mod/items/ItemSpawnerChanger.java | 2 + .../mod/items/ItemTeleStaff.java | 8 +- .../mod/items/ItemWaterRemovalRing.java | 3 + .../mod/items/ItemWingsOfTheBats.java | 4 +- .../mod/items/base/ItemArmorAA.java | 9 +- .../mod/items/base/ItemBase.java | 2 +- .../mod/items/base/ItemEnergy.java | 5 +- .../mod/items/base/ItemFoodBase.java | 2 +- .../mod/items/base/ItemHoeAA.java | 9 +- .../mod/items/base/ItemSeed.java | 10 +- .../mod/items/base/ItemSwordAA.java | 11 +- .../mod/items/base/ItemToolAA.java | 10 +- .../mod/items/lens/ItemLens.java | 5 +- .../mod/items/lens/LensColor.java | 2 +- .../mod/items/lens/LensRecipeHandler.java | 4 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 8 +- .../mod/jei/RecipeWrapperWithButton.java | 8 +- .../jei/booklet/BookletRecipeCategory.java | 2 +- .../mod/jei/booklet/BookletRecipeWrapper.java | 2 +- .../coffee/CoffeeMachineRecipeCategory.java | 2 +- .../coffee/CoffeeMachineRecipeWrapper.java | 8 +- .../jei/crusher/CrusherRecipeCategory.java | 2 +- .../mod/jei/crusher/CrusherRecipeWrapper.java | 2 +- .../ReconstructorRecipeCategory.java | 2 +- .../ReconstructorRecipeWrapper.java | 2 +- .../mod/material/InitArmorMaterials.java | 7 +- .../mod/material/InitToolMaterials.java | 2 - .../mod/misc/BannerHelper.java | 8 +- .../mod/misc/DamageSources.java | 5 +- .../mod/misc/DispenserHandlerFertilize.java | 7 +- .../mod/misc/LaserRelayConnectionHandler.java | 8 +- .../mod/misc/MethodHandler.java | 8 +- ...edParticleFX.java => ParticleColored.java} | 6 +- .../actuallyadditions/mod/misc/WorldData.java | 67 +++++---- .../mod/misc/cloud/SmileyCloudEasterEggs.java | 2 +- .../mod/misc/special/SpecialRenderInit.java | 2 +- .../mod/nei/NEIBookletRecipe.java | 2 +- .../mod/nei/NEICoffeeMachineRecipe.java | 6 +- .../mod/nei/NEICrusherRecipe.java | 6 +- .../mod/nei/NEIHairyBallRecipe.java | 6 +- .../mod/nei/NEIReconstructorRecipe.java | 6 +- .../mod/nei/NEIScreenEvents.java | 2 +- .../mod/nei/NEITreasureChestRecipe.java | 6 +- .../mod/network/PacketParticle.java | 4 +- .../mod/proxy/ClientProxy.java | 11 +- .../actuallyadditions/mod/proxy/IProxy.java | 1 - .../mod/proxy/ServerProxy.java | 1 - .../mod/recipe/CrusherRecipeRegistry.java | 18 +-- .../tile/TileEntityAtomicReconstructor.java | 12 +- .../mod/tile/TileEntityBase.java | 19 +-- .../mod/tile/TileEntityBreaker.java | 9 +- .../mod/tile/TileEntityCanolaPress.java | 12 +- .../mod/tile/TileEntityCoalGenerator.java | 10 +- .../mod/tile/TileEntityCoffeeMachine.java | 12 +- .../mod/tile/TileEntityCompost.java | 8 +- .../tile/TileEntityDirectionalBreaker.java | 11 +- .../mod/tile/TileEntityDropper.java | 8 +- .../mod/tile/TileEntityEnergizer.java | 10 +- .../mod/tile/TileEntityEnervator.java | 10 +- .../mod/tile/TileEntityFeeder.java | 7 +- .../mod/tile/TileEntityFermentingBarrel.java | 4 +- .../mod/tile/TileEntityFireworkBox.java | 2 +- .../mod/tile/TileEntityFluidCollector.java | 2 +- .../mod/tile/TileEntityFurnaceDouble.java | 10 +- .../mod/tile/TileEntityFurnaceSolar.java | 2 +- .../mod/tile/TileEntityGiantChest.java | 8 +- .../mod/tile/TileEntityGreenhouseGlass.java | 2 +- .../mod/tile/TileEntityGrinder.java | 9 +- .../mod/tile/TileEntityHeatCollector.java | 2 +- .../mod/tile/TileEntityInputter.java | 8 +- .../mod/tile/TileEntityInventoryBase.java | 22 +-- .../mod/tile/TileEntityItemRepairer.java | 10 +- .../mod/tile/TileEntityItemViewer.java | 16 +-- .../mod/tile/TileEntityLaserRelay.java | 16 +-- .../TileEntityLaserRelayItemWhitelist.java | 13 +- .../tile/TileEntityLavaFactoryController.java | 2 +- .../mod/tile/TileEntityLeafGenerator.java | 4 +- .../mod/tile/TileEntityMiner.java | 23 +-- .../mod/tile/TileEntityOilGenerator.java | 4 +- .../mod/tile/TileEntityPhantomItemface.java | 14 +- .../mod/tile/TileEntityPhantomPlacer.java | 9 +- .../tile/TileEntityPhantomRedstoneface.java | 8 +- .../mod/tile/TileEntityPhantomface.java | 8 +- .../mod/tile/TileEntityRangedCollector.java | 7 +- .../mod/tile/TileEntityXPSolidifier.java | 10 +- .../mod/util/FluidStateMapper.java | 8 +- .../mod/util/RecipeUtil.java | 4 +- .../actuallyadditions/mod/util/Util.java | 4 - .../actuallyadditions/mod/util/WorldUtil.java | 6 +- .../util/playerdata/PersistentServerData.java | 6 +- 264 files changed, 1109 insertions(+), 964 deletions(-) delete mode 100644 src/main/java/cofh/api/energy/TileEnergyHandler.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java rename src/main/java/de/ellpeck/actuallyadditions/mod/misc/{EntityColoredParticleFX.java => ParticleColored.java} (78%) diff --git a/build.gradle b/build.gradle index 73bb335f5..f39b5cde7 100644 --- a/build.gradle +++ b/build.gradle @@ -7,20 +7,23 @@ buildscript { } } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.1-SNAPSHOT' + classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT' } } + apply plugin: 'net.minecraftforge.gradle.forge' +//I'm doing this because people made me do it. Even though it never worked properly when I tried it. Sigh. +apply plugin: 'idea' version = "1.9-r33" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.9-12.16.1.1887" + version = "1.9.4-12.17.0.1909-1.9.4" runDir = "idea" - mappings = "snapshot_20160420" + mappings = "snapshot_20160519" makeObfSourceJar = false //useDepAts = true @@ -61,10 +64,13 @@ processResources { } } -jar {} +jar { + +} task deobfJar(type: Jar) { from sourceSets.main.output + from sourceSets.main.java classifier = 'dev' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9397848f1..6917d27a0 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=https\://services.gradle.org/distributions/gradle-2.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-bin.zip diff --git a/src/main/java/cofh/api/energy/TileEnergyHandler.java b/src/main/java/cofh/api/energy/TileEnergyHandler.java deleted file mode 100644 index 3ba60a664..000000000 --- a/src/main/java/cofh/api/energy/TileEnergyHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -package cofh.api.energy; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; - -/** - * Reference implementation of {@link IEnergyReceiver} and {@link IEnergyProvider}. Use/extend this or implement your own. - * - * This class is really meant to summarize how each interface is properly used. - * - * @author King Lemming - * - */ -public class TileEnergyHandler extends TileEntity implements IEnergyReceiver, IEnergyProvider { - - protected EnergyStorage storage = new EnergyStorage(32000); - - @Override - public void readFromNBT(NBTTagCompound nbt) { - - super.readFromNBT(nbt); - storage.readFromNBT(nbt); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - - super.writeToNBT(nbt); - storage.writeToNBT(nbt); - } - - /* IEnergyConnection */ - @Override - public boolean canConnectEnergy(EnumFacing from) { - - return true; - } - - /* IEnergyReceiver */ - @Override - public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) { - - return storage.receiveEnergy(maxReceive, simulate); - } - - /* IEnergyProvider */ - @Override - public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate) { - - return storage.extractEnergy(maxExtract, simulate); - } - - /* IEnergyHandler */ - @Override - public int getEnergyStored(EnumFacing from) { - - return storage.getEnergyStored(); - } - - @Override - public int getMaxEnergyStored(EnumFacing from) { - - return storage.getMaxEnergyStored(); - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 672a84f33..47b6a4f47 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -29,7 +29,7 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "13"; + public static final String API_VERSION = "14"; /** * Use this to handle things that aren't based in the API itself @@ -38,15 +38,15 @@ public class ActuallyAdditionsAPI{ */ public static IMethodHandler methodHandler; - public static List crusherRecipes = new ArrayList(); - public static List ballOfFurReturnItems = new ArrayList(); - public static List treasureChestLoot = new ArrayList(); - public static List reconstructorLensConversionRecipes = new ArrayList(); - public static Map reconstructorLensColorChangers = new HashMap(); - public static List coffeeMachineIngredients = new ArrayList(); + public static final List CRUSHER_RECIPES = new ArrayList(); + public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); + public static final List TREASURE_CHEST_LOOT = new ArrayList(); + public static final List RECONSTRUCTOR_LENS_CONVERSION_RECIPES = new ArrayList(); + public static final Map RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap(); + public static final List COFFEE_MACHINE_INGREDIENTS = new ArrayList(); - public static List bookletEntries = new ArrayList(); - public static List bookletPagesWithItemStackData = new ArrayList(); + public static final List BOOKLET_ENTRIES = new ArrayList(); + public static final List BOOKLET_PAGES_WITH_ITEM_DATA = new ArrayList(); //These are getting initialized in Actually Additions' PreInit phase //DO NOT CHANGE/OVERRIDE THESE!! @@ -92,7 +92,7 @@ public class ActuallyAdditionsAPI{ */ public static void addCrusherRecipe(String input, String outputOne, int outputOneAmount, String outputTwo, int outputTwoAmount, int outputTwoChance){ if(!OreDictionary.getOres(input, false).isEmpty() && !OreDictionary.getOres(outputOne, false).isEmpty() && (outputTwo == null || outputTwo.isEmpty() || !OreDictionary.getOres(outputTwo, false).isEmpty())){ - crusherRecipes.add(new CrusherRecipe(input, outputOne, outputOneAmount, outputTwo, outputTwoAmount, outputTwoChance)); + CRUSHER_RECIPES.add(new CrusherRecipe(input, outputOne, outputOneAmount, outputTwo, outputTwoAmount, outputTwoChance)); } } @@ -117,7 +117,7 @@ public class ActuallyAdditionsAPI{ * @param outputTwoChance The chance of the second output (0 won't occur at all, 100 will all the time) */ public static void addCrusherRecipe(ItemStack input, ItemStack outputOne, ItemStack outputTwo, int outputTwoChance){ - crusherRecipes.add(new CrusherRecipe(input, outputOne, outputTwo, outputTwoChance)); + CRUSHER_RECIPES.add(new CrusherRecipe(input, outputOne, outputTwo, outputTwoChance)); } /** @@ -130,7 +130,7 @@ public class ActuallyAdditionsAPI{ */ public static void addCrusherRecipe(ItemStack input, String outputOne, int outputOneAmount){ if(!OreDictionary.getOres(outputOne, false).isEmpty()){ - crusherRecipes.add(new CrusherRecipe(input, outputOne, outputOneAmount)); + CRUSHER_RECIPES.add(new CrusherRecipe(input, outputOne, outputOneAmount)); } } @@ -141,7 +141,7 @@ public class ActuallyAdditionsAPI{ * @param chance The chance (this is from WeightedRandom.Item) */ public static void addBallOfFurReturnItem(ItemStack stack, int chance){ - ballOfFurReturnItems.add(new BallOfFurReturn(stack, chance)); + BALL_OF_FUR_RETURN_ITEMS.add(new BallOfFurReturn(stack, chance)); } /** @@ -153,7 +153,7 @@ public class ActuallyAdditionsAPI{ * @param maxAmount The maximum stacksize of the returned stack */ public static void addTreasureChestLoot(ItemStack stack, int chance, int minAmount, int maxAmount){ - treasureChestLoot.add(new TreasureChestLoot(stack, chance, minAmount, maxAmount)); + TREASURE_CHEST_LOOT.add(new TreasureChestLoot(stack, chance, minAmount, maxAmount)); } /** @@ -167,7 +167,7 @@ public class ActuallyAdditionsAPI{ * Note how this always has to be the same instance of the lens type that the item also has for it to work! */ public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse, LensConversion type){ - reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse, type)); + RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); } public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse){ @@ -184,7 +184,7 @@ public class ActuallyAdditionsAPI{ * Note how this always has to be the same instance of the lens type that the item also has for it to work! */ public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse, LensConversion type){ - reconstructorLensConversionRecipes.add(new LensConversionRecipe(input, output, energyUse, type)); + RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); } public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse){ @@ -201,7 +201,7 @@ public class ActuallyAdditionsAPI{ * @param changer The change mechanism */ public static void addReconstructorLensColorChangeItem(Item item, IColorLensChanger changer){ - reconstructorLensColorChangers.put(item, changer); + RECONSTRUCTOR_LENS_COLOR_CHANGERS.put(item, changer); } /** @@ -210,7 +210,7 @@ public class ActuallyAdditionsAPI{ * @param ingredient The ingredient to add */ public static void addCoffeeMachineIngredient(CoffeeIngredient ingredient){ - coffeeMachineIngredients.add(ingredient); + COFFEE_MACHINE_INGREDIENTS.add(ingredient); } /** @@ -219,7 +219,7 @@ public class ActuallyAdditionsAPI{ * @param entry The entry to add */ public static void addBookletEntry(IBookletEntry entry){ - bookletEntries.add(entry); + BOOKLET_ENTRIES.add(entry); } /** @@ -229,6 +229,6 @@ public class ActuallyAdditionsAPI{ * @param page The page to add */ public static void addPageWithItemStackData(BookletPage page){ - bookletPagesWithItemStackData.add(page); + BOOKLET_PAGES_WITH_ITEM_DATA.add(page); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java index a187717bb..9df5094be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java @@ -18,7 +18,7 @@ import net.minecraft.util.math.BlockPos; /** * This is the base class for a Reconstructor Lens Type that converts two items - * via the ActuallyAdditionsAPI.reconstructorLensConversionRecipes list. + * via the ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES list. * * If you want to make a new type of conversion, just use your type in the recipe * If you want to use the default type of conversion, use ActuallyAdditionsAPI.lensDefaultConversion. diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java index ddd719438..e2006733c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/BallOfFurReturn.java @@ -15,7 +15,7 @@ import net.minecraft.util.WeightedRandom; public class BallOfFurReturn extends WeightedRandom.Item{ - public ItemStack returnItem; + public final ItemStack returnItem; public BallOfFurReturn(ItemStack returnItem, int chance){ super(chance); diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java index 4def0f0f2..43edbcc13 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/LensConversionRecipe.java @@ -20,8 +20,8 @@ import java.util.List; public class LensConversionRecipe{ - public int energyUse; - public LensConversion type; + public final int energyUse; + public final LensConversion type; private String input; private String output; private ItemStack inputStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java index 29873bb7c..df310f16f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/TreasureChestLoot.java @@ -15,9 +15,9 @@ import net.minecraft.util.WeightedRandom; public class TreasureChestLoot extends WeightedRandom.Item{ - public ItemStack returnItem; - public int minAmount; - public int maxAmount; + public final ItemStack returnItem; + public final int minAmount; + public final int maxAmount; public TreasureChestLoot(ItemStack returnItem, int chance, int minAmount, int maxAmount){ super(chance); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java index a2f9b415f..808822e58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java @@ -21,7 +21,7 @@ public class InitAchievements{ public static int pageNumber; public static AchievementPage theAchievementPage; - public static ArrayList achievementList = new ArrayList(); + public static final ArrayList achievementList = new ArrayList(); public static void init(){ ModUtil.LOGGER.info("Initializing Achievements..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 2b417ff34..ad909378c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -40,6 +40,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class BlockAtomicReconstructor extends BlockContainerBase implements IHudDisplay{ @@ -84,8 +85,9 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud } } else{ - if(reconstructor.getStackInSlot(0) != null){ - player.inventory.setInventorySlotContents(player.inventory.currentItem, reconstructor.getStackInSlot(0).copy()); + ItemStack slot = reconstructor.getStackInSlot(0); + if(slot != null){ + player.inventory.setInventorySlotContents(player.inventory.currentItem, slot.copy()); reconstructor.setInventorySlotContents(0, null); } } @@ -94,13 +96,14 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud return true; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int i){ + public TileEntity createNewTileEntity(@Nonnull World world, int i){ return new TileEntityAtomicReconstructor(); } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } @@ -159,6 +162,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud this.setMaxDamage(0); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -170,7 +174,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud } @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ + public void addInformation(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull List list, boolean bool){ long sysTime = System.currentTimeMillis(); if(this.lastSysTime+3000 < sysTime){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index af3c12ba2..072a50315 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -32,10 +32,12 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockBreaker extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); - private boolean isPlacer; + private final boolean isPlacer; public BlockBreaker(boolean isPlacer, String name){ super(Material.ROCK, name); @@ -46,8 +48,9 @@ public class BlockBreaker extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return this.isPlacer ? new TileEntityPlacer() : new TileEntityBreaker(); } @@ -85,7 +88,7 @@ public class BlockBreaker extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 5a56dabea..96fdadc62 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -26,6 +26,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockCanolaPress extends BlockContainerBase{ public BlockCanolaPress(String name){ @@ -36,8 +38,9 @@ public class BlockCanolaPress extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityCanolaPress(); } @@ -46,7 +49,7 @@ public class BlockCanolaPress extends BlockContainerBase{ if(!world.isRemote){ TileEntityCanolaPress press = (TileEntityCanolaPress)world.getTileEntity(pos); if(press != null){ - if(!this.tryUseItemOnTank(player, stack, side, press)){ + if(this.checkFailUseItemOnTank(player, stack, side, press)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CANOLA_PRESS.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } @@ -61,7 +64,7 @@ public class BlockCanolaPress extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index f73329b7f..d9c14ff0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -33,6 +33,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.Random; public class BlockCoalGenerator extends BlockContainerBase{ @@ -48,8 +49,9 @@ public class BlockCoalGenerator extends BlockContainerBase{ this.setTickRandomly(true); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityCoalGenerator(); } @@ -88,7 +90,7 @@ public class BlockCoalGenerator extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index e2055d1e0..c6a36ccb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -32,6 +32,8 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockCoffeeMachine extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625, 1-0.0625*2, 1-0.0625); @@ -46,6 +48,7 @@ public class BlockCoffeeMachine extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; @@ -66,7 +69,7 @@ public class BlockCoffeeMachine extends BlockContainerBase{ if(!world.isRemote){ TileEntityCoffeeMachine machine = (TileEntityCoffeeMachine)world.getTileEntity(pos); if(machine != null){ - if(!this.tryUseItemOnTank(player, stack, f6, machine)){ + if(this.checkFailUseItemOnTank(player, stack, f6, machine)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.COFFEE_MACHINE.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } @@ -75,13 +78,14 @@ public class BlockCoffeeMachine extends BlockContainerBase{ return true; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int meta){ + public TileEntity createNewTileEntity(@Nonnull World world, int meta){ return new TileEntityCoffeeMachine(); } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 8f3a99026..103204861 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -37,14 +37,15 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; +import javax.annotation.Nonnull; import java.util.List; import java.util.Random; public class BlockColoredLamp extends BlockBase{ - public static TheColoredLampColors[] allLampTypes = TheColoredLampColors.values(); + public static final TheColoredLampColors[] allLampTypes = TheColoredLampColors.values(); private static final PropertyInteger META = PropertyInteger.create("meta", 0, allLampTypes.length-1); - public boolean isOn; + public final boolean isOn; public BlockColoredLamp(boolean isOn, String name){ super(Material.REDSTONE_LIGHT, name); @@ -100,7 +101,7 @@ public class BlockColoredLamp extends BlockBase{ } @Override - public ItemStack createStackedBlock(IBlockState state){ + public ItemStack createStackedBlock(@Nonnull IBlockState state){ return new ItemStack(InitBlocks.blockColoredLamp, 1, this.getMetaFromState(state)); } @@ -113,7 +114,7 @@ public class BlockColoredLamp extends BlockBase{ } @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ + public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ return this.isOn ? 15 : 0; } @@ -147,14 +148,16 @@ public class BlockColoredLamp extends BlockBase{ this.setMaxDamage(0); } + @Nonnull @Override - public String getItemStackDisplayName(ItemStack stack){ + public String getItemStackDisplayName(@Nonnull ItemStack stack){ if(stack.getItemDamage() >= allLampTypes.length){ - return null; + return StringUtil.BUGGED_ITEM_NAME; } return StringUtil.localize(this.getUnlocalizedName(stack)+".name")+(((BlockColoredLamp)this.block).isOn ? " ("+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".onSuffix.desc")+")" : ""); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return InitBlocks.blockColoredLamp.getUnlocalizedName()+allLampTypes[stack.getItemDamage()].name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 3dd70aaa8..3314dd49a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -39,6 +39,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class BlockCompost extends BlockContainerBase implements IHudDisplay{ @@ -60,13 +61,14 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ //this.setBlockBoundsForItemRender(); } + @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } @Override - public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn){ + public void addCollisionBoxToList(IBlockState state, @Nonnull World worldIn, @Nonnull BlockPos pos, @Nonnull AxisAlignedBB entityBox, @Nonnull List collidingBoxes, Entity entityIn){ addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_LEGS); addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_WEST); addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_NORTH); @@ -88,42 +90,45 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stackPlayer, EnumFacing f6, float f7, float f8, float f9){ if(!world.isRemote){ TileEntityCompost tile = (TileEntityCompost)world.getTileEntity(pos); - //Add items to be composted - if(stackPlayer != null && stackPlayer.getItem() instanceof ItemMisc && stackPlayer.getItemDamage() == TheMiscItems.MASHED_FOOD.ordinal() && (tile.slots[0] == null || (!(tile.slots[0].getItem() instanceof ItemFertilizer) && tile.slots[0].stackSize < TileEntityCompost.AMOUNT))){ - if(tile.slots[0] == null){ - tile.slots[0] = new ItemStack(stackPlayer.getItem(), 1, TheMiscItems.MASHED_FOOD.ordinal()); + if(tile != null){ + //Add items to be composted + if(stackPlayer != null && stackPlayer.getItem() instanceof ItemMisc && stackPlayer.getItemDamage() == TheMiscItems.MASHED_FOOD.ordinal() && (tile.slots[0] == null || (!(tile.slots[0].getItem() instanceof ItemFertilizer) && tile.slots[0].stackSize < TileEntityCompost.AMOUNT))){ + if(tile.slots[0] == null){ + tile.slots[0] = new ItemStack(stackPlayer.getItem(), 1, TheMiscItems.MASHED_FOOD.ordinal()); + } + else{ + tile.slots[0].stackSize++; + } + if(!player.capabilities.isCreativeMode){ + stackPlayer.stackSize--; + } + tile.markDirty(); } - else{ - tile.slots[0].stackSize++; - } - if(!player.capabilities.isCreativeMode){ - player.inventory.getCurrentItem().stackSize--; - } - tile.markDirty(); - } - //Add Fertilizer to player's inventory - else if(tile.slots[0] != null && (stackPlayer == null || (stackPlayer.getItem() instanceof ItemFertilizer && stackPlayer.stackSize <= stackPlayer.getMaxStackSize()-tile.slots[0].stackSize)) && tile.slots[0].getItem() instanceof ItemFertilizer){ - if(stackPlayer == null){ - player.inventory.setInventorySlotContents(player.inventory.currentItem, tile.slots[0].copy()); + //Add Fertilizer to player's inventory + else if(tile.slots[0] != null && (stackPlayer == null || (stackPlayer.getItem() instanceof ItemFertilizer && stackPlayer.stackSize <= stackPlayer.getMaxStackSize()-tile.slots[0].stackSize)) && tile.slots[0].getItem() instanceof ItemFertilizer){ + if(stackPlayer == null){ + player.inventory.setInventorySlotContents(player.inventory.currentItem, tile.slots[0].copy()); + } + else{ + stackPlayer.stackSize += tile.slots[0].stackSize; + } + tile.slots[0] = null; + tile.markDirty(); } - else{ - stackPlayer.stackSize += tile.slots[0].stackSize; - } - tile.slots[0] = null; - tile.markDirty(); } } return true; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int meta){ + public TileEntity createNewTileEntity(@Nonnull World world, int meta){ return new TileEntityCompost(); } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index 083d3ba9e..9572745d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -27,6 +27,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class BlockCrystal extends BlockBase{ @@ -84,6 +85,7 @@ public class BlockCrystal extends BlockBase{ this.setMaxDamage(0); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allCrystals.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allCrystals[stack.getItemDamage()].name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index 0ffd5342b..b7fc191d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -31,6 +31,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockDirectionalBreaker extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); @@ -43,8 +45,9 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityDirectionalBreaker(); } @@ -82,7 +85,7 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index 502b455b1..aae3d739b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -30,6 +30,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockDropper extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); @@ -42,8 +44,9 @@ public class BlockDropper extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityDropper(); } @@ -81,7 +84,7 @@ public class BlockDropper extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java index 559b7f69e..337333a5c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java @@ -27,9 +27,11 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockEnergizer extends BlockContainerBase{ - private boolean isEnergizer; + private final boolean isEnergizer; public BlockEnergizer(boolean isEnergizer, String name){ super(Material.ROCK, name); @@ -40,8 +42,9 @@ public class BlockEnergizer extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return this.isEnergizer ? new TileEntityEnergizer() : new TileEntityEnervator(); } @@ -71,7 +74,7 @@ public class BlockEnergizer extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index c9b558659..80d2d63ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -26,6 +26,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockFeeder extends BlockContainerBase{ public BlockFeeder(String name){ @@ -36,8 +38,9 @@ public class BlockFeeder extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityFeeder(); } @@ -59,7 +62,7 @@ public class BlockFeeder extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index 584a93fa0..b6a6e8910 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -26,6 +26,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockFermentingBarrel extends BlockContainerBase{ public BlockFermentingBarrel(String name){ @@ -36,13 +38,14 @@ public class BlockFermentingBarrel extends BlockContainerBase{ this.setSoundType(SoundType.WOOD); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityFermentingBarrel(); } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } @@ -52,7 +55,7 @@ public class BlockFermentingBarrel extends BlockContainerBase{ if(!world.isRemote){ TileEntityFermentingBarrel press = (TileEntityFermentingBarrel)world.getTileEntity(pos); if(press != null){ - if(!this.tryUseItemOnTank(player, heldItem, par6, press)){ + if(this.checkFailUseItemOnTank(player, heldItem, par6, press)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FERMENTING_BARREL.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java index f7cb32596..b8471edb9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java @@ -25,6 +25,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockFireworkBox extends BlockContainerBase{ public BlockFireworkBox(String name){ @@ -35,8 +37,9 @@ public class BlockFireworkBox extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityFireworkBox(); } @@ -51,7 +54,7 @@ public class BlockFireworkBox extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index e981c5866..bb6faf242 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -23,6 +23,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockFishingNet extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 0.0625, 1); @@ -35,13 +37,15 @@ public class BlockFishingNet extends BlockContainerBase{ this.setSoundType(SoundType.WOOD); } + @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityFishingNet(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 3d7aa97c1..dbecd1b7b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -32,11 +32,13 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockFluidCollector extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); - private boolean isPlacer; + private final boolean isPlacer; public BlockFluidCollector(boolean isPlacer, String name){ super(Material.ROCK, name); @@ -47,8 +49,9 @@ public class BlockFluidCollector extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return this.isPlacer ? new TileEntityFluidPlacer() : new TileEntityFluidCollector(); } @@ -60,7 +63,7 @@ public class BlockFluidCollector extends BlockContainerBase{ if(!world.isRemote){ TileEntityFluidCollector collector = (TileEntityFluidCollector)world.getTileEntity(pos); if(collector != null){ - if(!this.tryUseItemOnTank(player, stack, par6, collector)){ + if(this.checkFailUseItemOnTank(player, stack, par6, collector)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FLUID_COLLECTOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } @@ -88,7 +91,7 @@ public class BlockFluidCollector extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index 0983bbbe8..638c4061e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -35,6 +35,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.Random; public class BlockFurnaceDouble extends BlockContainerBase{ @@ -50,8 +51,9 @@ public class BlockFurnaceDouble extends BlockContainerBase{ this.setTickRandomly(true); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityFurnaceDouble(); } @@ -103,7 +105,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ } @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ + public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ return PosUtil.getMetadata(state) > 3 ? 12 : 0; } @@ -138,7 +140,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index 4359881d4..6f67b20aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -23,6 +23,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockFurnaceSolar extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 6*0.0625, 1); @@ -35,13 +37,15 @@ public class BlockFurnaceSolar extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityFurnaceSolar(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 05f0722d7..d27503e1e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -32,6 +32,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import javax.annotation.Nonnull; import java.util.ArrayList; public class BlockGiantChest extends BlockContainerBase{ @@ -44,8 +45,9 @@ public class BlockGiantChest extends BlockContainerBase{ this.setSoundType(SoundType.WOOD); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityGiantChest(); } @@ -83,8 +85,9 @@ public class BlockGiantChest extends BlockContainerBase{ super.onBlockPlacedBy(world, pos, state, entity, stack); } + @Nonnull @Override - public ArrayList getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ + public ArrayList getDrops(IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune){ ArrayList drops = super.getDrops(world, pos, state, fortune); TileEntity tile = world.getTileEntity(pos); @@ -118,7 +121,7 @@ public class BlockGiantChest extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityGiantChest){ if(!ItemUtil.contains(((TileEntityGiantChest)tile).slots, new ItemStack(InitItems.itemCrateKeeper), false)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index 6a0d28d4c..ed517c75d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -27,6 +27,8 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class BlockGreenhouseGlass extends BlockContainerBase{ public BlockGreenhouseGlass(String name){ @@ -44,7 +46,7 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side){ + public boolean shouldSideBeRendered(IBlockState state, @Nonnull IBlockAccess worldIn, @Nonnull BlockPos pos, EnumFacing side){ Block block = state.getBlock(); return worldIn.getBlockState(pos.offset(side.getOpposite())) != state || block != this && block != this && super.shouldSideBeRendered(state, worldIn, pos, side); @@ -55,6 +57,7 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ return false; } + @Nonnull @Override @SideOnly(Side.CLIENT) public BlockRenderLayer getBlockLayer(){ @@ -66,8 +69,9 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ return EnumRarity.EPIC; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityGreenhouseGlass(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index ffab840ea..3f0a01a51 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -34,6 +34,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.Random; public class BlockGrinder extends BlockContainerBase{ @@ -51,8 +52,9 @@ public class BlockGrinder extends BlockContainerBase{ this.setTickRandomly(true); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return this.isDouble ? new TileEntityGrinderDouble() : new TileEntityGrinder(); } @@ -84,7 +86,7 @@ public class BlockGrinder extends BlockContainerBase{ } @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ + public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; } @@ -99,7 +101,7 @@ public class BlockGrinder extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java index 0106f57e0..9bf8b2f9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java @@ -19,6 +19,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockHeatCollector extends BlockContainerBase{ public BlockHeatCollector(String name){ @@ -29,8 +31,9 @@ public class BlockHeatCollector extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityHeatCollector(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java index 8639fb69e..824a0bac9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java @@ -25,6 +25,8 @@ import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.math.MathHelper; import net.minecraft.world.WorldServer; +import javax.annotation.Nonnull; + public class BlockImpureIron extends BlockGeneric{ public BlockImpureIron(String name){ @@ -44,6 +46,7 @@ public class BlockImpureIron extends BlockGeneric{ this.setMaxDamage(0); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index 4423ff778..9a9631089 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -34,11 +34,13 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockInputter extends BlockContainerBase{ public static final int NAME_FLAVOR_AMOUNTS = 15; - public boolean isAdvanced; + public final boolean isAdvanced; public BlockInputter(boolean isAdvanced, String name){ super(Material.ROCK, name); @@ -50,8 +52,9 @@ public class BlockInputter extends BlockContainerBase{ this.isAdvanced = isAdvanced; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return this.isAdvanced ? new TileEntityInputterAdvanced() : new TileEntityInputter(); } @@ -68,7 +71,7 @@ public class BlockInputter extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ if(!world.isRemote){ TileEntity aTile = world.getTileEntity(pos); if(aTile instanceof TileEntityInventoryBase){ @@ -100,6 +103,7 @@ public class BlockInputter extends BlockContainerBase{ this.setMaxDamage(0); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -110,8 +114,9 @@ public class BlockInputter extends BlockContainerBase{ return damage; } + @Nonnull @Override - public String getItemStackDisplayName(ItemStack stack){ + public String getItemStackDisplayName(@Nonnull ItemStack stack){ long sysTime = System.currentTimeMillis(); if(this.lastSysTime+5000 < sysTime){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index 9de86c201..cf4573ea9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -29,6 +29,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockItemRepairer extends BlockContainerBase{ public BlockItemRepairer(String name){ @@ -40,8 +42,9 @@ public class BlockItemRepairer extends BlockContainerBase{ this.setTickRandomly(true); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityItemRepairer(); } @@ -58,7 +61,7 @@ public class BlockItemRepairer extends BlockContainerBase{ } @Override - public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ + public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; } @@ -68,7 +71,7 @@ public class BlockItemRepairer extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index 883a2b3dd..d732577a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -19,6 +19,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockItemViewer extends BlockContainerBase{ public BlockItemViewer(String name){ @@ -29,8 +31,9 @@ public class BlockItemViewer extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World worldIn, int meta){ + public TileEntity createNewTileEntity(@Nonnull World worldIn, int meta){ return new TileEntityItemViewer(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index 19ad88cbb..7b28c56be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -39,8 +39,8 @@ public class BlockLampPowerer extends BlockBase{ } @Override - public void onNeighborBlockChange(World world, BlockPos pos, IBlockState state, Block neighborBlock){ - this.updateLamp(world, pos); + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){ + this.updateLamp(worldIn, pos); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 32f96858f..c16acfd38 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -31,10 +31,12 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockLaserRelay extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); - private Type type; + private final Type type; public BlockLaserRelay(String name, Type type){ super(Material.ROCK, name); @@ -56,6 +58,7 @@ public class BlockLaserRelay extends BlockContainerBase{ return false; } + @Nonnull @Override public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, int meta, EntityLivingBase base){ return this.getStateFromMeta(side.ordinal()); @@ -85,8 +88,9 @@ public class BlockLaserRelay extends BlockContainerBase{ return false; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int i){ + public TileEntity createNewTileEntity(@Nonnull World world, int i){ switch(this.type){ case ITEM: return new TileEntityLaserRelayItem(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java index 7459c4c06..51f851185 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java @@ -28,6 +28,8 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class BlockLavaFactoryController extends BlockContainerBase implements IHudDisplay{ public BlockLavaFactoryController(String name){ @@ -38,8 +40,9 @@ public class BlockLavaFactoryController extends BlockContainerBase implements IH this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityLavaFactoryController(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java index ed1d2ebd7..d788ea5ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java @@ -21,6 +21,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockLeafGenerator extends BlockContainerBase{ public BlockLeafGenerator(String name){ @@ -31,8 +33,9 @@ public class BlockLeafGenerator extends BlockContainerBase{ this.setSoundType(SoundType.METAL); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityLeafGenerator(); } @@ -42,7 +45,7 @@ public class BlockLeafGenerator extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index 452002a96..87e6986cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -34,6 +34,8 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class BlockMiner extends BlockContainerBase implements IHudDisplay{ public BlockMiner(String name){ @@ -65,13 +67,14 @@ public class BlockMiner extends BlockContainerBase implements IHudDisplay{ return EnumRarity.RARE; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int i){ + public TileEntity createNewTileEntity(@Nonnull World world, int i){ return new TileEntityMiner(); } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index 6203a5c6e..f8f803efb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -27,12 +27,13 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class BlockMisc extends BlockBase{ - public static final TheMiscBlocks[] allMiscBlocks = TheMiscBlocks.values(); - private static final PropertyInteger META = PropertyInteger.create("meta", 0, allMiscBlocks.length-1); + public static final TheMiscBlocks[] ALL_MISC_BLOCKS = TheMiscBlocks.values(); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, ALL_MISC_BLOCKS.length-1); public BlockMisc(String name){ super(Material.ROCK, name); @@ -49,7 +50,7 @@ public class BlockMisc extends BlockBase{ @SuppressWarnings("all") @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allMiscBlocks.length; j++){ + for(int j = 0; j < ALL_MISC_BLOCKS.length; j++){ list.add(new ItemStack(item, 1, j)); } } @@ -61,14 +62,14 @@ public class BlockMisc extends BlockBase{ @Override protected void registerRendering(){ - for(int i = 0; i < allMiscBlocks.length; i++){ + for(int i = 0; i < ALL_MISC_BLOCKS.length; i++){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); } } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allMiscBlocks.length ? EnumRarity.COMMON : allMiscBlocks[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_MISC_BLOCKS.length ? EnumRarity.COMMON : ALL_MISC_BLOCKS[stack.getItemDamage()].rarity; } @Override @@ -84,9 +85,10 @@ public class BlockMisc extends BlockBase{ this.setMaxDamage(0); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allMiscBlocks.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allMiscBlocks[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_MISC_BLOCKS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_MISC_BLOCKS[stack.getItemDamage()].name; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index b0883ea80..e2fb09a1c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -33,6 +33,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.Random; public class BlockOilGenerator extends BlockContainerBase{ @@ -48,8 +49,9 @@ public class BlockOilGenerator extends BlockContainerBase{ this.setTickRandomly(true); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityOilGenerator(); } @@ -68,7 +70,7 @@ public class BlockOilGenerator extends BlockContainerBase{ if(!world.isRemote){ TileEntityOilGenerator generator = (TileEntityOilGenerator)world.getTileEntity(pos); if(generator != null){ - if(!this.tryUseItemOnTank(player, stack, par6, generator)){ + if(this.checkFailUseItemOnTank(player, stack, par6, generator)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.OIL_GENERATOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } @@ -88,7 +90,7 @@ public class BlockOilGenerator extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index d8a095ba6..b25d5c405 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -39,9 +39,11 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ - public Type type; + public final Type type; public BlockPhantom(Type type, String name){ super(Material.ROCK, name); @@ -80,15 +82,16 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ if(this.type == Type.PLACER || this.type == Type.BREAKER){ this.dropInventory(world, pos); } super.breakBlock(world, pos, state); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ switch(this.type){ case PLACER: return new TileEntityPhantomPlacer(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index 5ddd375e6..e3963fd61 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -23,6 +23,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockPhantomBooster extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(2*0.0625, 0, 2*0.0625, 1-2*0.0625, 1, 1-2*0.0625); @@ -35,6 +37,7 @@ public class BlockPhantomBooster extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; @@ -55,8 +58,9 @@ public class BlockPhantomBooster extends BlockContainerBase{ return EnumRarity.EPIC; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int i){ + public TileEntity createNewTileEntity(@Nonnull World world, int i){ return new TileEntityPhantomBooster(); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java index c14e25eae..b616b5416 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java @@ -26,6 +26,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockRangedCollector extends BlockContainerBase{ public BlockRangedCollector(String name){ @@ -36,8 +38,9 @@ public class BlockRangedCollector extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityRangedCollector(); } @@ -59,7 +62,7 @@ public class BlockRangedCollector extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ if(!world.isRemote){ TileEntity aTile = world.getTileEntity(pos); if(aTile instanceof TileEntityRangedCollector){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index 4dff97682..b7f6289be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -31,14 +31,16 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class BlockSlabs extends BlockBase{ private static final AxisAlignedBB AABB_BOTTOM_HALF = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); private static final AxisAlignedBB AABB_TOP_HALF = new AxisAlignedBB(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D); private static final PropertyInteger META = PropertyInteger.create("meta", 0, 1); - private Block fullBlock; - private int meta; + private final Block fullBlock; + private final int meta; public BlockSlabs(String name, Block fullBlock){ this(name, fullBlock, 0); @@ -76,6 +78,7 @@ public class BlockSlabs extends BlockBase{ return false; } + @Nonnull @Override public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){ if(facing.ordinal() == 1){ @@ -87,6 +90,7 @@ public class BlockSlabs extends BlockBase{ return this.getStateFromMeta(meta); } + @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return state.getValue(META) == 1 ? AABB_TOP_HALF : AABB_BOTTOM_HALF; @@ -115,8 +119,9 @@ public class BlockSlabs extends BlockBase{ this.setMaxDamage(0); } + @Nonnull @Override - public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ + public EnumActionResult onItemUse(ItemStack stack, @Nonnull EntityPlayer playerIn, World worldIn, @Nonnull BlockPos pos, EnumHand hand, @Nonnull EnumFacing facing, float hitX, float hitY, float hitZ){ if(stack.stackSize != 0 && playerIn.canPlayerEdit(pos.offset(facing), facing, stack)){ IBlockState state = worldIn.getBlockState(pos); @@ -145,7 +150,7 @@ public class BlockSlabs extends BlockBase{ @Override @SideOnly(Side.CLIENT) - public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack){ + public boolean canPlaceBlockOnSide(World worldIn, @Nonnull BlockPos pos, @Nonnull EnumFacing side, EntityPlayer player, @Nonnull ItemStack stack){ IBlockState state = worldIn.getBlockState(pos); if(state.getBlock() == this.block){ @@ -177,6 +182,7 @@ public class BlockSlabs extends BlockBase{ return false; } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 3777eda2c..e25b3cc6b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -36,6 +36,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.Random; public class BlockSmileyCloud extends BlockContainerBase{ @@ -86,13 +87,14 @@ public class BlockSmileyCloud extends BlockContainerBase{ return true; } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int meta){ + public TileEntity createNewTileEntity(@Nonnull World world, int meta){ return new TileEntitySmileyCloud(); } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 345294052..f3b9f64f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -27,7 +27,6 @@ import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -35,6 +34,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.Random; public class BlockTreasureChest extends BlockBase{ @@ -98,13 +98,13 @@ public class BlockTreasureChest extends BlockBase{ } @Override - public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player){ + public boolean canSilkHarvest(World world, BlockPos pos, @Nonnull IBlockState state, EntityPlayer player){ return false; } private void dropItems(World world, BlockPos pos){ for(int i = 0; i < MathHelper.getRandomIntegerInRange(Util.RANDOM, 3, 6); i++){ - TreasureChestLoot theReturn = WeightedRandom.getRandomItem(Util.RANDOM, ActuallyAdditionsAPI.treasureChestLoot); + TreasureChestLoot theReturn = WeightedRandom.getRandomItem(Util.RANDOM, ActuallyAdditionsAPI.TREASURE_CHEST_LOOT); ItemStack itemStack = theReturn.returnItem.copy(); itemStack.stackSize = MathHelper.getRandomIntegerInRange(Util.RANDOM, theReturn.minAmount, theReturn.maxAmount); @@ -112,9 +112,6 @@ public class BlockTreasureChest extends BlockBase{ float dY = Util.RANDOM.nextFloat()*0.8F+0.1F; float dZ = Util.RANDOM.nextFloat()*0.8F+0.1F; EntityItem entityItem = new EntityItem(world, pos.getX()+dX, pos.getY()+dY, pos.getZ()+dZ, itemStack.copy()); - if(itemStack.hasTagCompound()){ - entityItem.getEntityItem().setTagCompound((NBTTagCompound)itemStack.getTagCompound().copy()); - } float factor = 0.05F; entityItem.motionX = Util.RANDOM.nextGaussian()*factor; entityItem.motionY = Util.RANDOM.nextGaussian()*factor+0.2F; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 9d6aeb85f..e42ff9728 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -30,6 +30,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class BlockWallAA extends BlockBase{ @@ -37,7 +38,7 @@ public class BlockWallAA extends BlockBase{ protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[]{new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[]{AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)}; - private int meta; + private final int meta; public BlockWallAA(String name, Block base){ this(name, base, 0); @@ -77,8 +78,9 @@ public class BlockWallAA extends BlockBase{ return i; } + @Nonnull @Override - public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos){ + public IBlockState getActualState(@Nonnull IBlockState state, IBlockAccess worldIn, BlockPos pos){ boolean flag = this.canConnectTo(worldIn, pos.north()); boolean flag1 = this.canConnectTo(worldIn, pos.east()); boolean flag2 = this.canConnectTo(worldIn, pos.south()); @@ -99,10 +101,11 @@ public class BlockWallAA extends BlockBase{ @Override @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side){ + public boolean shouldSideBeRendered(IBlockState blockState, @Nonnull IBlockAccess blockAccess, @Nonnull BlockPos pos, EnumFacing side){ return side != EnumFacing.DOWN || super.shouldSideBeRendered(blockState, blockAccess, pos, side); } + @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ state = this.getActualState(state, source, pos); @@ -110,7 +113,7 @@ public class BlockWallAA extends BlockBase{ } @Override - public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, @Nonnull World worldIn, @Nonnull BlockPos pos){ blockState = this.getActualState(blockState, worldIn, pos); return CLIP_AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(blockState)]; } @@ -128,7 +131,7 @@ public class BlockWallAA extends BlockBase{ @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) - public void getSubBlocks(Item item, CreativeTabs tab, List list){ + public void getSubBlocks(@Nonnull Item item, CreativeTabs tab, List list){ list.add(new ItemStack(item, 1, 0)); } @@ -138,6 +141,7 @@ public class BlockWallAA extends BlockBase{ return block != Blocks.BARRIER && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial(state).isOpaque() && block.isFullCube(state)) && block.getMaterial(state) != Material.GOURD)); } + @Nonnull @Override public IBlockState getStateFromMeta(int meta){ return this.getDefaultState(); @@ -148,6 +152,7 @@ public class BlockWallAA extends BlockBase{ return 0; } + @Nonnull @Override protected BlockStateContainer createBlockState(){ return new BlockStateContainer(this, BlockWall.UP, BlockWall.NORTH, BlockWall.EAST, BlockWall.WEST, BlockWall.SOUTH); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index e696a1a56..84a5de6a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -37,6 +37,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class BlockWildPlant extends BlockBushBase{ @@ -55,9 +56,10 @@ public class BlockWildPlant extends BlockBushBase{ return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.WATER : PosUtil.getBlock(offset, world).canSustainPlant(world.getBlockState(offset), world, offset, EnumFacing.UP, this); } + @Nonnull @Override @SideOnly(Side.CLIENT) - public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player){ + public ItemStack getPickBlock(@Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player){ int metadata = PosUtil.getMetadata(pos, world); return metadata >= allWildPlants.length ? null : new ItemStack(((BlockPlant)allWildPlants[metadata].wildVersionOf).seedItem); } @@ -70,14 +72,15 @@ public class BlockWildPlant extends BlockBushBase{ } } + @Nonnull @Override - public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ + public List getDrops(IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune){ int metadata = PosUtil.getMetadata(state); return metadata >= allWildPlants.length ? null : allWildPlants[metadata].wildVersionOf.getDrops(world, pos, allWildPlants[metadata].wildVersionOf.getStateFromMeta(7), fortune); } @Override - public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player){ + public boolean canSilkHarvest(World world, BlockPos pos, @Nonnull IBlockState state, EntityPlayer player){ return false; } @@ -116,6 +119,7 @@ public class BlockWildPlant extends BlockBushBase{ this.setMaxDamage(0); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allWildPlants.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allWildPlants[stack.getItemDamage()].name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index b8770aa39..4dc6b850b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -34,6 +34,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class BlockXPSolidifier extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); @@ -46,8 +48,9 @@ public class BlockXPSolidifier extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @Nonnull @Override - public TileEntity createNewTileEntity(World world, int par2){ + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ return new TileEntityXPSolidifier(); } @@ -94,7 +97,7 @@ public class BlockXPSolidifier extends BlockContainerBase{ } @Override - public void breakBlock(World world, BlockPos pos, IBlockState state){ + public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ this.dropInventory(world, pos); TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityXPSolidifier){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index e14482166..e3ae22124 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -17,8 +17,6 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.util.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; public class InitBlocks{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 38a6fa8d9..f0ee474ec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -21,9 +21,11 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class BlockBase extends Block{ - private String name; + private final String name; public BlockBase(Material material, String name){ super(material); @@ -58,6 +60,7 @@ public class BlockBase extends Block{ return EnumRarity.COMMON; } + @Nonnull @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); @@ -68,6 +71,7 @@ public class BlockBase extends Block{ return this.getMetaProperty() == null ? super.getMetaFromState(state) : state.getValue(this.getMetaProperty()); } + @Nonnull @Override protected BlockStateContainer createBlockState(){ return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index 54b6bc22a..6ac5d937a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -21,9 +21,11 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class BlockBushBase extends BlockBush{ - private String name; + private final String name; public BlockBushBase(String name){ this.name = name; @@ -58,6 +60,7 @@ public class BlockBushBase extends BlockBush{ return EnumRarity.COMMON; } + @Nonnull @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); @@ -68,6 +71,7 @@ public class BlockBushBase extends BlockBush{ return this.getMetaProperty() == null ? super.getMetaFromState(state) : state.getValue(this.getMetaProperty()); } + @Nonnull @Override protected BlockStateContainer createBlockState(){ return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index e2469b7c3..0cce99e9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -40,12 +40,13 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.IFluidHandler; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Random; public abstract class BlockContainerBase extends BlockContainer{ - private String name; + private final String name; public BlockContainerBase(Material material, String name){ super(material); @@ -101,9 +102,6 @@ public abstract class BlockContainerBase extends BlockContainer{ float dY = Util.RANDOM.nextFloat()*0.8F+0.1F; float dZ = Util.RANDOM.nextFloat()*0.8F+0.1F; EntityItem entityItem = new EntityItem(world, pos.getX()+dX, pos.getY()+dY, pos.getZ()+dZ, stack.copy()); - if(stack.hasTagCompound()){ - entityItem.getEntityItem().setTagCompound((NBTTagCompound)stack.getTagCompound().copy()); - } float factor = 0.05F; entityItem.motionX = Util.RANDOM.nextGaussian()*factor; entityItem.motionY = Util.RANDOM.nextGaussian()*factor+0.2F; @@ -131,6 +129,7 @@ public abstract class BlockContainerBase extends BlockContainer{ return false; } + @Nonnull @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); @@ -152,8 +151,8 @@ public abstract class BlockContainerBase extends BlockContainer{ } @Override - public void onNeighborBlockChange(World world, BlockPos pos, IBlockState state, Block neighborBlock){ - this.updateRedstoneState(world, pos); + public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){ + this.updateRedstoneState(worldIn, pos); } public void updateRedstoneState(World world, BlockPos pos){ @@ -175,8 +174,8 @@ public abstract class BlockContainerBase extends BlockContainer{ } } - protected boolean tryUseItemOnTank(EntityPlayer player, ItemStack heldItem, EnumFacing sideHit, IFluidHandler tank){ - return heldItem != null && FluidUtil.interactWithTank(heldItem, player, tank, sideHit); + protected boolean checkFailUseItemOnTank(EntityPlayer player, ItemStack heldItem, EnumFacing sideHit, IFluidHandler tank){ + return heldItem == null || !FluidUtil.interactWithTank(heldItem, player, tank, sideHit); } @Override @@ -238,13 +237,15 @@ public abstract class BlockContainerBase extends BlockContainer{ return 0; } + @Nonnull @Override protected BlockStateContainer createBlockState(){ return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); } + @Nonnull @Override - public ArrayList getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ + public ArrayList getDrops(IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune){ ArrayList drops = new ArrayList(); TileEntity tile = world.getTileEntity(pos); @@ -290,6 +291,7 @@ public abstract class BlockContainerBase extends BlockContainer{ return null; } + @Nonnull @Override public EnumBlockRenderType getRenderType(IBlockState state){ return EnumBlockRenderType.MODEL; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index 71ca2925d..88c09b438 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -24,7 +24,7 @@ import net.minecraftforge.fluids.Fluid; public class BlockFluidFlowing extends BlockFluidClassic{ - private String name; + private final String name; public BlockFluidFlowing(Fluid fluid, Material material, String unlocalizedName){ super(fluid, material); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index a70e503ab..10df827ff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -27,6 +27,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.EnumPlantType; +import javax.annotation.Nonnull; import java.util.List; import java.util.Random; @@ -35,9 +36,9 @@ public class BlockPlant extends BlockCrops{ public Item seedItem; public Item returnItem; public int returnMeta; - private String name; - private int minDropAmount; - private int addDropAmount; + private final String name; + private final int minDropAmount; + private final int addDropAmount; public BlockPlant(String name, int minDropAmount, int addDropAmount){ this.name = name; @@ -72,6 +73,7 @@ public class BlockPlant extends BlockCrops{ return EnumRarity.RARE; } + @Nonnull @Override public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos){ return EnumPlantType.Crop; @@ -110,16 +112,18 @@ public class BlockPlant extends BlockCrops{ return false; } + @Nonnull @Override public Item getSeed(){ return this.seedItem; } @Override - public int quantityDropped(IBlockState state, int fortune, Random random){ + public int quantityDropped(IBlockState state, int fortune, @Nonnull Random random){ return this.getMetaFromState(state) >= 7 ? random.nextInt(this.addDropAmount)+this.minDropAmount : super.quantityDropped(state, fortune, random); } + @Nonnull @Override public Item getCrop(){ return this.returnItem; @@ -127,7 +131,7 @@ public class BlockPlant extends BlockCrops{ @Override - public Item getItemDropped(IBlockState state, Random rand, int par3){ + public Item getItemDropped(@Nonnull IBlockState state, Random rand, int par3){ return this.getMetaFromState(state) >= 7 ? this.getCrop() : this.getSeed(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index ef049fd32..fb2866844 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -21,7 +21,7 @@ import net.minecraft.item.ItemStack; public class BlockStair extends BlockStairs{ - private String name; + private final String name; public BlockStair(Block block, String name){ this(block, name, 0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index 3316ae28f..6f28797d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -16,6 +16,8 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemBlockBase extends ItemBlock{ public ItemBlockBase(Block block){ @@ -24,6 +26,7 @@ public class ItemBlockBase extends ItemBlock{ this.setMaxDamage(0); } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -34,6 +37,7 @@ public class ItemBlockBase extends ItemBlock{ return damage; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ if(this.block instanceof BlockBase){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java index b8a3ab6bb..1635ea37d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java @@ -31,7 +31,7 @@ public enum TheColoredLampColors{ RED("Red"), BLACK("Black"); - public String name; + public final String name; TheColoredLampColors(String name){ this.name = name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index d3d1557a8..ebf7228d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -19,10 +19,12 @@ import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; +import javax.annotation.Nonnull; + public class RenderCompost extends TileEntitySpecialRenderer{ @Override - public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks, int destroyStage){ + public void renderTileEntityAt(@Nonnull TileEntity te, double x, double y, double z, float partialTicks, int destroyStage){ if(te instanceof TileEntityCompost){ TileEntityCompost compost = (TileEntityCompost)te; if(compost.getStackInSlot(0) != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index 24d749c32..70b76ec27 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -20,10 +20,12 @@ import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import javax.annotation.Nonnull; + public class RenderReconstructorLens extends TileEntitySpecialRenderer{ @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int par6){ + public void renderTileEntityAt(@Nonnull TileEntity tile, double x, double y, double z, float par5, int par6){ if(!(tile instanceof TileEntityAtomicReconstructor)){ return; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 02a9a3b74..2ba524ac3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -21,12 +21,13 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +import javax.annotation.Nonnull; import java.util.Locale; public class RenderSmileyCloud extends TileEntitySpecialRenderer{ @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int partial){ + public void renderTileEntityAt(@Nonnull TileEntity tile, double x, double y, double z, float par5, int partial){ if(tile instanceof TileEntitySmileyCloud){ TileEntitySmileyCloud theCloud = (TileEntitySmileyCloud)tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 4f88d88c3..93c7d33f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -270,10 +270,10 @@ public class BookletUtils{ IndexButton button = (IndexButton)booklet.chapterButtons[i]; if(entry == null){ if(i >= GuiBooklet.INDEX_BUTTONS_OFFSET){ - boolean entryExists = ActuallyAdditionsAPI.bookletEntries.size() > i-GuiBooklet.INDEX_BUTTONS_OFFSET; + boolean entryExists = ActuallyAdditionsAPI.BOOKLET_ENTRIES.size() > i-GuiBooklet.INDEX_BUTTONS_OFFSET; button.visible = entryExists; if(entryExists){ - button.displayString = "◦ "+ActuallyAdditionsAPI.bookletEntries.get(i-GuiBooklet.INDEX_BUTTONS_OFFSET).getLocalizedNameWithFormatting(); + button.displayString = "◦ "+ActuallyAdditionsAPI.BOOKLET_ENTRIES.get(i-GuiBooklet.INDEX_BUTTONS_OFFSET).getLocalizedNameWithFormatting(); button.chap = null; } } @@ -308,8 +308,8 @@ public class BookletUtils{ } } else{ - if(place-GuiBooklet.INDEX_BUTTONS_OFFSET < ActuallyAdditionsAPI.bookletEntries.size()){ - openIndexEntry(booklet, ActuallyAdditionsAPI.bookletEntries.get(place-GuiBooklet.INDEX_BUTTONS_OFFSET), 1, true); + if(place-GuiBooklet.INDEX_BUTTONS_OFFSET < ActuallyAdditionsAPI.BOOKLET_ENTRIES.size()){ + openIndexEntry(booklet, ActuallyAdditionsAPI.BOOKLET_ENTRIES.get(place-GuiBooklet.INDEX_BUTTONS_OFFSET), 1, true); } } } @@ -431,7 +431,7 @@ public class BookletUtils{ public static ArrayList getPagesForStack(ItemStack stack){ ArrayList possiblePages = new ArrayList(); - for(BookletPage page : ActuallyAdditionsAPI.bookletPagesWithItemStackData){ + for(BookletPage page : ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA){ if(ItemUtil.contains(page.getItemStacksForPage(), stack, page.arePageStacksWildcard)){ possiblePages.add(page); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java index 117f5fa25..b46478423 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiAAAchievements.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.achievement.GuiAchievements; -import net.minecraft.stats.StatFileWriter; +import net.minecraft.stats.StatisticsManager; import net.minecraftforge.fml.relauncher.ReflectionHelper; /** @@ -22,8 +22,8 @@ import net.minecraftforge.fml.relauncher.ReflectionHelper; */ public class GuiAAAchievements extends GuiAchievements{ - public GuiAAAchievements(GuiScreen screen, StatFileWriter writer){ - super(screen, writer); + public GuiAAAchievements(GuiScreen screen, StatisticsManager statistics){ + super(screen, statistics); try{ ReflectionHelper.setPrivateValue(GuiAchievements.class, this, InitAchievements.pageNumber, 20); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index f2bf68080..43f922449 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -45,6 +45,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; +import javax.annotation.Nonnull; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -61,11 +62,11 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public static final int CHAPTER_BUTTONS_AMOUNT = 13; public static final int INDEX_BUTTONS_OFFSET = 3; private static final int[] AND_HIS_NAME_IS = new int[]{Keyboard.KEY_C, Keyboard.KEY_E, Keyboard.KEY_N, Keyboard.KEY_A}; - public int xSize; - public int ySize; + public final int xSize; + public final int ySize; public int guiLeft; public int guiTop; - public IEntrySet currentEntrySet = new EntrySet(null); + public final IEntrySet currentEntrySet = new EntrySet(null); public int indexPageAmount; public GuiButton buttonForward; public GuiButton buttonBackward; @@ -77,14 +78,14 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public GuiButton buttonConfig; public GuiButton buttonWebsite; public GuiButton buttonPatreon; - public GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT]; - public GuiButton[] bookmarkButtons = new GuiButton[8]; + public final GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT]; + public final GuiButton[] bookmarkButtons = new GuiButton[8]; public GuiTextField searchField; - public GuiScreen parentScreen; + public final GuiScreen parentScreen; private int ticksElapsed; private boolean mousePressed; - private boolean tryOpenMainPage; - private boolean saveOnClose; + private final boolean tryOpenMainPage; + private final boolean saveOnClose; private int hisNameIsAt; public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){ @@ -197,7 +198,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ } @Override - public void drawHoveringText(List list, int x, int y){ + public void drawHoveringText(@Nonnull List list, int x, int y){ super.drawHoveringText(list, x, y); } @@ -440,7 +441,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ list.add(from.getClickToSeeRecipeString()); if(mousePressed){ - BookletUtils.openIndexEntry(this, page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); + BookletUtils.openIndexEntry(this, page.getChapter().getEntry(), ActuallyAdditionsAPI.BOOKLET_ENTRIES.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); BookletUtils.openChapter(this, page.getChapter(), page); Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.getMasterRecord(SoundEvents.UI_BUTTON_CLICK, 1.0F)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index ef38bf9ab..3eabe4441 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -31,7 +31,6 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Items; -import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.fml.common.Loader; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 56358ea88..658f5dd65 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -22,13 +22,14 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; +import javax.annotation.Nonnull; import java.util.ArrayList; public class BookmarkButton extends GuiButton{ public EntrySet assignedEntry = new EntrySet(null); - private GuiBooklet booklet; + private final GuiBooklet booklet; public BookmarkButton(int id, int x, int y, GuiBooklet booklet){ super(id, x, y, 16, 16, ""); @@ -53,7 +54,7 @@ public class BookmarkButton extends GuiButton{ } @Override - public void drawButton(Minecraft minecraft, int x, int y){ + public void drawButton(@Nonnull Minecraft minecraft, int x, int y){ if(this.visible){ minecraft.getTextureManager().bindTexture(GuiBooklet.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 76e39663a..5228f43b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -21,10 +21,12 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.text.TextFormatting; +import javax.annotation.Nonnull; + public class IndexButton extends GuiButton{ public IBookletChapter chap; - private GuiBooklet gui; + private final GuiBooklet gui; public IndexButton(int id, int x, int y, int width, int height, String text, GuiBooklet gui){ super(id, x, y, width, height, text); @@ -32,7 +34,7 @@ public class IndexButton extends GuiButton{ } @Override - public void drawButton(Minecraft minecraft, int mouseX, int mouseY){ + public void drawButton(@Nonnull Minecraft minecraft, int mouseX, int mouseY){ if(this.visible){ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.hovered = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition+this.width && mouseY < this.yPosition+this.height; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index de8815d21..9f1eb03a0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -15,6 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; @@ -23,7 +24,7 @@ public class TexturedButton extends GuiButton{ public int texturePosX; public int texturePosY; - public List textList = new ArrayList(); + public final List textList = new ArrayList(); public TexturedButton(int id, int x, int y, int texturePosX, int texturePosY, int width, int height){ this(id, x, y, texturePosX, texturePosY, width, height, new ArrayList()); @@ -43,7 +44,7 @@ public class TexturedButton extends GuiButton{ } @Override - public void drawButton(Minecraft minecraft, int x, int y){ + public void drawButton(@Nonnull Minecraft minecraft, int x, int y){ if(this.visible){ minecraft.getTextureManager().bindTexture(GuiBooklet.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index 8c095d393..eabe46a6a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -75,14 +75,12 @@ public class BookletChapter implements IBookletChapter{ return this.displayStack; } - public BookletChapter setIncomplete(){ + public void setIncomplete(){ this.isIncomplete = true; - return this; } - public BookletChapter setImportant(){ + public void setImportant(){ this.color = TextFormatting.DARK_GREEN; - return this; } public BookletChapter setSpecial(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java index 414840b8f..1a381fd22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java @@ -33,7 +33,7 @@ public class BookletChapterCoffee extends BookletChapter{ ArrayList allPages = new ArrayList(); allPages.addAll(Arrays.asList(pages)); - for(CoffeeIngredient ingredient : ActuallyAdditionsAPI.coffeeMachineIngredients){ + for(CoffeeIngredient ingredient : ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS){ BookletPageAA page = new PageCoffeeRecipe(allPages.size()+1, ingredient); if(!(ingredient instanceof ItemCoffee.MilkIngredient)){ page.setNoText(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java index 5ccb632f7..1c47892fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/EntrySet.java @@ -39,7 +39,7 @@ public class EntrySet implements IEntrySet{ int chapter = compound.getInteger("Chapter"); int page = compound.getInteger("Page"); - IBookletEntry currentEntry = entry == -1 ? null : ActuallyAdditionsAPI.bookletEntries.get(entry); + IBookletEntry currentEntry = entry == -1 ? null : ActuallyAdditionsAPI.BOOKLET_ENTRIES.get(entry); IBookletChapter currentChapter = chapter == -1 || entry == -1 || currentEntry.getChapters().size() <= chapter ? null : currentEntry.getChapters().get(chapter); BookletPage currentPage = chapter == -1 || currentChapter == null || currentChapter.getPages().length <= page-1 ? null : currentChapter.getPages()[page-1]; int pageInIndex = compound.getInteger("PageInIndex"); @@ -66,7 +66,7 @@ public class EntrySet implements IEntrySet{ @Override public NBTTagCompound writeToNBT(){ NBTTagCompound compound = new NBTTagCompound(); - compound.setInteger("Entry", this.entry == null ? -1 : ActuallyAdditionsAPI.bookletEntries.indexOf(this.entry)); + compound.setInteger("Entry", this.entry == null ? -1 : ActuallyAdditionsAPI.BOOKLET_ENTRIES.indexOf(this.entry)); compound.setInteger("Chapter", this.entry == null || this.chapter == null ? -1 : this.entry.getChapters().indexOf(this.chapter)); compound.setInteger("Page", this.page == null ? -1 : this.page.getID()); compound.setInteger("PageInIndex", this.pageInIndex); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java index e697dc69b..6d32993e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java @@ -24,8 +24,8 @@ import java.util.Map; public class BookletPageAA extends BookletPage{ - protected int localizationKey; - private HashMap textReplacements = new HashMap(); + protected final int localizationKey; + private final HashMap textReplacements = new HashMap(); private boolean hasNoText; public BookletPageAA(int localizationKey){ @@ -98,7 +98,7 @@ public class BookletPageAA extends BookletPage{ } public void addToPagesWithItemStackData(){ - if(!ActuallyAdditionsAPI.bookletPagesWithItemStackData.contains(this)){ + if(!ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA.contains(this)){ ItemStack[] stacks = this.getItemStacksForPage(); if(stacks != null && stacks.length > 0){ //Ensure that there is at least one ItemStack diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java index 09da186f1..67f7005c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java @@ -27,7 +27,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class PageCoffeeRecipe extends BookletPageAA{ - public CoffeeIngredient ingredient; + public final CoffeeIngredient ingredient; public PageCoffeeRecipe(int id, CoffeeIngredient ingredient){ super(id); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index 429dc35ea..f54d35e46 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -29,7 +29,7 @@ import java.util.List; public class PageCrusherRecipe extends BookletPageAA{ - public CrusherRecipe recipe; + public final CrusherRecipe recipe; private int recipePos; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java index 5ecdf1136..05cbe904b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PagePicture.java @@ -20,8 +20,8 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class PagePicture extends PageTextOnly{ - private ResourceLocation resLoc; - private int textStartY; + private final ResourceLocation resLoc; + private final int textStartY; public PagePicture(int id, String resLocName, int textStartY){ super(id); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index 6f525382d..d32249837 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -30,7 +30,7 @@ import java.util.List; public class PageReconstructor extends BookletPageAA{ - private LensConversionRecipe[] recipes; + private final LensConversionRecipe[] recipes; private int recipePos; public PageReconstructor(int id, ArrayList recipes){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index e66a3410e..e36ed5191 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -17,9 +17,9 @@ import net.minecraftforge.common.config.Configuration; public class ConfigValues{ - public static ConfigCrafting[] craftingConfig = ConfigCrafting.values(); - public static ConfigIntValues[] intConfig = ConfigIntValues.values(); - public static ConfigBoolValues[] boolConfig = ConfigBoolValues.values(); + public static final ConfigCrafting[] CRAFTING_CONFIG = ConfigCrafting.values(); + public static final ConfigIntValues[] INT_CONFIG = ConfigIntValues.values(); + public static final ConfigBoolValues[] BOOL_CONFIG = ConfigBoolValues.values(); public static String[] crusherRecipeExceptions; public static String[] mashedFoodCraftingExceptions; @@ -45,13 +45,13 @@ public class ConfigValues{ public static void defineConfigValues(Configuration config){ - for(ConfigCrafting currConf : craftingConfig){ + for(ConfigCrafting currConf : CRAFTING_CONFIG){ currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, "If the Recipe for the "+currConf.name+" is Enabled").getBoolean(); } - for(ConfigIntValues currConf : intConfig){ + for(ConfigIntValues currConf : INT_CONFIG){ currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, currConf.desc, currConf.min, currConf.max).getInt(); } - for(ConfigBoolValues currConf : boolConfig){ + for(ConfigBoolValues currConf : BOOL_CONFIG){ currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, currConf.desc).getBoolean(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 4b3a1315e..635a7feae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -71,7 +71,7 @@ public class BlockCrafting{ public static IRecipe recipeCrate; public static IRecipe recipeFermentingBarrel; public static IRecipe recipeCanolaPress; - public static IRecipe[] recipesLamps = new IRecipe[BlockColoredLamp.allLampTypes.length]; + public static final IRecipe[] recipesLamps = new IRecipe[BlockColoredLamp.allLampTypes.length]; public static IRecipe recipePowerer; public static IRecipe recipeLeafGen; public static IRecipe recipeDirectionalBreaker; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index defb2b03e..fa9b7351f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -32,7 +32,7 @@ public class CrusherCrafting{ public static CrusherRecipe recipeIronHorseArmor; public static CrusherRecipe recipeGoldHorseArmor; public static CrusherRecipe recipeDiamondHorseArmor; - public static ArrayList miscRecipes = new ArrayList(); + public static final ArrayList miscRecipes = new ArrayList(); public static void init(){ ModUtil.LOGGER.info("Initializing Crusher Recipes..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 5e3065495..96aa5213d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -44,9 +44,9 @@ public class ItemCrafting{ public static IRecipe recipeBook; public static IRecipe recipeTinyCoal; public static IRecipe recipeTinyChar; - public static ArrayList recipesMashedFood = new ArrayList(); + public static final ArrayList recipesMashedFood = new ArrayList(); public static IRecipe recipeDrill; - public static ArrayList recipesDrillColoring = new ArrayList(); + public static final ArrayList recipesDrillColoring = new ArrayList(); public static IRecipe recipeDrillSpeedI; public static IRecipe recipeDrillSpeedII; public static IRecipe recipeDrillSpeedIII; @@ -75,7 +75,7 @@ public class ItemCrafting{ public static IRecipe recipeRiceDough; public static IRecipe recipeLeafBlower; public static IRecipe recipeLeafBlowerAdvanced; - public static ArrayList recipesPotionRings = new ArrayList(); + public static final ArrayList recipesPotionRings = new ArrayList(); public static IRecipe recipeChestToCrateUpgrade; public static IRecipe recipeLaserWrench; public static IRecipe recipeDrillCore; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index 7cc54cd64..7d21de824 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -26,8 +26,8 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; public class MiscCrafting{ - public static IRecipe[] recipesCrystals = new IRecipe[TheCrystals.values().length]; - public static IRecipe[] recipesCrystalBlocks = new IRecipe[TheCrystals.values().length]; + public static final IRecipe[] recipesCrystals = new IRecipe[TheCrystals.values().length]; + public static final IRecipe[] recipesCrystalBlocks = new IRecipe[TheCrystals.values().length]; public static void init(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java index fd67cf182..f86e9443f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java @@ -28,7 +28,7 @@ import java.util.ArrayList; public class ToolCrafting{ - public static ArrayList recipesPaxels = new ArrayList(); + public static final ArrayList recipesPaxels = new ArrayList(); public static void init(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index fce687f15..6255fffa8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -25,22 +25,25 @@ import net.minecraftforge.fluids.UniversalBucket; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class CreativeTab extends CreativeTabs{ - public static CreativeTab instance = new CreativeTab(); + public static final CreativeTab instance = new CreativeTab(); private List list; public CreativeTab(){ super(ModUtil.MOD_ID); } + @Nonnull @Override public ItemStack getIconItemStack(){ return new ItemStack(this.getTabIconItem()); } + @Nonnull @Override public Item getTabIconItem(){ return InitItems.itemBooklet; @@ -48,7 +51,7 @@ public class CreativeTab extends CreativeTabs{ @Override @SideOnly(Side.CLIENT) - public void displayAllRelevantItems(List list){ + public void displayAllRelevantItems(@Nonnull List list){ this.list = list; this.add(InitItems.itemBooklet); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index 21c0f808f..e5c48ab95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -22,7 +22,7 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.biome.BiomeGenOcean; +import net.minecraft.world.biome.BiomeOcean; import net.minecraftforge.event.terraingen.DecorateBiomeEvent; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -48,9 +48,9 @@ public class WorldDecorationEvent{ BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - if(event.getWorld().getBiomeGenForCoords(randomPos) instanceof BiomeGenOcean){ + if(event.getWorld().getBiomeGenForCoords(randomPos) instanceof BiomeOcean){ if(randomPos.getY() >= 25 && randomPos.getY() <= 45){ - if(PosUtil.getBlock(randomPos, event.getWorld()).getMaterial(event.getWorld().getBlockState(randomPos)) == Material.WATER){ + if(event.getWorld().getBlockState(randomPos).getMaterial() == Material.WATER){ if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()).isSolid()){ PosUtil.setBlock(randomPos, event.getWorld(), InitBlocks.blockTreasureChest, event.getRand().nextInt(4), 2); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index e64951714..7cf052655 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -25,7 +25,7 @@ import java.util.Random; public class JamVillagerTradeHandler{ - private ArrayList trades = new ArrayList(); + private final ArrayList trades = new ArrayList(); public JamVillagerTradeHandler(){ this.addWants("ingotGold", 5, 7); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index f1f0110d6..d5b9d7cae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -21,6 +21,7 @@ import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; +import javax.annotation.Nonnull; import java.util.List; import java.util.Random; @@ -48,7 +49,7 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous } @Override - public boolean addComponentParts(World world, Random rand, StructureBoundingBox sbb){ + public boolean addComponentParts(@Nonnull World world, @Nonnull Random rand, @Nonnull StructureBoundingBox sbb){ if(this.averageGroundLevel < 0){ this.averageGroundLevel = this.getAverageGroundLevel(world, sbb); if(this.averageGroundLevel < 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index ae103bbfd..f093c32f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -21,6 +21,7 @@ import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; +import javax.annotation.Nonnull; import java.util.List; import java.util.Random; @@ -48,7 +49,7 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ } @Override - public boolean addComponentParts(World world, Random rand, StructureBoundingBox sbb){ + public boolean addComponentParts(@Nonnull World world, @Nonnull Random rand, @Nonnull StructureBoundingBox sbb){ if(this.averageGroundLevel < 0){ this.averageGroundLevel = this.getAverageGroundLevel(world, sbb); if(this.averageGroundLevel < 0){ @@ -186,7 +187,7 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ //Loot Chest this.setBlockState(world, Blocks.CHEST.getDefaultState(), 8, 1, 6, sbb); - TileEntity chest = world.getTileEntity(new BlockPos(this.getXWithOffset(8, 6), this.getYWithOffset(1), this.getZWithOffset(8, 6))); + //TileEntity chest = world.getTileEntity(new BlockPos(this.getXWithOffset(8, 6), this.getYWithOffset(1), this.getZWithOffset(8, 6))); //TODO Chest content /*if(chest != null && chest instanceof TileEntityChest){ WeightedRandomChestContent.generateChestContents(rand, ChestGenHooks.getItems(InitVillager.JAM_HOUSE_CHEST_NAME, rand), (TileEntityChest)chest, ChestGenHooks.getCount(InitVillager.JAM_HOUSE_CHEST_NAME, rand)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java index 46dd77996..7b7076025 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java @@ -27,6 +27,8 @@ import net.minecraft.world.chunk.IChunkGenerator; import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import javax.annotation.Nonnull; + public class CaveWorldType extends WorldType{ public CaveWorldType(){ @@ -40,13 +42,14 @@ public class CaveWorldType extends WorldType{ return ConfigValues.caveWorld && world.getWorldType() instanceof CaveWorldType; } + @Nonnull @Override - public IChunkGenerator getChunkGenerator(World world, String generatorOptions){ + public IChunkGenerator getChunkGenerator(@Nonnull World world, String generatorOptions){ return new ChunkProviderCave(world); } @Override - public int getSpawnFuzz(WorldServer world, MinecraftServer server){ + public int getSpawnFuzz(@Nonnull WorldServer world, MinecraftServer server){ return 1; } @@ -57,7 +60,7 @@ public class CaveWorldType extends WorldType{ if(isCave(player.worldObj) && !player.worldObj.isRemote){ if(player.posY >= player.worldObj.getHeight() && !player.isSpectator()){ BlockPos spawn = player.worldObj.getSpawnPoint(); - player.playerNetServerHandler.setPlayerLocation(spawn.getX()+0.5, spawn.getY()+1, spawn.getZ()+0.5, player.rotationYaw, player.rotationPitch); + player.connection.setPlayerLocation(spawn.getX()+0.5, spawn.getY()+1, spawn.getZ()+0.5, player.rotationYaw, player.rotationPitch); } NBTTagCompound playerData = PersistentServerData.getDataFromPlayer(player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java index d0a987917..f9f197639 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java @@ -14,22 +14,24 @@ import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.chunk.IChunkGenerator; import net.minecraft.world.gen.feature.WorldGenerator; +import javax.annotation.Nonnull; +import java.util.Collections; import java.util.List; import java.util.Random; public class ChunkProviderCave implements IChunkGenerator{ private boolean generatedSpawn; - private World world; - private Random rand; + private final World world; + private final Random rand; - private WorldGenerator spawnGenerator; + private final WorldGenerator spawnGenerator; public ChunkProviderCave(World world){ this.world = world; @@ -37,6 +39,7 @@ public class ChunkProviderCave implements IChunkGenerator{ this.spawnGenerator = new WorldGenCaveSpawn(this.rand); } + @Nonnull @Override public Chunk provideChunk(int chunkX, int chunkZ){ ChunkPrimer primer = new ChunkPrimer(); @@ -81,22 +84,23 @@ public class ChunkProviderCave implements IChunkGenerator{ } @Override - public boolean generateStructures(Chunk chunkIn, int x, int z){ + public boolean generateStructures(@Nonnull Chunk chunkIn, int x, int z){ return false; } + @Nonnull @Override - public List getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos){ + public List getPossibleCreatures(@Nonnull EnumCreatureType creatureType, @Nonnull BlockPos pos){ + return Collections.emptyList(); + } + + @Override + public BlockPos getStrongholdGen(@Nonnull World worldIn, @Nonnull String structureName, @Nonnull BlockPos position){ return null; } @Override - public BlockPos getStrongholdGen(World worldIn, String structureName, BlockPos position){ - return null; - } - - @Override - public void recreateStructures(Chunk chunkIn, int x, int z){ + public void recreateStructures(@Nonnull Chunk chunkIn, int x, int z){ } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java index e1b242560..ca5441409 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.gen.cave; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; -import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.BlockLadder; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; @@ -25,18 +24,19 @@ import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenTrees; import net.minecraft.world.gen.feature.WorldGenerator; +import javax.annotation.Nonnull; import java.util.Random; public class WorldGenCaveSpawn extends WorldGenerator{ - private Random rand; + private final Random rand; public WorldGenCaveSpawn(Random rand){ this.rand = rand; } @Override - public boolean generate(World world, Random rand, BlockPos position){ + public boolean generate(@Nonnull World world, @Nonnull Random rand, @Nonnull BlockPos position){ this.generateCave(world, position); return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index ff7d973be..ec94a585f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -18,10 +18,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerBreaker extends Container{ - private TileEntityBreaker breaker; + private final TileEntityBreaker breaker; public ContainerBreaker(InventoryPlayer inventory, TileEntityBase tile){ this.breaker = (TileEntityBreaker)tile; @@ -92,7 +94,7 @@ public class ContainerBreaker extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.breaker.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index 98e6f994f..d0020e9fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -21,10 +21,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerCanolaPress extends Container{ - private TileEntityCanolaPress press; + private final TileEntityCanolaPress press; public ContainerCanolaPress(InventoryPlayer inventory, TileEntityBase tile){ this.press = (TileEntityCanolaPress)tile; @@ -95,7 +97,7 @@ public class ContainerCanolaPress extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.press.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index 6580ec0d7..596638fd0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -20,10 +20,12 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityFurnace; +import javax.annotation.Nonnull; + public class ContainerCoalGenerator extends Container{ - private TileEntityCoalGenerator generator; + private final TileEntityCoalGenerator generator; public ContainerCoalGenerator(InventoryPlayer inventory, TileEntityBase tile){ this.generator = (TileEntityCoalGenerator)tile; @@ -94,7 +96,7 @@ public class ContainerCoalGenerator extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.generator.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index 8b480ec04..235f4b4b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -23,10 +23,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerCoffeeMachine extends Container{ - private TileEntityCoffeeMachine machine; + private final TileEntityCoffeeMachine machine; public ContainerCoffeeMachine(InventoryPlayer inventory, TileEntityBase tile){ this.machine = (TileEntityCoffeeMachine)tile; @@ -122,7 +124,7 @@ public class ContainerCoffeeMachine extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.machine.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index f8436c4d0..e6b37aef7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -18,23 +18,19 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ContainerCrafter extends Container{ - public final int x; - public final int y; - public final int z; public final World world; - public InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3); - public IInventory craftResult = new InventoryCraftResult(); + public final InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3); + public final IInventory craftResult = new InventoryCraftResult(); public ContainerCrafter(EntityPlayer player){ InventoryPlayer inventory = player.inventory; this.world = player.worldObj; - this.x = (int)player.posX; - this.y = (int)player.posY; - this.z = (int)player.posZ; this.addSlotToContainer(new SlotCrafting(inventory.player, this.craftMatrix, this.craftResult, 0, 124, 35)); for(int i = 0; i < 3; i++){ @@ -116,7 +112,7 @@ public class ContainerCrafter extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return true; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index cbfa01211..1faf5652c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -19,10 +19,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerDirectionalBreaker extends Container{ - private TileEntityDirectionalBreaker breaker; + private final TileEntityDirectionalBreaker breaker; public ContainerDirectionalBreaker(InventoryPlayer inventory, TileEntityBase tile){ this.breaker = (TileEntityDirectionalBreaker)tile; @@ -93,7 +95,7 @@ public class ContainerDirectionalBreaker extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.breaker.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index cecb638a8..64c38e872 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -26,13 +26,15 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; +import javax.annotation.Nonnull; + public class ContainerDrill extends Container{ public static final int SLOT_AMOUNT = 5; - private InventoryDrill drillInventory = new InventoryDrill(); - private InventoryPlayer inventory; + private final InventoryDrill drillInventory = new InventoryDrill(); + private final InventoryPlayer inventory; public ContainerDrill(InventoryPlayer inventory){ this.inventory = inventory; @@ -142,7 +144,7 @@ public class ContainerDrill extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.drillInventory.isUseableByPlayer(player); } @@ -150,6 +152,7 @@ public class ContainerDrill extends Container{ public ItemStack[] slots = new ItemStack[SLOT_AMOUNT]; + @Nonnull @Override public String getName(){ return "drill"; @@ -166,22 +169,22 @@ public class ContainerDrill extends Container{ } @Override - public boolean isUseableByPlayer(EntityPlayer player){ + public boolean isUseableByPlayer(@Nonnull EntityPlayer player){ return true; } @Override - public void openInventory(EntityPlayer player){ + public void openInventory(@Nonnull EntityPlayer player){ } @Override - public void closeInventory(EntityPlayer player){ + public void closeInventory(@Nonnull EntityPlayer player){ } @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ + public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ return true; } @@ -259,6 +262,7 @@ public class ContainerDrill extends Container{ return false; } + @Nonnull @Override public ITextComponent getDisplayName(){ return new TextComponentString(StringUtil.localize(this.getName())); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index d46f03f34..ab732dce6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -19,10 +19,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerDropper extends Container{ - private TileEntityDropper dropper; + private final TileEntityDropper dropper; public ContainerDropper(InventoryPlayer inventory, TileEntityBase tile){ this.dropper = (TileEntityDropper)tile; @@ -93,7 +95,7 @@ public class ContainerDropper extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.dropper.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 56eacee7e..875f78e28 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -25,11 +25,13 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class ContainerEnergizer extends Container{ public static final EntityEquipmentSlot[] VALID_EQUIPMENT_SLOTS = new EntityEquipmentSlot[]{EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET}; - private TileEntityEnergizer energizer; + private final TileEntityEnergizer energizer; public ContainerEnergizer(final EntityPlayer player, TileEntityBase tile){ this.energizer = (TileEntityEnergizer)tile; @@ -130,7 +132,7 @@ public class ContainerEnergizer extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.energizer.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index db8b79995..7587010ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -25,10 +25,12 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class ContainerEnervator extends Container{ - private TileEntityEnervator enervator; + private final TileEntityEnervator enervator; public ContainerEnervator(final EntityPlayer player, TileEntityBase tile){ this.enervator = (TileEntityEnervator)tile; @@ -129,7 +131,7 @@ public class ContainerEnervator extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.enervator.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index 7fa1a5620..6f610228d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -19,10 +19,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerFeeder extends Container{ - private TileEntityFeeder tileFeeder; + private final TileEntityFeeder tileFeeder; public ContainerFeeder(InventoryPlayer inventory, TileEntityBase tile){ this.tileFeeder = (TileEntityFeeder)tile; @@ -88,7 +90,7 @@ public class ContainerFeeder extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.tileFeeder.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index 418499da6..6b56d6a9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -19,10 +19,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerFermentingBarrel extends Container{ - private TileEntityFermentingBarrel barrel; + private final TileEntityFermentingBarrel barrel; public ContainerFermentingBarrel(InventoryPlayer inventory, TileEntityBase tile){ this.barrel = (TileEntityFermentingBarrel)tile; @@ -83,7 +85,7 @@ public class ContainerFermentingBarrel extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.barrel.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index a9aef28d0..38197a535 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -19,10 +19,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerFluidCollector extends Container{ - private TileEntityFluidCollector collector; + private final TileEntityFluidCollector collector; public ContainerFluidCollector(InventoryPlayer inventory, TileEntityBase tile){ this.collector = (TileEntityFluidCollector)tile; @@ -90,7 +92,7 @@ public class ContainerFluidCollector extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.collector.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index 3c02b9ddd..ea521c6ac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -21,10 +21,12 @@ import net.minecraft.inventory.SlotFurnaceOutput; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; +import javax.annotation.Nonnull; + public class ContainerFurnaceDouble extends Container{ - private TileEntityFurnaceDouble tileFurnace; + private final TileEntityFurnaceDouble tileFurnace; public ContainerFurnaceDouble(InventoryPlayer inventory, TileEntityBase tile){ this.tileFurnace = (TileEntityFurnaceDouble)tile; @@ -107,7 +109,7 @@ public class ContainerFurnaceDouble extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.tileFurnace.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 9a511087a..e0af7f20c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -18,9 +18,11 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerGiantChest extends Container{ - public TileEntityGiantChest tileChest; + public final TileEntityGiantChest tileChest; public ContainerGiantChest(InventoryPlayer inventory, TileEntityBase tile){ this.tileChest = (TileEntityGiantChest)tile; @@ -91,7 +93,7 @@ public class ContainerGiantChest extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.tileChest.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index 456e88f88..fac800ed5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -21,12 +21,13 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; public class ContainerGrinder extends Container{ - public TileEntityGrinder tileGrinder; - private boolean isDouble; + public final TileEntityGrinder tileGrinder; + private final boolean isDouble; public ContainerGrinder(InventoryPlayer inventory, TileEntityBase tile, boolean isDouble){ this.tileGrinder = (TileEntityGrinder)tile; @@ -119,7 +120,7 @@ public class ContainerGrinder extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.tileGrinder.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 449402c2f..40fbea503 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -22,12 +22,14 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerInputter extends Container{ - private TileEntityInputter tileInputter; + private final TileEntityInputter tileInputter; - private boolean isAdvanced; + private final boolean isAdvanced; public ContainerInputter(InventoryPlayer inventory, TileEntityBase tile, boolean isAdvanced){ this.tileInputter = (TileEntityInputter)tile; @@ -116,7 +118,7 @@ public class ContainerInputter extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.tileInputter.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 11007e9de..51989f663 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -21,10 +21,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerLaserRelayItemWhitelist extends Container{ - private TileEntityLaserRelayItemWhitelist tile; + private final TileEntityLaserRelayItemWhitelist tile; public ContainerLaserRelayItemWhitelist(InventoryPlayer inventory, TileEntityBase tile){ this.tile = (TileEntityLaserRelayItemWhitelist)tile; @@ -104,7 +106,7 @@ public class ContainerLaserRelayItemWhitelist extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.tile.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 1b500582f..5f8b29ba8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -19,10 +19,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerMiner extends Container{ - private TileEntityMiner miner; + private final TileEntityMiner miner; public ContainerMiner(InventoryPlayer inventory, TileEntityBase tile){ this.miner = (TileEntityMiner)tile; @@ -93,7 +95,7 @@ public class ContainerMiner extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.miner.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 7bdacc476..316bf28f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -18,9 +18,11 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerOilGenerator extends Container{ - private TileEntityOilGenerator generator; + private final TileEntityOilGenerator generator; public ContainerOilGenerator(InventoryPlayer inventory, TileEntityBase tile){ this.generator = (TileEntityOilGenerator)tile; @@ -81,7 +83,7 @@ public class ContainerOilGenerator extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.generator.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index 4fc112576..a794e235f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -19,10 +19,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerPhantomPlacer extends Container{ - private TileEntityPhantomPlacer placer; + private final TileEntityPhantomPlacer placer; public ContainerPhantomPlacer(InventoryPlayer inventory, TileEntityBase tile){ this.placer = (TileEntityPhantomPlacer)tile; @@ -93,7 +95,7 @@ public class ContainerPhantomPlacer extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.placer.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 9060f34ff..9da06b3be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -21,10 +21,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerRangedCollector extends Container{ - private TileEntityRangedCollector collector; + private final TileEntityRangedCollector collector; public ContainerRangedCollector(InventoryPlayer inventory, TileEntityBase tile){ this.collector = (TileEntityRangedCollector)tile; @@ -111,7 +113,7 @@ public class ContainerRangedCollector extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.collector.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index 460973a90..f3acb4d93 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -20,10 +20,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerRepairer extends Container{ - private TileEntityItemRepairer tileRepairer; + private final TileEntityItemRepairer tileRepairer; public ContainerRepairer(InventoryPlayer inventory, TileEntityBase tile){ this.tileRepairer = (TileEntityItemRepairer)tile; @@ -95,7 +97,7 @@ public class ContainerRepairer extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.tileRepairer.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java index 7e32752a8..6feb5dbfd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java @@ -14,6 +14,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerSmileyCloud extends Container{ @Override @@ -22,7 +24,7 @@ public class ContainerSmileyCloud extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return true; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index 95ce9a7f2..636407cd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -20,10 +20,12 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ContainerXPSolidifier extends Container{ - private TileEntityXPSolidifier solidifier; + private final TileEntityXPSolidifier solidifier; public ContainerXPSolidifier(InventoryPlayer inventory, TileEntityBase tile){ this.solidifier = (TileEntityXPSolidifier)tile; @@ -86,7 +88,7 @@ public class ContainerXPSolidifier extends Container{ } @Override - public boolean canInteractWith(EntityPlayer player){ + public boolean canInteractWith(@Nonnull EntityPlayer player){ return this.solidifier.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index ad62baaf1..8b3bea59a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -192,7 +192,7 @@ public class GuiHandler implements IGuiHandler{ MINER, LASER_RELAY_ITEM_WHITELIST; - public boolean checkTileEntity; + public final boolean checkTileEntity; GuiTypes(){ this(true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java index fcc0a972b..07c5bca4c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java @@ -25,7 +25,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class GuiBreaker extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); - private TileEntityBreaker breaker; + private final TileEntityBreaker breaker; public GuiBreaker(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerBreaker(inventory, tile)); @@ -34,11 +34,6 @@ public class GuiBreaker extends GuiContainer{ this.ySize = 93+86; } - @Override - public void drawScreen(int x, int y, float f){ - super.drawScreen(x, y, f); - } - @Override public void drawGuiContainerForegroundLayer(int x, int y){ AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.breaker.getName()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java index 9b787e683..bf66e1fe7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java @@ -28,7 +28,7 @@ import java.util.Collections; public class GuiCanolaPress extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCanolaPress"); - private TileEntityCanolaPress press; + private final TileEntityCanolaPress press; public GuiCanolaPress(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerCanolaPress(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java index a435052f6..edb494e16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java @@ -27,7 +27,7 @@ import java.util.Collections; public class GuiCoalGenerator extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCoalGenerator"); - private TileEntityCoalGenerator generator; + private final TileEntityCoalGenerator generator; public GuiCoalGenerator(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerCoalGenerator(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 3194c7995..557e35275 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -34,11 +34,11 @@ import java.util.Collections; public class GuiCoffeeMachine extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCoffeeMachine"); - private TileEntityCoffeeMachine machine; - private int x; - private int y; - private int z; - private World world; + private final TileEntityCoffeeMachine machine; + private final int x; + private final int y; + private final int z; + private final World world; public GuiCoffeeMachine(InventoryPlayer inventory, TileEntityBase tile, int x, int y, int z, World world){ super(new ContainerCoffeeMachine(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java index e2c0ca26d..9f9465439 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java @@ -27,7 +27,7 @@ import java.util.Collections; public class GuiDirectionalBreaker extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiDirectionalBreaker"); - private TileEntityDirectionalBreaker breaker; + private final TileEntityDirectionalBreaker breaker; public GuiDirectionalBreaker(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerDirectionalBreaker(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java index 5539a47ee..d8846d419 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java @@ -25,7 +25,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class GuiDropper extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); - private TileEntityDropper dropper; + private final TileEntityDropper dropper; public GuiDropper(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerDropper(inventory, tile)); @@ -34,11 +34,6 @@ public class GuiDropper extends GuiContainer{ this.ySize = 93+86; } - @Override - public void drawScreen(int x, int y, float f){ - super.drawScreen(x, y, f); - } - @Override public void drawGuiContainerForegroundLayer(int x, int y){ AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.dropper.getName()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java index 2f080dbbb..f4054b7ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java @@ -27,7 +27,7 @@ import java.util.Collections; public class GuiEnergizer extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiEnergizer"); - private TileEntityEnergizer energizer; + private final TileEntityEnergizer energizer; public GuiEnergizer(EntityPlayer inventory, TileEntityBase tile){ super(new ContainerEnergizer(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java index a55d4bea4..5a5bae828 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java @@ -27,7 +27,7 @@ import java.util.Collections; public class GuiEnervator extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiEnergizer"); - private TileEntityEnervator enervator; + private final TileEntityEnervator enervator; public GuiEnervator(EntityPlayer inventory, TileEntityBase tile){ super(new ContainerEnervator(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java index 9d4546013..a7a3f48c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java @@ -29,7 +29,7 @@ import java.util.Arrays; public class GuiFeeder extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFeeder"); - public TileEntityFeeder tileFeeder; + public final TileEntityFeeder tileFeeder; public GuiFeeder(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerFeeder(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java index dcb6aadaf..a9318fd33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java @@ -28,7 +28,7 @@ import java.util.Collections; public class GuiFermentingBarrel extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFermentingBarrel"); - private TileEntityFermentingBarrel press; + private final TileEntityFermentingBarrel press; public GuiFermentingBarrel(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerFermentingBarrel(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java index 2238539d5..df766a5d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java @@ -28,7 +28,7 @@ import java.util.Collections; public class GuiFluidCollector extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFluidCollector"); - private TileEntityFluidCollector collector; + private final TileEntityFluidCollector collector; public GuiFluidCollector(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerFluidCollector(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java index 931478215..b1cb32229 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java @@ -27,7 +27,7 @@ import java.util.Collections; public class GuiFurnaceDouble extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFurnaceDouble"); - private TileEntityFurnaceDouble tileFurnace; + private final TileEntityFurnaceDouble tileFurnace; public GuiFurnaceDouble(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerFurnaceDouble(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index dceeac866..f7de51720 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -26,7 +26,7 @@ public class GuiGiantChest extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiGiantChest"); - TileEntityGiantChest chest; + final TileEntityGiantChest chest; public GuiGiantChest(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerGiantChest(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java index d815f1c89..5e2255a3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java @@ -28,8 +28,8 @@ public class GuiGrinder extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiGrinder"); private static final ResourceLocation resLocDouble = AssetUtil.getGuiLocation("guiGrinderDouble"); - private TileEntityGrinder tileGrinder; - private boolean isDouble; + private final TileEntityGrinder tileGrinder; + private final boolean isDouble; public GuiGrinder(InventoryPlayer inventoryPlayer, TileEntityBase tile){ this(inventoryPlayer, tile, false); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 0ab68f096..9dbd61e46 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -32,6 +32,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; +import javax.annotation.Nonnull; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -50,18 +51,18 @@ public class GuiInputter extends GuiContainer{ StringUtil.localize("info."+ModUtil.MOD_ID+".gui.west")}; private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiInputter"); private static final ResourceLocation resLocAdvanced = AssetUtil.getGuiLocation("guiInputterAdvanced"); - public TileEntityInputter tileInputter; - private int x; - private int y; - private int z; - private World world; + public final TileEntityInputter tileInputter; + private final int x; + private final int y; + private final int z; + private final World world; private SmallerButton whitelistPut; private SmallerButton whitelistPull; private GuiTextField fieldPutStart; private GuiTextField fieldPutEnd; private GuiTextField fieldPullStart; private GuiTextField fieldPullEnd; - private boolean isAdvanced; + private final boolean isAdvanced; public GuiInputter(InventoryPlayer inventory, TileEntityBase tile, int x, int y, int z, World world, boolean isAdvanced){ super(new ContainerInputter(inventory, tile, isAdvanced)); @@ -278,7 +279,7 @@ public class GuiInputter extends GuiContainer{ } @Override - public void drawButton(Minecraft mc, int x, int y){ + public void drawButton(@Nonnull Minecraft mc, int x, int y){ if(this.visible){ mc.getTextureManager().bindTexture(this.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); @@ -315,7 +316,7 @@ public class GuiInputter extends GuiContainer{ } @Override - public void drawButton(Minecraft mc, int x, int y){ + public void drawButton(@Nonnull Minecraft mc, int x, int y){ if(this.visible){ mc.getTextureManager().bindTexture(this.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index bbd77098f..c084879e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -37,7 +37,7 @@ import java.util.List; public class GuiLaserRelayItemWhitelist extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiLaserRelayItemWhitelist"); - private TileEntityLaserRelayItemWhitelist tile; + private final TileEntityLaserRelayItemWhitelist tile; private SmallerButton whitelistLeft; private SmallerButton whitelistRight; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index caf811bbe..331939d08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -30,7 +30,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class GuiMiner extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); - private TileEntityMiner miner; + private final TileEntityMiner miner; public GuiMiner(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerMiner(inventory, tile)); @@ -51,11 +51,6 @@ public class GuiMiner extends GuiContainer{ this.buttonList.add(buttonReset); } - @Override - public void drawScreen(int x, int y, float f){ - super.drawScreen(x, y, f); - } - @Override public void drawGuiContainerForegroundLayer(int x, int y){ AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.miner.getName()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index 81b1f3842..58149624d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -28,7 +28,7 @@ import java.util.Collections; public class GuiOilGenerator extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiOilGenerator"); - private TileEntityOilGenerator generator; + private final TileEntityOilGenerator generator; public GuiOilGenerator(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerOilGenerator(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java index 952ae36a3..5b7341b87 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java @@ -25,7 +25,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class GuiPhantomPlacer extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); - private TileEntityPhantomPlacer placer; + private final TileEntityPhantomPlacer placer; public GuiPhantomPlacer(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerPhantomPlacer(inventory, tile)); @@ -34,11 +34,6 @@ public class GuiPhantomPlacer extends GuiContainer{ this.ySize = 93+86; } - @Override - public void drawScreen(int x, int y, float f){ - super.drawScreen(x, y, f); - } - @Override public void drawGuiContainerForegroundLayer(int x, int y){ AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.placer.getName()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index 17c93bf39..f2868e33a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -34,14 +34,14 @@ import java.util.Collections; public class GuiRangedCollector extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiRangedCollector"); - private TileEntityRangedCollector collector; + private final TileEntityRangedCollector collector; private GuiInputter.SmallerButton whitelistButton; - private int x; - private int y; - private int z; - private World world; + private final int x; + private final int y; + private final int z; + private final World world; public GuiRangedCollector(InventoryPlayer inventory, TileEntityBase tile, int x, int y, int z, World world){ super(new ContainerRangedCollector(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 7fee48ddb..452d725a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -27,7 +27,7 @@ import java.util.Collections; public class GuiRepairer extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiRepairer"); - private TileEntityItemRepairer tileRepairer; + private final TileEntityItemRepairer tileRepairer; public GuiRepairer(InventoryPlayer inventory, TileEntityBase tile){ super(new ContainerRepairer(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index 3e11b4d09..d4259da40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -36,14 +36,14 @@ public class GuiSmileyCloud extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiSmileyCloud"); - private int x; - private int y; - private int z; - private World world; + private final int x; + private final int y; + private final int z; + private final World world; private GuiTextField nameField; - private TileEntitySmileyCloud cloud; + private final TileEntitySmileyCloud cloud; public GuiSmileyCloud(TileEntityBase tile, int x, int y, int z, World world){ super(new ContainerSmileyCloud()); @@ -67,12 +67,6 @@ public class GuiSmileyCloud extends GuiContainer{ this.nameField.setFocused(true); } - @Override - @SuppressWarnings("unchecked") - public void drawScreen(int x, int y, float f){ - super.drawScreen(x, y, f); - } - @Override public void drawGuiContainerForegroundLayer(int x, int y){ String name = this.cloud.name == null || this.cloud.name.isEmpty() ? "" : TextFormatting.GOLD+this.cloud.name+TextFormatting.RESET+" "+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.the")+" "; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index e23914994..2b7738d3f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -31,11 +31,11 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class GuiXPSolidifier extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiXPSolidifier"); - private TileEntityXPSolidifier solidifier; - private int x; - private int y; - private int z; - private World world; + private final TileEntityXPSolidifier solidifier; + private final int x; + private final int y; + private final int z; + private final World world; public GuiXPSolidifier(InventoryPlayer inventory, TileEntityBase tile, int x, int y, int z, World world){ super(new ContainerXPSolidifier(inventory, tile)); @@ -74,11 +74,6 @@ public class GuiXPSolidifier extends GuiContainer{ this.buttonList.add(buttonAll); } - @Override - public void drawScreen(int x, int y, float f){ - super.drawScreen(x, y, f); - } - @Override public void drawGuiContainerForegroundLayer(int x, int y){ AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.solidifier.getName()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java index 897cef9f7..fe79dbde8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java @@ -15,6 +15,8 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class SlotImmovable extends Slot{ public SlotImmovable(IInventory inventory, int id, int x, int y){ @@ -31,6 +33,7 @@ public class SlotImmovable extends Slot{ } + @Nonnull @Override public ItemStack decrStackSize(int i){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java index bb0fe2f7b..e3cd62e73 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java @@ -40,9 +40,9 @@ public class InitForeignPaxels{ private static final String SIMPLE_ORES = "simpleores"; private static final String[] SO_NAMES = new String[]{"tin", "mythril", "copper", "onyx", "adamantium"}; private static final String[] SO_REPAIR_NAMES = new String[]{"ingotTin", "ingotMythril", "ingotCopper", "gemOnyx", "ingotAdamantium"}; - public static Item[] tfPaxels = new Item[9]; - public static Item[] soPaxels = new Item[5]; - private static Item[] mtPaxels = new Item[6]; + public static final Item[] tfPaxels = new Item[9]; + public static final Item[] soPaxels = new Item[5]; + private static final Item[] mtPaxels = new Item[6]; public static void init(){ //SimpleOres diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 48d33573b..f6c5cf9d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -34,6 +34,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.HashSet; import java.util.Set; @@ -58,13 +59,14 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(resLoc, "inventory")); } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); } @Override - public boolean canHarvestBlock(IBlockState state, ItemStack stack){ + public boolean canHarvestBlock(@Nonnull IBlockState state, ItemStack stack){ return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getMaterial(state).isToolNotRequired() || (state.getBlock() == Blocks.SNOW_LAYER || state.getBlock() == Blocks.SNOW || (state.getBlock() == Blocks.OBSIDIAN ? this.toolMaterial.getHarvestLevel() >= 3 : (state.getBlock() != Blocks.DIAMOND_BLOCK && state.getBlock() != Blocks.DIAMOND_ORE ? (state.getBlock() != Blocks.EMERALD_ORE && state.getBlock() != Blocks.EMERALD_BLOCK ? (state.getBlock() != Blocks.GOLD_BLOCK && state.getBlock() != Blocks.GOLD_ORE ? (state.getBlock() != Blocks.IRON_BLOCK && state.getBlock() != Blocks.IRON_ORE ? (state.getBlock() != Blocks.LAPIS_BLOCK && state.getBlock() != Blocks.LAPIS_ORE ? (state.getBlock() != Blocks.REDSTONE_ORE && state.getBlock() != Blocks.LIT_REDSTONE_ORE ? (state.getBlock().getMaterial(state) == Material.ROCK || (state.getBlock().getMaterial(state) == Material.IRON || state.getBlock().getMaterial(state) == Material.ANVIL)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); } @@ -81,6 +83,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ return false; } + @Nonnull @Override public Set getToolClasses(ItemStack stack){ HashSet hashSet = new HashSet(); @@ -91,7 +94,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ } @Override - public float getStrVsBlock(ItemStack stack, IBlockState state){ + public float getStrVsBlock(@Nonnull ItemStack stack, IBlockState state){ return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getHarvestTool(state) == null || state.getBlock().getHarvestTool(state).isEmpty() || this.getToolClasses(stack).contains(state.getBlock().getHarvestTool(state)) ? this.efficiencyOnProperMaterial : 1.0F; } @@ -100,7 +103,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(ItemStack stack, int pass){ + public int getColorFromItemstack(@Nonnull ItemStack stack, int pass){ return pass > 0 ? ItemAllToolAA.this.color : 0xFFFFFF; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index 0c31cf28a..a97265193 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -20,6 +20,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; import java.util.Set; public class ItemAxeAA extends ItemToolAA{ @@ -35,7 +36,7 @@ public class ItemAxeAA extends ItemToolAA{ } @Override - public float getStrVsBlock(ItemStack stack, IBlockState state){ + public float getStrVsBlock(@Nonnull ItemStack stack, IBlockState state){ Material material = state.getMaterial(); return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java index 19fc959ee..88ae14cbc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java @@ -14,6 +14,8 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemBattery extends ItemEnergy{ public ItemBattery(String name, int capacity, int transfer){ @@ -21,6 +23,7 @@ public class ItemBattery extends ItemEnergy{ this.setMaxStackSize(1); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index e5a2479e5..f55f9aafc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -42,6 +42,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemBooklet extends ItemBase implements IHudDisplay{ @@ -55,6 +56,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ this.setMaxDamage(0); } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing face, float hitX, float hitY, float hitZ){ if(player.isSneaking()){ @@ -63,7 +65,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ BookletPage page = BookletUtils.getFirstPageForStack(blockStack); if(page != null){ if(world.isRemote){ - forcedEntry = new EntrySet(page, page.getChapter(), page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1); + forcedEntry = new EntrySet(page, page.getChapter(), page.getChapter().getEntry(), ActuallyAdditionsAPI.BOOKLET_ENTRIES.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1); } this.onItemRightClick(stack, world, player, hand); return EnumActionResult.SUCCESS; @@ -72,8 +74,9 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ return EnumActionResult.FAIL; } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.BOOK.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); if(!world.isRemote){ @@ -88,6 +91,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+"."+this.getBaseName()+".desc")); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index de44d2ff9..c638ce7d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -28,12 +28,15 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemChestToCrateUpgrade extends ItemBase{ public ItemChestToCrateUpgrade(String name){ super(name); } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack heldStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float par8, float par9, float par10){ if(player.isSneaking()){ @@ -55,7 +58,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ //Set New Block if(!ConfigValues.lessBlockBreakingEffects){ - world.playAuxSFX(2001, pos, Block.getStateId(world.getBlockState(pos))); + world.playBroadcastSound(2001, pos, Block.getStateId(world.getBlockState(pos))); } PosUtil.setBlock(pos, world, InitBlocks.blockGiantChest, 0, 2); @@ -83,6 +86,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ return super.onItemUse(heldStack, player, world, pos, hand, facing, par8, par9, par10); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index 018de5430..4d9534e5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -31,6 +31,7 @@ import net.minecraft.util.StringUtils; import net.minecraft.world.World; import net.minecraftforge.fml.common.Loader; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; @@ -64,7 +65,7 @@ public class ItemCoffee extends ItemFoodBase{ } public static CoffeeIngredient getIngredientFromStack(ItemStack stack){ - for(CoffeeIngredient ingredient : ActuallyAdditionsAPI.coffeeMachineIngredients){ + for(CoffeeIngredient ingredient : ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS){ if(ingredient.ingredient.copy().isItemEqual(stack)){ return ingredient; } @@ -82,7 +83,7 @@ public class ItemCoffee extends ItemFoodBase{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ + public ItemStack onItemUseFinish(ItemStack stack, @Nonnull World world, EntityLivingBase player){ ItemStack theStack = stack.copy(); super.onItemUseFinish(stack, world, player); applyPotionEffectsFromStack(stack, player); @@ -95,6 +96,7 @@ public class ItemCoffee extends ItemFoodBase{ } } + @Nonnull @Override public EnumAction getItemUseAction(ItemStack stack){ return EnumAction.DRINK; @@ -124,6 +126,7 @@ public class ItemCoffee extends ItemFoodBase{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java index 51622519d..12a2e8f30 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java @@ -14,6 +14,8 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemCoffeeBean extends ItemFoodBase{ public ItemCoffeeBean(String name){ @@ -21,6 +23,7 @@ public class ItemCoffeeBean extends ItemFoodBase{ this.setMaxDamage(0); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java index 7ad64abbb..96bf818ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java @@ -21,6 +21,8 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemCrafterOnAStick extends ItemBase{ public ItemCrafterOnAStick(String name){ @@ -28,14 +30,16 @@ public class ItemCrafterOnAStick extends ItemBase{ this.setMaxStackSize(1); } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CRAFTER.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } return new ActionResult(EnumActionResult.SUCCESS, stack); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index d931e2ca3..5532a481b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -19,10 +19,10 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemCrystal extends ItemBase{ @@ -38,11 +38,13 @@ public class ItemCrystal extends ItemBase{ return damage; } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+BlockCrystal.allCrystals[stack.getItemDamage()].name; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? EnumRarity.COMMON : BlockCrystal.allCrystals[stack.getItemDamage()].rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index bbe86937d..ec9438f71 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -50,6 +50,7 @@ import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -75,6 +76,7 @@ public class ItemDrill extends ItemEnergy{ this.setHarvestLevel("pickaxe", HARVEST_LEVEL); } + @Nonnull @Override //Places Blocks if the Placing Upgrade is installed public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ @@ -157,8 +159,9 @@ public class ItemDrill extends ItemEnergy{ return slots; } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote && player.isSneaking()){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.DRILL.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } @@ -201,13 +204,15 @@ public class ItemDrill extends ItemEnergy{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; } + @Nonnull @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ + public Multimap getAttributeModifiers(@Nonnull EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); if(slot == EntityEquipmentSlot.MAINHAND){ @@ -259,12 +264,13 @@ public class ItemDrill extends ItemEnergy{ } @Override - public boolean canHarvestBlock(IBlockState state, ItemStack stack){ + public boolean canHarvestBlock(@Nonnull IBlockState state, ItemStack stack){ int harvestLevel = this.getHarvestLevel(stack, ""); Block block = state.getBlock(); return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? harvestLevel >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); } + @Nonnull @Override public Set getToolClasses(ItemStack stack){ HashSet hashSet = new HashSet(); @@ -274,7 +280,7 @@ public class ItemDrill extends ItemEnergy{ } @Override - public int getHarvestLevel(ItemStack stack, String toolClass){ + public int getHarvestLevel(ItemStack stack, @Nonnull String toolClass){ return HARVEST_LEVEL; } @@ -344,7 +350,7 @@ public class ItemDrill extends ItemEnergy{ @Override @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tabs, List list){ + public void getSubItems(@Nonnull Item item, CreativeTabs tabs, List list){ for(int i = 0; i < 16; i++){ this.addDrillStack(list, i); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java index c076bfde1..4cfd8d04b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java @@ -19,9 +19,11 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemDrillUpgrade extends ItemBase{ - public UpgradeType type; + public final UpgradeType type; public ItemDrillUpgrade(UpgradeType type, String unlocName){ super(unlocName); @@ -37,8 +39,9 @@ public class ItemDrillUpgrade extends ItemBase{ return -1; } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote && this.type == UpgradeType.PLACER){ this.setSlotToPlaceFrom(stack, player.inventory.currentItem); return new ActionResult(EnumActionResult.SUCCESS, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 17fa26b8e..ca7b5c4aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -24,6 +24,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemDust extends ItemBase implements IColorProvidingItem{ @@ -40,11 +41,13 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ return damage; } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allDusts.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allDusts[stack.getItemDamage()].name; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allDusts.length ? EnumRarity.COMMON : allDusts[stack.getItemDamage()].rarity; @@ -70,7 +73,7 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(ItemStack stack, int pass){ + public int getColorFromItemstack(@Nonnull ItemStack stack, int pass){ return stack.getItemDamage() >= allDusts.length ? 0xFFFFFF : allDusts[stack.getItemDamage()].color; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index 08563140e..b6fee157a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -23,6 +23,8 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemFertilizer extends ItemBase{ public ItemFertilizer(String name){ @@ -31,17 +33,19 @@ public class ItemFertilizer extends ItemBase{ BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, new DispenserHandlerFertilize()); } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float par8, float par9, float par10){ if(ItemDye.applyBonemeal(stack, world, pos, player)){ if(!world.isRemote){ - world.playAuxSFX(2005, pos, 0); + world.playBroadcastSound(2005, pos, 0); } return EnumActionResult.SUCCESS; } return super.onItemUse(stack, player, world, pos, hand, side, par8, par9, par10); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index f1fe99480..9cbee76c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -23,11 +23,11 @@ import net.minecraft.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemFoods extends ItemFoodBase{ @@ -42,7 +42,7 @@ public class ItemFoods extends ItemFoodBase{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ + public ItemStack onItemUseFinish(ItemStack stack, @Nonnull World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); ItemStack returnItem = stack.getItemDamage() >= allFoods.length ? null : allFoods[stack.getItemDamage()].returnItem; if(returnItem != null && player instanceof EntityPlayer){ @@ -62,6 +62,7 @@ public class ItemFoods extends ItemFoodBase{ return stack.getItemDamage() >= allFoods.length ? 0 : allFoods[stack.getItemDamage()].useDuration; } + @Nonnull @Override public EnumAction getItemUseAction(ItemStack stack){ return stack.getItemDamage() >= allFoods.length ? EnumAction.EAT : (allFoods[stack.getItemDamage()].getsDrunken ? EnumAction.DRINK : EnumAction.EAT); @@ -82,11 +83,13 @@ public class ItemFoods extends ItemFoodBase{ return damage; } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allFoods.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allFoods[stack.getItemDamage()].name; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allFoods.length ? EnumRarity.COMMON : allFoods[stack.getItemDamage()].rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java index 7c93d1bb2..a3f45c0b9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java @@ -14,6 +14,8 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemGeneric extends ItemBase{ public ItemGeneric(String name){ @@ -21,6 +23,7 @@ public class ItemGeneric extends ItemBase{ this.setMaxDamage(0); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.UNCOMMON; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index 11427f011..f171bf602 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -25,6 +25,7 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; @@ -76,7 +77,7 @@ public class ItemGrowthRing extends ItemEnergy{ //Show Particles if Metadata changed if(PosUtil.getMetadata(pos, world) != metaBefore){ - world.playAuxSFX(2005, pos, 0); + world.playBroadcastSound(2005, pos, 0); } if(!player.capabilities.isCreativeMode){ @@ -92,6 +93,7 @@ public class ItemGrowthRing extends ItemEnergy{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index d45db89ee..2ddc3edd9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -21,14 +21,17 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.*; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemHairyBall extends ItemBase{ public ItemHairyBall(String name){ super(name); } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ ItemStack returnItem = this.getRandomReturnItem(); if(!player.inventory.addItemStackToInventory(returnItem)){ @@ -44,9 +47,10 @@ public class ItemHairyBall extends ItemBase{ } public ItemStack getRandomReturnItem(){ - return WeightedRandom.getRandomItem(Util.RANDOM, ActuallyAdditionsAPI.ballOfFurReturnItems).returnItem.copy(); + return WeightedRandom.getRandomItem(Util.RANDOM, ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS).returnItem.copy(); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 8fdefb846..6c9f2732b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -31,6 +31,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ @@ -49,11 +50,13 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ return damage; } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allJams.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allJams[stack.getItemDamage()].name; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allJams.length ? EnumRarity.COMMON : allJams[stack.getItemDamage()].rarity; @@ -68,7 +71,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ + public ItemStack onItemUseFinish(ItemStack stack, @Nonnull World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); if(player instanceof EntityPlayer && !world.isRemote && stack.getItemDamage() < allJams.length){ @@ -110,7 +113,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(ItemStack stack, int pass){ + public int getColorFromItemstack(@Nonnull ItemStack stack, int pass){ return pass > 0 ? (stack.getItemDamage() >= allJams.length ? 0xFFFFFF : allJams[stack.getItemDamage()].color) : 0xFFFFFF; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index ca40804f1..d4567c059 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -18,6 +18,8 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemKnife extends ItemBase{ public ItemKnife(String name){ @@ -33,14 +35,16 @@ public class ItemKnife extends ItemBase{ return true; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; } + @Nonnull @SuppressWarnings("unchecked") @Override - public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ + public Multimap getAttributeModifiers(@Nonnull EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); if(slot == EntityEquipmentSlot.MAINHAND){ map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Knife Modifier", 3, 0)); @@ -48,8 +52,9 @@ public class ItemKnife extends ItemBase{ return map; } + @Nonnull @Override - public ItemStack getContainerItem(ItemStack stack){ + public ItemStack getContainerItem(@Nonnull ItemStack stack){ ItemStack theStack = stack.copy(); theStack.setItemDamage(theStack.getItemDamage()+1); theStack.stackSize = 1; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 75a99c2e6..f69f7973c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -30,6 +30,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemLaserWrench extends ItemBase{ @@ -39,6 +40,7 @@ public class ItemLaserWrench extends ItemBase{ this.setMaxStackSize(1); } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing par7, float par8, float par9, float par10){ if(!world.isRemote){ @@ -98,6 +100,7 @@ public class ItemLaserWrench extends ItemBase{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index c3f0ec950..d9c29a587 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -30,6 +30,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Collections; @@ -43,12 +44,14 @@ public class ItemLeafBlower extends ItemBase{ this.setMaxStackSize(1); } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ player.setActiveHand(hand); return new ActionResult(EnumActionResult.SUCCESS, stack); } + @Nonnull @Override public EnumAction getItemUseAction(ItemStack stack){ return EnumAction.BOW; @@ -60,6 +63,7 @@ public class ItemLeafBlower extends ItemBase{ return Integer.MAX_VALUE; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return this.isAdvanced ? EnumRarity.EPIC : EnumRarity.RARE; @@ -117,7 +121,7 @@ public class ItemLeafBlower extends ItemBase{ //Plays the Breaking Sound if(!ConfigValues.lessBlockBreakingEffects){ - world.playAuxSFX(2001, theCoord, Block.getStateId(world.getBlockState(theCoord))); + world.playBroadcastSound(2001, theCoord, Block.getStateId(world.getBlockState(theCoord))); } //Deletes the Block diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index 9f1d30b7f..eac4fd8e8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -20,6 +20,7 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import javax.annotation.Nonnull; import java.util.ArrayList; public class ItemMagnetRing extends ItemEnergy{ @@ -64,6 +65,7 @@ public class ItemMagnetRing extends ItemEnergy{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java deleted file mode 100644 index 0058045b9..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMinecartAA.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * This file ("ItemMinecartAA.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items; - -import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import net.minecraft.block.BlockDispenser; -import net.minecraft.block.BlockRailBase; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.dispenser.IBehaviorDispenseItem; -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public abstract class ItemMinecartAA extends ItemBase{ - - private static final IBehaviorDispenseItem MINECART_DISPENSER_BEHAVIOR = new BehaviorDefaultDispenseItem(){ - private final BehaviorDefaultDispenseItem behaviourDefaultDispenseItem = new BehaviorDefaultDispenseItem(); - - @Override - public ItemStack dispenseStack(IBlockSource source, ItemStack stack){ - EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); - World world = source.getWorld(); - double d0 = source.getX()+(double)facing.getFrontOffsetX()*1.125D; - double d1 = Math.floor(source.getY())+(double)facing.getFrontOffsetY(); - double d2 = source.getZ()+(double)facing.getFrontOffsetZ()*1.125D; - BlockPos pos = source.getBlockPos().offset(facing); - IBlockState state = world.getBlockState(pos); - BlockRailBase.EnumRailDirection direction = state.getBlock() instanceof BlockRailBase ? state.getValue(((BlockRailBase)state.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; - double d3; - - if(BlockRailBase.isRailBlock(state)){ - if(direction.isAscending()){ - d3 = 0.6D; - } - else{ - d3 = 0.1D; - } - } - else{ - if(state.getMaterial() != Material.AIR || !BlockRailBase.isRailBlock(world.getBlockState(pos.down()))){ - return this.behaviourDefaultDispenseItem.dispense(source, stack); - } - - IBlockState state1 = world.getBlockState(pos.down()); - BlockRailBase.EnumRailDirection direction1 = state1.getBlock() instanceof BlockRailBase ? state1.getValue(((BlockRailBase)state1.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; - - if(facing != EnumFacing.DOWN && direction1.isAscending()){ - d3 = -0.4D; - } - else{ - d3 = -0.9D; - } - } - - EntityMinecart cart = ((ItemMinecartAA)stack.getItem()).createCart(world, d0, d1+d3, d2); - - if(stack.hasDisplayName()){ - cart.setCustomNameTag(stack.getDisplayName()); - } - - world.spawnEntityInWorld(cart); - stack.splitStack(1); - return stack; - } - - @Override - protected void playDispenseSound(IBlockSource source){ - source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); - } - }; - - public ItemMinecartAA(String name){ - super(name); - this.maxStackSize = 1; - - BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, MINECART_DISPENSER_BEHAVIOR); - } - - @Override - public EnumRarity getRarity(ItemStack stack){ - return EnumRarity.UNCOMMON; - } - - public abstract EntityMinecart createCart(World world, double x, double y, double z); - - @Override - public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ - IBlockState state = worldIn.getBlockState(pos); - - if(!BlockRailBase.isRailBlock(state)){ - return EnumActionResult.FAIL; - } - else{ - if(!worldIn.isRemote){ - BlockRailBase.EnumRailDirection direction = state.getBlock() instanceof BlockRailBase ? state.getValue(((BlockRailBase)state.getBlock()).getShapeProperty()) : BlockRailBase.EnumRailDirection.NORTH_SOUTH; - double d0 = 0.0D; - - if(direction.isAscending()){ - d0 = 0.5D; - } - - EntityMinecart cart = ((ItemMinecartAA)stack.getItem()).createCart(worldIn, (double)pos.getX()+0.5D, (double)pos.getY()+0.0625D+d0, (double)pos.getZ()+0.5D); - - if(stack.hasDisplayName()){ - cart.setCustomNameTag(stack.getDisplayName()); - } - - worldIn.spawnEntityInWorld(cart); - } - - stack.stackSize--; - return EnumActionResult.SUCCESS; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 59df1de4d..a6fa6f604 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -19,10 +19,10 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemMisc extends ItemBase{ @@ -39,11 +39,13 @@ public class ItemMisc extends ItemBase{ return damage; } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allMiscItems.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allMiscItems[stack.getItemDamage()].name; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allMiscItems.length ? EnumRarity.COMMON : allMiscItems[stack.getItemDamage()].rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index cf75a861a..46082e8fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -32,6 +32,7 @@ import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemPhantomConnector extends ItemBase{ @@ -80,6 +81,7 @@ public class ItemPhantomConnector extends ItemBase{ stack.setTagCompound(tag); } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing par7, float par8, float par9, float par10){ if(!world.isRemote){ @@ -146,6 +148,7 @@ public class ItemPhantomConnector extends ItemBase{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index 79019a955..0e0d0d9b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -20,6 +20,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; import java.util.Set; public class ItemPickaxeAA extends ItemToolAA{ @@ -76,7 +77,7 @@ public class ItemPickaxeAA extends ItemToolAA{ } @Override - public float getStrVsBlock(ItemStack stack, IBlockState state){ + public float getStrVsBlock(@Nonnull ItemStack stack, IBlockState state){ Material material = state.getMaterial(); return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 82b32282b..231b968ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -29,13 +29,14 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ public static final ThePotionRings[] allRings = ThePotionRings.values(); - private boolean isAdvanced; + private final boolean isAdvanced; public ItemPotionRing(boolean isAdvanced, String name){ super(name); @@ -49,6 +50,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ return damage; } + @Nonnull @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allRings.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allRings[stack.getItemDamage()].name; @@ -80,8 +82,9 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ } } + @Nonnull @Override - public String getItemStackDisplayName(ItemStack stack){ + public String getItemStackDisplayName(@Nonnull ItemStack stack){ String standardName = StringUtil.localize(this.getUnlocalizedName()+".name"); if(stack.getItemDamage() < allRings.length){ String effect = StringUtil.localize(allRings[stack.getItemDamage()].name); @@ -90,6 +93,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ return standardName; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allRings.length ? EnumRarity.COMMON : allRings[stack.getItemDamage()].rarity; @@ -115,7 +119,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(ItemStack stack, int tintIndex){ + public int getColorFromItemstack(@Nonnull ItemStack stack, int tintIndex){ return stack.getItemDamage() >= allRings.length ? 0xFFFFFF : allRings[stack.getItemDamage()].color; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index c2e19bcda..8088ac7a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -16,9 +16,7 @@ import de.canitzp.rarmor.api.modules.IRarmorModule; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; -import de.ellpeck.actuallyadditions.api.lens.LensConversion; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.entity.player.EntityPlayer; @@ -32,6 +30,7 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraftforge.fml.common.Optional; +import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; @@ -49,6 +48,7 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo return this.getRegistryName().toString(); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 90fb054d6..68a78938b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -19,14 +19,17 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemResonantRice extends ItemBase{ public ItemResonantRice(String name){ super(name); } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ stack.stackSize--; world.createExplosion(null, player.posX, player.posY, player.posZ, 0.5F, true); @@ -34,6 +37,7 @@ public class ItemResonantRice extends ItemBase{ return new ActionResult(EnumActionResult.SUCCESS, stack); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index 99babedc2..c47d7a5b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -26,6 +26,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import javax.annotation.Nonnull; import java.util.Set; public class ItemShovelAA extends ItemToolAA{ @@ -46,6 +47,7 @@ public class ItemShovelAA extends ItemToolAA{ return block == Blocks.SNOW_LAYER || block == Blocks.SNOW; } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index 5c1c7bf21..09e8ec70e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -20,6 +20,8 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemSolidifiedExperience extends ItemBase{ public static final int SOLID_XP_AMOUNT = 8; @@ -28,8 +30,9 @@ public class ItemSolidifiedExperience extends ItemBase{ super(name); } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ if(!player.isSneaking()){ world.spawnEntityInWorld(new EntityXPOrb(world, player.posX+0.5, player.posY+0.5, player.posZ+0.5, SOLID_XP_AMOUNT)); @@ -47,6 +50,7 @@ public class ItemSolidifiedExperience extends ItemBase{ return new ActionResult(EnumActionResult.SUCCESS, stack); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.UNCOMMON; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index 82547e527..b87452aec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -32,6 +32,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class ItemSpawnerChanger extends ItemBase{ @@ -41,6 +42,7 @@ public class ItemSpawnerChanger extends ItemBase{ this.setMaxStackSize(1); } + @Nonnull @Override public EnumActionResult onItemUse(ItemStack aStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ if(!world.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index 570438f2d..cb5c304c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -27,14 +27,17 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemTeleStaff extends ItemEnergy{ public ItemTeleStaff(String name){ super(500000, 10000, name); } + @Nonnull @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ if(this.getWaitTime(stack) <= 0){ RayTraceResult pos = WorldUtil.getNearestPositionWithAir(world, player, 100); @@ -47,7 +50,7 @@ public class ItemTeleStaff extends ItemEnergy{ int baseUse = 200; int use = baseUse+(int)(baseUse*pos.hitVec.distanceTo(new Vec3d(player.posX, player.posY+(player.getEyeHeight()-player.getDefaultEyeHeight()), player.posZ))); if(this.getEnergyStored(stack) >= use){ - ((EntityPlayerMP)player).playerNetServerHandler.setPlayerLocation(x, y, z, player.rotationYaw, player.rotationPitch); + ((EntityPlayerMP)player).connection.setPlayerLocation(x, y, z, player.rotationYaw, player.rotationPitch); player.dismountRidingEntity(); world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ENDERMEN_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F); if(!player.capabilities.isCreativeMode){ @@ -72,6 +75,7 @@ public class ItemTeleStaff extends ItemEnergy{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index c2165d225..d8595e27f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -23,6 +23,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; +import javax.annotation.Nonnull; + public class ItemWaterRemovalRing extends ItemEnergy{ public ItemWaterRemovalRing(String name){ @@ -74,6 +76,7 @@ public class ItemWaterRemovalRing extends ItemEnergy{ } } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index a9fac2555..179be6801 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -15,6 +15,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; import java.util.ArrayList; public class ItemWingsOfTheBats extends ItemBase{ @@ -29,7 +30,7 @@ public class ItemWingsOfTheBats extends ItemBase{ *

* (Partially excerpted from Botania's Wing System by Vazkii (as I had fiddled around with the system and couldn't make it work) with permission, thanks!) */ - public static ArrayList wingedPlayers = new ArrayList(); + public static final ArrayList wingedPlayers = new ArrayList(); public ItemWingsOfTheBats(String name){ super(name); @@ -87,6 +88,7 @@ public class ItemWingsOfTheBats extends ItemBase{ return null; } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index c1df378d9..a263a9d81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -18,11 +18,13 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemArmorAA extends ItemArmor{ - private ItemStack repairItem; - private String name; - private EnumRarity rarity; + private final ItemStack repairItem; + private final String name; + private final EnumRarity rarity; public ItemArmorAA(String name, ArmorMaterial material, int type, ItemStack repairItem){ this(name, material, type, repairItem, EnumRarity.RARE); @@ -55,6 +57,7 @@ public class ItemArmorAA extends ItemArmor{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index 3b7d018dd..daffed792 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -19,7 +19,7 @@ import net.minecraft.item.ItemStack; public class ItemBase extends Item{ - private String name; + private final String name; public ItemBase(String name){ this.name = name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 0b3141e2b..52c421c00 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -23,11 +23,12 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public abstract class ItemEnergy extends ItemEnergyContainer{ - private String name; + private final String name; public ItemEnergy(int maxPower, int transfer, String name){ super(maxPower, transfer); @@ -81,7 +82,7 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ @Override @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tabs, List list){ + public void getSubItems(@Nonnull Item item, CreativeTabs tabs, List list){ ItemStack stackFull = new ItemStack(this); this.setEnergy(stackFull, this.getMaxEnergyStored(stackFull)); list.add(stackFull); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index 5d9e6e36d..e7cf046be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -19,7 +19,7 @@ import net.minecraft.item.ItemStack; public class ItemFoodBase extends ItemFood{ - private String name; + private final String name; public ItemFoodBase(int heal, float saturation, boolean wolfFood, String name){ super(heal, saturation, wolfFood); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index a9e93815f..7ef31d5a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -18,11 +18,13 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemHoeAA extends ItemHoe{ - private String name; - private EnumRarity rarity; - private ItemStack repairItem; + private final String name; + private final EnumRarity rarity; + private final ItemStack repairItem; public ItemHoeAA(Item.ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ super(toolMat); @@ -52,6 +54,7 @@ public class ItemHoeAA extends ItemHoe{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 8a88a1e89..b1e72b4e9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -24,11 +24,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; +import javax.annotation.Nonnull; + public class ItemSeed extends ItemSeeds{ - public Block plant; - public String name; - public String oredictName; + public final Block plant; + public final String name; + public final String oredictName; public ItemSeed(String name, String oredictName, Block plant, Item returnItem, int returnMeta){ super(plant, Blocks.FARMLAND); @@ -63,11 +65,13 @@ public class ItemSeed extends ItemSeeds{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; } + @Nonnull @Override public IBlockState getPlant(IBlockAccess world, BlockPos pos){ return this.plant.getDefaultState(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index f492a2514..8f6232fd4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -18,11 +18,13 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; +import javax.annotation.Nonnull; + public class ItemSwordAA extends ItemSword{ - private String name; - private EnumRarity rarity; - private ItemStack repairItem; + private final String name; + private final EnumRarity rarity; + private final ItemStack repairItem; public ItemSwordAA(ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ super(toolMat); @@ -57,10 +59,11 @@ public class ItemSwordAA extends ItemSword{ } @Override - public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ + public boolean getIsRepairable(ItemStack itemToRepair, @Nonnull ItemStack stack){ return ItemUtil.areItemsEqual(this.repairItem, stack, false); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index a9beaa7cf..efbc0d478 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -19,13 +19,14 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraftforge.oredict.OreDictionary; +import javax.annotation.Nonnull; import java.util.Set; public class ItemToolAA extends ItemTool{ - private String name; - private EnumRarity rarity; - private ItemStack repairItem; + private final String name; + private final EnumRarity rarity; + private final ItemStack repairItem; private String repairOredict; public ItemToolAA(float attack, float speed, ToolMaterial toolMat, String repairItem, String unlocalizedName, EnumRarity rarity, Set effectiveStuff){ @@ -61,13 +62,14 @@ public class ItemToolAA extends ItemTool{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; } @Override - public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ + public boolean getIsRepairable(ItemStack itemToRepair, @Nonnull ItemStack stack){ if(this.repairItem != null){ return ItemUtil.areItemsEqual(this.repairItem, stack, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java index f2fd6ed79..2ee39211e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java @@ -16,9 +16,11 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ItemLens extends ItemBase implements ILensItem{ - private Lens type; + private final Lens type; public ItemLens(String name, Lens type){ super(name); @@ -27,6 +29,7 @@ public class ItemLens extends ItemBase implements ILensItem{ this.setMaxStackSize(1); } + @Nonnull @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.UNCOMMON; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 08d5a4f3a..5ca8d8b46 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -85,7 +85,7 @@ public class LensColor extends Lens{ if(stack != null){ Item item = stack.getItem(); if(item != null){ - for(Map.Entry changer : ActuallyAdditionsAPI.reconstructorLensColorChangers.entrySet()){ + for(Map.Entry changer : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_COLOR_CHANGERS.entrySet()){ if(item == changer.getKey()){ return changer.getValue().modifyItem(stack, hitState, hitBlock, tile); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java index 4e55a5fa7..935d8929c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java @@ -30,7 +30,7 @@ import java.util.ArrayList; public class LensRecipeHandler{ - public static ArrayList mainPageRecipes = new ArrayList(); + public static final ArrayList mainPageRecipes = new ArrayList(); public static LensConversionRecipe recipeColorLens; public static LensConversionRecipe recipeSoulSand; public static LensConversionRecipe recipeGreenWall; @@ -114,7 +114,7 @@ public class LensRecipeHandler{ public static ArrayList getRecipesFor(ItemStack input){ ArrayList possibleRecipes = new ArrayList(); - for(LensConversionRecipe recipe : ActuallyAdditionsAPI.reconstructorLensConversionRecipes){ + for(LensConversionRecipe recipe : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES){ if(ItemUtil.contains(recipe.getInputs(), input, true)){ possibleRecipes.add(recipe); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index 5a2815ee3..e7acc24df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -57,10 +57,10 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ new ReconstructorRecipeHandler() ); - registry.addRecipes(ActuallyAdditionsAPI.bookletPagesWithItemStackData); - registry.addRecipes(ActuallyAdditionsAPI.coffeeMachineIngredients); - registry.addRecipes(ActuallyAdditionsAPI.crusherRecipes); - registry.addRecipes(ActuallyAdditionsAPI.reconstructorLensConversionRecipes); + registry.addRecipes(ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA); + registry.addRecipes(ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS); + registry.addRecipes(ActuallyAdditionsAPI.CRUSHER_RECIPES); + registry.addRecipes(ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES); registry.addRecipeClickArea(GuiCoffeeMachine.class, 53, 42, 22, 16, NEICoffeeMachineRecipe.NAME); registry.addRecipeClickArea(GuiGrinder.class, 80, 40, 24, 22, CrusherRecipeCategory.NAME); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java index afddebba9..3b52ca52b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java @@ -19,14 +19,16 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; +import javax.annotation.Nonnull; + public abstract class RecipeWrapperWithButton{ - protected TexturedButton theButton; + protected final TexturedButton theButton; public RecipeWrapperWithButton(){ this.theButton = new TexturedButton(23782, this.getButtonX(), this.getButtonY(), 146, 154, 20, 20){ @Override - public void drawButton(Minecraft minecraft, int x, int y){ + public void drawButton(@Nonnull Minecraft minecraft, int x, int y){ super.drawButton(minecraft, x, y); if(this.visible && this.hovered){ String text = StringUtil.localize("booklet."+ModUtil.MOD_ID+".clickToSeeRecipe"); @@ -48,7 +50,7 @@ public abstract class RecipeWrapperWithButton{ if(page != null){ GuiBooklet book = new GuiBooklet(Minecraft.getMinecraft().currentScreen, false, true); Minecraft.getMinecraft().displayGuiScreen(book); - BookletUtils.openIndexEntry(book, page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); + BookletUtils.openIndexEntry(book, page.getChapter().getEntry(), ActuallyAdditionsAPI.BOOKLET_ENTRIES.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); BookletUtils.openChapter(book, page.getChapter(), page); return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index ab7ee1467..467e9c4bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -24,7 +24,7 @@ import java.util.Arrays; public class BookletRecipeCategory implements IRecipeCategory{ - private IDrawable background; + private final IDrawable background; public BookletRecipeCategory(IGuiHelper helper){ this.background = helper.createBlankDrawable(160, 100); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index e0065e683..41ec53f08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -29,7 +29,7 @@ import java.util.List; public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRecipeWrapper{ - public BookletPage thePage; + public final BookletPage thePage; public BookletRecipeWrapper(BookletPage page){ this.thePage = page; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java index c99f9eeed..bdfae76f7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java @@ -24,7 +24,7 @@ import javax.annotation.Nonnull; public class CoffeeMachineRecipeCategory implements IRecipeCategory{ - private IDrawable background; + private final IDrawable background; public CoffeeMachineRecipeCategory(IGuiHelper helper){ this.background = helper.createDrawable(AssetUtil.getGuiLocation("guiNEICoffeeMachine"), 0, 0, 126, 88); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index aeec37750..3a08622ec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -33,10 +33,10 @@ import java.util.List; public class CoffeeMachineRecipeWrapper extends RecipeWrapperWithButton implements IRecipeWrapper{ - public CoffeeIngredient theIngredient; - public ItemStack theOutput; - public ItemStack cup = new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()); - public ItemStack coffeeBeans = new ItemStack(InitItems.itemCoffeeBean); + public final CoffeeIngredient theIngredient; + public final ItemStack theOutput; + public final ItemStack cup = new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()); + public final ItemStack coffeeBeans = new ItemStack(InitItems.itemCoffeeBean); public CoffeeMachineRecipeWrapper(CoffeeIngredient ingredient){ this.theIngredient = ingredient; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java index 8806aaf7d..6476d5a39 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java @@ -27,7 +27,7 @@ public class CrusherRecipeCategory implements IRecipeCategory{ public static final String NAME = "actuallyadditions.crushing"; - private IDrawable background; + private final IDrawable background; public CrusherRecipeCategory(IGuiHelper helper){ this.background = helper.createDrawable(AssetUtil.getGuiLocation("guiGrinder"), 60, 13, 56, 79); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java index 66032a2ba..16d92fe1e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java @@ -28,7 +28,7 @@ import java.util.List; public class CrusherRecipeWrapper extends RecipeWrapperWithButton implements IRecipeWrapper{ - public CrusherRecipe theRecipe; + public final CrusherRecipe theRecipe; public CrusherRecipeWrapper(CrusherRecipe recipe){ this.theRecipe = recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java index 38ffdd941..88e48b9c2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java @@ -27,7 +27,7 @@ import javax.annotation.Nonnull; public class ReconstructorRecipeCategory implements IRecipeCategory{ private static final ItemStack RECONSTRUCTOR = new ItemStack(InitBlocks.blockAtomicReconstructor); - private IDrawable background; + private final IDrawable background; public ReconstructorRecipeCategory(IGuiHelper helper){ this.background = helper.createDrawable(AssetUtil.getGuiLocation("guiNEIAtomicReconstructor"), 0, 0, 96, 60); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java index fd7d35066..7e396da08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java @@ -27,7 +27,7 @@ import java.util.List; public class ReconstructorRecipeWrapper extends RecipeWrapperWithButton implements IRecipeWrapper{ - public LensConversionRecipe theRecipe; + public final LensConversionRecipe theRecipe; public ReconstructorRecipeWrapper(LensConversionRecipe recipe){ this.theRecipe = recipe; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index fd9566658..cdcffacde 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -11,14 +11,11 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.entity.item.EntityMinecart; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; -import java.util.Locale; - public class InitArmorMaterials{ public static ArmorMaterial armorMaterialEmerald; @@ -48,6 +45,8 @@ public class InitArmorMaterials{ } private static ArmorMaterial addArmorMaterial(String name, String textureName, int durability, int[] reductionAmounts, int enchantability, SoundEvent soundOnEquip){ - return EnumHelper.addArmorMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), textureName, durability, reductionAmounts, enchantability, soundOnEquip); + //TODO Fuck forge because this broke + //return EnumHelper.addArmorMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), textureName, durability, reductionAmounts, enchantability, soundOnEquip); + return EnumHelper.addEnum(ArmorMaterial.class, name, new Class[]{String.class, int.class, int[].class, int.class, SoundEvent.class, float.class}, textureName, durability, reductionAmounts, enchantability, soundOnEquip, 0F); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java index 1c4f9feb7..74c267311 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java @@ -12,8 +12,6 @@ package de.ellpeck.actuallyadditions.mod.material; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.Item.ToolMaterial; -import net.minecraft.item.ItemArmor; -import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; import java.util.Locale; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java index a6cd7602f..d7acbfb76 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -43,13 +43,11 @@ public class BannerHelper{ * @param craftingStack An ItemStack which is used in the crafting recipe for this pattern. * An example of this would be the creeper skull being used for the creeper * pattern. - * @return EnumBannerPattern: A reference to the new EnumBannerPattern entry that has been - * created. */ - public static EnumBannerPattern addCraftingPattern(String name, ItemStack craftingStack){ - Class[] paramTypes = {String.class, String.class, ItemStack.class}; + public static void addCraftingPattern(String name, ItemStack craftingStack){ + Class[] paramTypes = {String.class, String.class, ItemStack.class}; Object[] paramValues = {ModUtil.MOD_ID+name, ModUtil.MOD_ID+name, craftingStack}; - return EnumHelper.addEnum(EnumBannerPattern.class, (ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), paramTypes, paramValues); + EnumHelper.addEnum(EnumBannerPattern.class, (ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), paramTypes, paramValues); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 796456ae9..a3bfe983c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -18,17 +18,20 @@ import net.minecraft.util.DamageSource; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; +import javax.annotation.Nonnull; + public class DamageSources extends DamageSource{ public static final DamageSource DAMAGE_ATOMIC_RECONSTRUCTOR = new DamageSources("atomicReconstructor", 5).setDamageBypassesArmor(); - private int messageCount; + private final int messageCount; public DamageSources(String name, int messageCount){ super(name); this.messageCount = messageCount; } + @Nonnull @Override public ITextComponent getDeathMessage(EntityLivingBase entity){ String locTag = "death."+ModUtil.MOD_ID+"."+this.damageType+"."+(Util.RANDOM.nextInt(this.messageCount)+1); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index 9322f22d2..a8ad69a67 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -19,8 +19,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; +import javax.annotation.Nonnull; + public class DispenserHandlerFertilize extends BehaviorDefaultDispenseItem{ + @Nonnull @Override public ItemStack dispenseStack(IBlockSource source, ItemStack stack){ EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); @@ -29,8 +32,8 @@ public class DispenserHandlerFertilize extends BehaviorDefaultDispenseItem{ int z = source.getBlockTileEntity().getPos().getZ()+facing.getFrontOffsetZ(); BlockPos pos = new BlockPos(x, y, z); - if(ItemDye.applyBonemeal(stack, source.getWorld(), pos, null)){ - source.getWorld().playAuxSFX(2005, pos, 0); + if(ItemDye.applyBonemeal(stack, source.getWorld(), pos)){ + source.getWorld().playBroadcastSound(2005, pos, 0); } return stack; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 38d25fc5c..c8100301b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -24,7 +24,7 @@ public class LaserRelayConnectionHandler{ /** * All of the Networks */ - public ConcurrentSet networks = new ConcurrentSet(); + public final ConcurrentSet networks = new ConcurrentSet(); public static LaserRelayConnectionHandler getInstance(){ if(instance == null){ @@ -157,8 +157,8 @@ public class LaserRelayConnectionHandler{ public static class ConnectionPair{ - public BlockPos firstRelay; - public BlockPos secondRelay; + public final BlockPos firstRelay; + public final BlockPos secondRelay; public ConnectionPair(BlockPos firstRelay, BlockPos secondRelay){ this.firstRelay = firstRelay; @@ -202,7 +202,7 @@ public class LaserRelayConnectionHandler{ public static class Network{ - public ConcurrentSet connections = new ConcurrentSet(); + public final ConcurrentSet connections = new ConcurrentSet(); @Override public String toString(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index 54bd7b0e0..62e6e313c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -10,16 +10,10 @@ package de.ellpeck.actuallyadditions.mod.misc; -import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; -import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; -import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; -import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; -import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -142,7 +136,7 @@ public class MethodHandler implements IMethodHandler{ ItemStack output = outputs.get(0); if(output.getItem() instanceof ItemBlock){ if(!ConfigValues.lessBlockBreakingEffects){ - tile.getWorldObject().playAuxSFX(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); + tile.getWorldObject().playBroadcastSound(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); } PosUtil.setBlock(pos, tile.getWorldObject(), Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/ParticleColored.java similarity index 78% rename from src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/misc/ParticleColored.java index b6af18e4d..979111fc7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/EntityColoredParticleFX.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/ParticleColored.java @@ -10,15 +10,15 @@ package de.ellpeck.actuallyadditions.mod.misc; -import net.minecraft.client.particle.EntityReddustFX; +import net.minecraft.client.particle.ParticleRedstone; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public class EntityColoredParticleFX extends EntityReddustFX{ +public class ParticleColored extends ParticleRedstone{ - public EntityColoredParticleFX(World world, double x, double y, double z, float size, float r, float g, float b, float ageMulti){ + public ParticleColored(World world, double x, double y, double z, float size, float r, float g, float b, float ageMulti){ super(world, x, y, z, size, r, g, b); //To work around Reddust particles resetting the color to red if it's 0 (which is really stupid to be honest) this.particleRed = ((float)(Math.random()*0.20000000298023224D)+0.8F)*r*((float)Math.random()*0.4F+0.6F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index 8ea3d4c88..9d7dc204a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -18,6 +18,8 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; +import javax.annotation.Nonnull; + public class WorldData extends WorldSavedData{ public static final String DATA_TAG = ModUtil.MOD_ID+"WorldData"; @@ -76,43 +78,46 @@ public class WorldData extends WorldSavedData{ } @Override - public void readFromNBT(NBTTagCompound compound){ - //Laser World Data - NBTTagList networkList = compound.getTagList("Networks", 10); - for(int i = 0; i < networkList.tagCount(); i++){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i)); - LaserRelayConnectionHandler.getInstance().networks.add(network); - } + public void readFromNBT(@Nonnull NBTTagCompound compound){ + //Laser World Data + NBTTagList networkList = compound.getTagList("Networks", 10); + for(int i = 0; i < networkList.tagCount(); i++){ + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i)); + LaserRelayConnectionHandler.getInstance().networks.add(network); + } - //Player Data - NBTTagList playerList = compound.getTagList("PlayerData", 10); - for(int i = 0; i < playerList.tagCount(); i++){ - PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); - PersistentServerData.playerSaveData.add(aSave); - } + //Player Data + NBTTagList playerList = compound.getTagList("PlayerData", 10); + for(int i = 0; i < playerList.tagCount(); i++){ + PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); + PersistentServerData.playerSaveData.add(aSave); + } - //Additional Data - additionalData = compound.getCompoundTag("Additional"); + //Additional Data + additionalData = compound.getCompoundTag("Additional"); } + @Nonnull @Override - public void writeToNBT(NBTTagCompound compound){ - //Laser World Data - NBTTagList networkList = new NBTTagList(); - for(LaserRelayConnectionHandler.Network network : LaserRelayConnectionHandler.getInstance().networks){ - networkList.appendTag(LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(network)); - } - compound.setTag("Networks", networkList); + public NBTTagCompound writeToNBT(@Nonnull NBTTagCompound compound){ + //Laser World Data + NBTTagList networkList = new NBTTagList(); + for(LaserRelayConnectionHandler.Network network : LaserRelayConnectionHandler.getInstance().networks){ + networkList.appendTag(LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(network)); + } + compound.setTag("Networks", networkList); - //Player Data - NBTTagList playerList = new NBTTagList(); - for(int i = 0; i < PersistentServerData.playerSaveData.size(); i++){ - PersistentServerData.PlayerSave theSave = PersistentServerData.playerSaveData.get(i); - playerList.appendTag(theSave.toNBT()); - } - compound.setTag("PlayerData", playerList); + //Player Data + NBTTagList playerList = new NBTTagList(); + for(int i = 0; i < PersistentServerData.playerSaveData.size(); i++){ + PersistentServerData.PlayerSave theSave = PersistentServerData.playerSaveData.get(i); + playerList.appendTag(theSave.toNBT()); + } + compound.setTag("PlayerData", playerList); - //Additional Data - compound.setTag("Additional", additionalData); + //Additional Data + compound.setTag("Additional", additionalData); + + return compound; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index d57a1de6d..4bb38ad46 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -26,7 +26,7 @@ import java.util.List; public class SmileyCloudEasterEggs{ - public static List cloudStuff = new ArrayList(); + public static final List cloudStuff = new ArrayList(); static{ //Glenthor diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index 119b4eab3..e6613e456 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -26,7 +26,7 @@ import java.util.Properties; public class SpecialRenderInit{ - public static HashMap specialList = new HashMap(); + public static final HashMap specialList = new HashMap(); public static void init(){ new ThreadSpecialFetcher(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java index e004fb9b3..dbdb8349d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java @@ -32,7 +32,7 @@ public class NEIBookletRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEIBookletRecipe.class){ - for(BookletPage page : ActuallyAdditionsAPI.bookletPagesWithItemStackData){ + for(BookletPage page : ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA){ ItemStack[] stacks = page.getItemStacksForPage(); //So that you don't see things like Mashed Food more than once diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java index 2cf4e03b8..8c18cf273 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java @@ -33,7 +33,7 @@ public class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEICoffeeMachineRecipe.class){ - List ingredients = ActuallyAdditionsAPI.coffeeMachineIngredients; + List ingredients = ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS; for(CoffeeIngredient ingredient : ingredients){ arecipes.add(new CachedCoffee(ingredient)); } @@ -45,7 +45,7 @@ public class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(ItemStack result){ - List ingredients = ActuallyAdditionsAPI.coffeeMachineIngredients; + List ingredients = ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS; for(CoffeeIngredient ingredient : ingredients){ if(result.getItem() instanceof ItemCoffee){ arecipes.add(new CachedCoffee(ingredient)); @@ -56,7 +56,7 @@ public class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements I @Override public void loadUsageRecipes(ItemStack ingredient){ - List ingredients = ActuallyAdditionsAPI.coffeeMachineIngredients; + List ingredients = ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS; for(CoffeeIngredient ingr : ingredients){ if(NEIServerUtils.areStacksSameTypeCrafting(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()), ingredient) || NEIServerUtils.areStacksSameTypeCrafting(new ItemStack(InitItems.itemCoffeeBean), ingredient) || NEIServerUtils.areStacksSameTypeCrafting(ingr.ingredient.copy(), ingredient)){ CachedCoffee theRecipe = new CachedCoffee(ingr); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java index 6b0af03e0..a1c6cfb78 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java @@ -29,7 +29,7 @@ public class NEICrusherRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(this.getBaseName()) && (getClass() == NEICrusherRecipe.class || getClass() == Double.class)){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.crusherRecipes){ + for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ arecipes.add(new CachedCrush(recipe.getRecipeInputs(), recipe.getRecipeOutputOnes(), recipe.getRecipeOutputTwos(), recipe.outputTwoChance, this)); } } @@ -40,7 +40,7 @@ public class NEICrusherRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public void loadCraftingRecipes(ItemStack result){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.crusherRecipes){ + for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ if(ItemUtil.contains(recipe.getRecipeOutputOnes(), result, true) || ItemUtil.contains(recipe.getRecipeOutputTwos(), result, true)){ arecipes.add(new CachedCrush(recipe.getRecipeInputs(), recipe.getRecipeOutputOnes(), recipe.getRecipeOutputTwos(), recipe.outputTwoChance, this)); } @@ -49,7 +49,7 @@ public class NEICrusherRecipe/* extends TemplateRecipeHandler implements INEIRec @Override public void loadUsageRecipes(ItemStack ingredient){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.crusherRecipes){ + for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ if(ItemUtil.contains(recipe.getRecipeInputs(), ingredient, true)){ CachedCrush theRecipe = new CachedCrush(recipe.getRecipeInputs(), recipe.getRecipeOutputOnes(), recipe.getRecipeOutputTwos(), recipe.outputTwoChance, this); theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.ingredient), ingredient); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java index 348cdbc26..2ac2f4288 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java @@ -37,7 +37,7 @@ public class NEIHairyBallRecipe/* extends TemplateRecipeHandler implements INEIR @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEIHairyBallRecipe.class){ - List recipes = ActuallyAdditionsAPI.ballOfFurReturnItems; + List recipes = ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS; for(BallOfFurReturn recipe : recipes){ arecipes.add(new CachedBallRecipe(new ItemStack(InitItems.itemHairyBall), recipe.returnItem, recipe.itemWeight)); } @@ -49,7 +49,7 @@ public class NEIHairyBallRecipe/* extends TemplateRecipeHandler implements INEIR @Override public void loadCraftingRecipes(ItemStack result){ - List recipes = ActuallyAdditionsAPI.ballOfFurReturnItems; + List recipes = ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS; for(BallOfFurReturn recipe : recipes){ if(NEIServerUtils.areStacksSameType(recipe.returnItem, result)){ arecipes.add(new CachedBallRecipe(new ItemStack(InitItems.itemHairyBall), recipe.returnItem, recipe.itemWeight)); @@ -59,7 +59,7 @@ public class NEIHairyBallRecipe/* extends TemplateRecipeHandler implements INEIR @Override public void loadUsageRecipes(ItemStack ingredient){ - List recipes = ActuallyAdditionsAPI.ballOfFurReturnItems; + List recipes = ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS; for(BallOfFurReturn recipe : recipes){ ItemStack stack = new ItemStack(InitItems.itemHairyBall); if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java index 655e71a82..daf7fd1b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java @@ -37,7 +37,7 @@ public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEIReconstructorRecipe.class){ - List recipes = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; + List recipes = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; //Default Recipes for(LensNoneRecipe recipe : recipes){ arecipes.add(new CachedReconstructorRecipe(recipe, false)); @@ -66,7 +66,7 @@ public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(ItemStack result){ - List recipes = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; + List recipes = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; //Default Recipes for(LensNoneRecipe recipe : recipes){ if(ItemUtil.contains(recipe.getOutputs(), result, true)){ @@ -84,7 +84,7 @@ public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements I @Override public void loadUsageRecipes(ItemStack ingredient){ - List recipes = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; + List recipes = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; //Default Recipes for(LensNoneRecipe recipe : recipes){ if(ItemUtil.contains(recipe.getInputs(), ingredient, true)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java index 888ce197e..486dfa71c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java @@ -59,7 +59,7 @@ public class NEIScreenEvents{ if(page != null){ GuiBooklet book = new GuiBooklet(Minecraft.getMinecraft().currentScreen, false, true); Minecraft.getMinecraft().displayGuiScreen(book); - BookletUtils.openIndexEntry(book, page.getChapter().getEntry(), ActuallyAdditionsAPI.bookletEntries.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); + BookletUtils.openIndexEntry(book, page.getChapter().getEntry(), ActuallyAdditionsAPI.BOOKLET_ENTRIES.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); BookletUtils.openChapter(book, page.getChapter(), page); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java index e8603cfaa..f803df38e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java @@ -37,7 +37,7 @@ public class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEITreasureChestRecipe.class){ - List recipes = ActuallyAdditionsAPI.treasureChestLoot; + List recipes = ActuallyAdditionsAPI.TREASURE_CHEST_LOOT; for(TreasureChestLoot recipe : recipes){ arecipes.add(new CachedTreasure(new ItemStack(InitBlocks.blockTreasureChest), recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount)); } @@ -49,7 +49,7 @@ public class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(ItemStack result){ - List recipes = ActuallyAdditionsAPI.treasureChestLoot; + List recipes = ActuallyAdditionsAPI.TREASURE_CHEST_LOOT; for(TreasureChestLoot recipe : recipes){ if(NEIServerUtils.areStacksSameType(recipe.returnItem, result)){ arecipes.add(new CachedTreasure(new ItemStack(InitBlocks.blockTreasureChest), recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount)); @@ -59,7 +59,7 @@ public class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements I @Override public void loadUsageRecipes(ItemStack ingredient){ - List recipes = ActuallyAdditionsAPI.treasureChestLoot; + List recipes = ActuallyAdditionsAPI.TREASURE_CHEST_LOOT; for(TreasureChestLoot recipe : recipes){ ItemStack stack = new ItemStack(InitBlocks.blockTreasureChest); if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index 59331ec55..411cfafff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.network; -import de.ellpeck.actuallyadditions.mod.misc.EntityColoredParticleFX; +import de.ellpeck.actuallyadditions.mod.misc.ParticleColored; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.util.math.Vec3d; @@ -62,7 +62,7 @@ public class PacketParticle implements IMessage{ for(int times = 0; times < Math.max(particleAmount/2, 1); times++){ for(double i = 0; i <= 1; i += 1/(distance*particleAmount)){ - EntityColoredParticleFX fx = new EntityColoredParticleFX(world, (difX*i)+endX+0.5, (difY*i)+endY+0.5, (difZ*i)+endZ+0.5, particleSize, color[0], color[1], color[2], ageMultiplier); + ParticleColored fx = new ParticleColored(world, (difX*i)+endX+0.5, (difY*i)+endY+0.5, (difZ*i)+endZ+0.5, particleSize, color[0], color[1], color[2], ageMultiplier); Minecraft.getMinecraft().effectRenderer.addEffect(fx); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 1b7807a1e..c344aa0d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -31,14 +31,12 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fml.client.registry.ClientRegistry; @@ -46,6 +44,7 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import javax.annotation.Nonnull; import java.io.File; import java.util.*; @@ -57,14 +56,14 @@ public class ClientProxy implements IProxy{ public static int bookletWordCount; public static int bookletCharCount; - private static List colorProdividingItemsForRegistering = new ArrayList(); - private static Map modelLocationsForRegistering = new HashMap(); + private static final List colorProdividingItemsForRegistering = new ArrayList(); + private static final Map modelLocationsForRegistering = new HashMap(); private static void countBookletWords(){ bookletWordCount = 0; bookletCharCount = 0; - for(IBookletEntry entry : ActuallyAdditionsAPI.bookletEntries){ + for(IBookletEntry entry : ActuallyAdditionsAPI.BOOKLET_ENTRIES){ for(IBookletChapter chapter : entry.getChapters()){ for(BookletPage page : chapter.getPages()){ if(page.getText() != null){ @@ -107,7 +106,7 @@ public class ClientProxy implements IProxy{ if(manager instanceof IReloadableResourceManager){ ((IReloadableResourceManager)manager).registerReloadListener(new IResourceManagerReloadListener(){ @Override - public void onResourceManagerReload(IResourceManager resourceManager){ + public void onResourceManagerReload(@Nonnull IResourceManager resourceManager){ countBookletWords(); } }); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index cd5a4f494..a9d687aca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.proxy; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index 7ee18a66e..1bb5dd3ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index cc946e6d1..28c768aa2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -24,11 +24,11 @@ import java.util.List; public class CrusherRecipeRegistry{ - public static ArrayList searchCases = new ArrayList(); + public static final ArrayList searchCases = new ArrayList(); public static void registerFinally(){ ArrayList oresNoResult = new ArrayList(); - int recipeStartedAt = ActuallyAdditionsAPI.crusherRecipes.size(); + int recipeStartedAt = ActuallyAdditionsAPI.CRUSHER_RECIPES.size(); for(String ore : OreDictionary.getOreNames()){ if(!hasException(ore)){ @@ -54,8 +54,8 @@ public class CrusherRecipeRegistry{ } ArrayList addedRecipes = new ArrayList(); - for(int i = recipeStartedAt; i < ActuallyAdditionsAPI.crusherRecipes.size(); i++){ - CrusherRecipe recipe = ActuallyAdditionsAPI.crusherRecipes.get(i); + for(int i = recipeStartedAt; i < ActuallyAdditionsAPI.CRUSHER_RECIPES.size(); i++){ + CrusherRecipe recipe = ActuallyAdditionsAPI.CRUSHER_RECIPES.get(i); addedRecipes.add(recipe.input+" -> "+recipe.outputOneAmount+"x "+recipe.outputOne); } ModUtil.LOGGER.info("Added "+addedRecipes.size()+" Crusher Recipes automatically: "+addedRecipes.toString()); @@ -72,7 +72,7 @@ public class CrusherRecipeRegistry{ } public static boolean hasOreRecipe(String input){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.crusherRecipes){ + for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ if(recipe.input != null && recipe.input.equals(input)){ return true; } @@ -86,7 +86,7 @@ public class CrusherRecipeRegistry{ } public static CrusherRecipe getRecipeFromInput(ItemStack input){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.crusherRecipes){ + for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ if(ItemUtil.contains(recipe.getRecipeInputs(), input, true)){ return recipe; } @@ -106,9 +106,9 @@ public class CrusherRecipeRegistry{ public static class SearchCase{ - String theCase; - int resultAmount; - String resultPreString; + final String theCase; + final int resultAmount; + final String resultPreString; public SearchCase(String theCase, int resultAmount){ this(theCase, resultAmount, "dust"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 5f553df15..18382eb31 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -16,9 +16,7 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; -import de.ellpeck.actuallyadditions.api.lens.LensConversion; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; -import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; @@ -34,10 +32,12 @@ import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityAtomicReconstructor extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle, IEnergyDisplay, IAtomicReconstructor{ public static final int ENERGY_USE = 1000; - public EnergyStorage storage = new EnergyStorage(300000); + public final EnergyStorage storage = new EnergyStorage(300000); public int counter; private int currentTime; private boolean activateOnceWithSignal; @@ -158,7 +158,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return stack != null && stack.getItem() instanceof ILensItem; } @@ -189,12 +189,12 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index d6dc24fec..eaf8f3d22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -18,7 +18,6 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ITickable; @@ -27,10 +26,12 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; +import javax.annotation.Nonnull; + public abstract class TileEntityBase extends TileEntity implements ITickable{ public boolean isRedstonePowered; - public String name; + public final String name; protected int ticksElapsed; public TileEntityBase(String name){ @@ -95,15 +96,17 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.readSyncableNBT(compound, false); } + @Nonnull @Override - public final void writeToNBT(NBTTagCompound compound){ - super.writeToNBT(compound); - compound.setBoolean("Redstone", this.isRedstonePowered); - this.writeSyncableNBT(compound, false); + public final NBTTagCompound writeToNBT(NBTTagCompound compound){ + NBTTagCompound newCompound = super.writeToNBT(compound); + newCompound.setBoolean("Redstone", this.isRedstonePowered); + this.writeSyncableNBT(newCompound, false); + return newCompound; } @Override - public final Packet getDescriptionPacket(){ + public final SPacketUpdateTileEntity getUpdatePacket(){ NBTTagCompound compound = this.getSyncCompound(); if(compound != null){ return new SPacketUpdateTileEntity(this.pos, 3, compound); @@ -121,7 +124,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } @Override - public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState){ + public boolean shouldRefresh(World world, BlockPos pos, @Nonnull IBlockState oldState, @Nonnull IBlockState newState){ return !(oldState.getBlock().isAssociatedBlock(newState.getBlock())); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index e8bedd46e..8e61cb478 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -24,6 +24,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.event.ForgeEventFactory; +import javax.annotation.Nonnull; import java.util.List; public class TileEntityBreaker extends TileEntityInventoryBase implements IRedstoneToggle{ @@ -73,7 +74,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return this.isPlacer; } @@ -90,7 +91,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(stateToBreak)); + this.worldObj.playBroadcastSound(2001, coordsBlock, Block.getStateId(stateToBreak)); } WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); WorldUtil.addToInventory(this, drops, true, true); @@ -108,12 +109,12 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 04c3ec2db..39985ff11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -24,13 +24,15 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IFluidHandler, IEnergySaver, IFluidSaver{ public static final int PRODUCE = 80; public static final int ENERGY_USE = 35; private static final int TIME = 30; - public EnergyStorage storage = new EnergyStorage(40000); - public FluidTank tank = new FluidTank(2*Util.BUCKET); + public final EnergyStorage storage = new EnergyStorage(40000); + public final FluidTank tank = new FluidTank(2*Util.BUCKET); public int currentProcessTime; private int lastEnergyStored; private int lastTankAmount; @@ -116,7 +118,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()); } @@ -125,12 +127,12 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index f3f180609..4eea61833 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -21,10 +21,12 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityCoalGenerator extends TileEntityInventoryBase implements IEnergyProvider, IEnergySaver{ public static final int PRODUCE = 30; - public EnergyStorage storage = new EnergyStorage(60000); + public final EnergyStorage storage = new EnergyStorage(60000); public int maxBurnTime; public int currentBurnTime; private int lastEnergy; @@ -110,17 +112,17 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return TileEntityFurnace.getItemBurnTime(stack) > 0; } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index da11a8764..5f2b573d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -29,6 +29,8 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidSaver, IFluidHandler, IEnergySaver{ public static final int SLOT_COFFEE_BEANS = 0; @@ -39,8 +41,8 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements public static final int WATER_USE = 500; public static final int COFFEE_CACHE_MAX_AMOUNT = 300; private static final int TIME_USED = 500; - public EnergyStorage storage = new EnergyStorage(300000); - public FluidTank tank = new FluidTank(4*Util.BUCKET); + public final EnergyStorage storage = new EnergyStorage(300000); + public final FluidTank tank = new FluidTank(4*Util.BUCKET); public int coffeeCacheAmount; public int brewTime; private int lastEnergy; @@ -110,7 +112,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return (i >= 3 && ItemCoffee.getIngredientFromStack(stack) != null) || (i == SLOT_COFFEE_BEANS && stack.getItem() == InitItems.itemCoffeeBean) || (i == SLOT_INPUT && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CUP.ordinal()); } @@ -170,12 +172,12 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot == SLOT_OUTPUT || (slot >= 3 && slot < this.slots.length-2 && ItemCoffee.getIngredientFromStack(stack) == null); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index daccdcb66..f4bba2821 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -18,6 +18,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import javax.annotation.Nonnull; + public class TileEntityCompost extends TileEntityInventoryBase{ public static final int AMOUNT = 10; @@ -72,7 +74,7 @@ public class TileEntityCompost extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return stack.getItem() instanceof ItemMisc && stack.getItemDamage() == TheMiscItems.MASHED_FOOD.ordinal(); } @@ -83,12 +85,12 @@ public class TileEntityCompost extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return stack.getItem() instanceof ItemFertilizer; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 85ed6fa8d..68c845e97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -26,13 +26,14 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle{ public static final int RANGE = 8; public static final int ENERGY_USE = 5; - public EnergyStorage storage = new EnergyStorage(10000); + public final EnergyStorage storage = new EnergyStorage(10000); private int lastEnergy; private int currentTime; private boolean activateOnceWithSignal; @@ -92,7 +93,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); + this.worldObj.playBroadcastSound(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); } WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); WorldUtil.addToInventory(this, drops, true, true); @@ -106,7 +107,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return false; } @@ -116,12 +117,12 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 7d7758543..7612f7722 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -16,6 +16,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import javax.annotation.Nonnull; + public class TileEntityDropper extends TileEntityInventoryBase implements IRedstoneToggle{ private int currentTime; @@ -57,7 +59,7 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return true; } @@ -86,12 +88,12 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index 7aad72f3a..835419b2e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -19,9 +19,11 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityEnergizer extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ - public EnergyStorage storage = new EnergyStorage(500000); + public final EnergyStorage storage = new EnergyStorage(500000); private int lastEnergy; public TileEntityEnergizer(){ @@ -66,17 +68,17 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return i == 0 && stack.getItem() instanceof IEnergyContainerItem; } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot == 1; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index ce5ca8e4e..605f8edb8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -20,9 +20,11 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityEnervator extends TileEntityInventoryBase implements IEnergyProvider, IEnergySaver{ - public EnergyStorage storage = new EnergyStorage(500000); + public final EnergyStorage storage = new EnergyStorage(500000); private int lastEnergy; public TileEntityEnervator(){ @@ -71,7 +73,7 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return i == 0 && stack.getItem() instanceof IEnergyContainerItem; } @@ -101,12 +103,12 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot == 1; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index 5b14bebf4..3babe3ee3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -20,6 +20,7 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class TileEntityFeeder extends TileEntityInventoryBase{ @@ -110,7 +111,7 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return true; } @@ -125,12 +126,12 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return false; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index 5eb3c205e..ee0908707 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -22,8 +22,8 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityFermentingBarrel extends TileEntityBase implements IFluidHandler, IFluidSaver{ private static final int PROCESS_TIME = 100; - public FluidTank canolaTank = new FluidTank(2*Util.BUCKET); - public FluidTank oilTank = new FluidTank(2*Util.BUCKET); + public final FluidTank canolaTank = new FluidTank(2*Util.BUCKET); + public final FluidTank oilTank = new FluidTank(2*Util.BUCKET); public int currentProcessTime; private int lastCanola; private int lastOil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index e4d49acc5..51504807c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -28,7 +28,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityFireworkBox extends TileEntityBase implements IEnergyReceiver, IRedstoneToggle, IEnergyDisplay, IEnergySaver{ public static final int USE_PER_SHOT = 300; - public EnergyStorage storage = new EnergyStorage(20000); + public final EnergyStorage storage = new EnergyStorage(20000); private int timeUntilNextFirework; private boolean activateOnceWithSignal; private int oldEnergy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 79d601778..2b14f652d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -26,7 +26,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityFluidCollector extends TileEntityBase implements IFluidHandler, IFluidSaver, IRedstoneToggle{ - public FluidTank tank = new FluidTank(8*Util.BUCKET); + public final FluidTank tank = new FluidTank(8*Util.BUCKET); public boolean isPlacer; private int lastTankAmount; private int currentTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index f1d8ac5ad..d16b15409 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -20,6 +20,8 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ public static final int SLOT_INPUT_1 = 0; @@ -28,7 +30,7 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements public static final int SLOT_OUTPUT_2 = 3; public static final int ENERGY_USE = 25; private static final int SMELT_TIME = 80; - public EnergyStorage storage = new EnergyStorage(30000); + public final EnergyStorage storage = new EnergyStorage(30000); public int firstSmeltTime; public int secondSmeltTime; private int lastEnergy; @@ -115,7 +117,7 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && FurnaceRecipes.instance().getSmeltingResult(stack) != null; } @@ -164,12 +166,12 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot == SLOT_OUTPUT_1 || slot == SLOT_OUTPUT_2; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 33c99ea2d..d594bcd7c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -23,7 +23,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyProvider, IEnergySaver, IEnergyDisplay{ public static final int PRODUCE = 8; - public EnergyStorage storage = new EnergyStorage(30000); + public final EnergyStorage storage = new EnergyStorage(30000); private int oldEnergy; public TileEntityFurnaceSolar(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index dc259ff9f..df76e72a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -14,6 +14,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; +import javax.annotation.Nonnull; + public class TileEntityGiantChest extends TileEntityInventoryBase{ public TileEntityGiantChest(){ @@ -21,17 +23,17 @@ public class TileEntityGiantChest extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return true; } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index 3f555a6f9..4a9b1ceb0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -54,7 +54,7 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ PosUtil.getBlock(blockToFert, this.worldObj).updateTick(this.worldObj, blockToFert, this.worldObj.getBlockState(blockToFert), Util.RANDOM); if(PosUtil.getMetadata(blockToFert, this.worldObj) != metaBefore){ - this.worldObj.playAuxSFX(2005, blockToFert, 0); + this.worldObj.playBroadcastSound(2005, blockToFert, 0); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 2b540f197..1cc9564cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -25,6 +25,7 @@ import net.minecraft.util.SoundCategory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.List; public class TileEntityGrinder extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ @@ -36,7 +37,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg public static final int SLOT_OUTPUT_2_1 = 4; public static final int SLOT_OUTPUT_2_2 = 5; public static final int ENERGY_USE = 40; - public EnergyStorage storage = new EnergyStorage(60000); + public final EnergyStorage storage = new EnergyStorage(60000); public int firstCrushTime; public int secondCrushTime; public boolean isDouble; @@ -166,7 +167,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && CrusherRecipeRegistry.getRecipeFromInput(stack) != null; } @@ -255,12 +256,12 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot == SLOT_OUTPUT_1_1 || slot == SLOT_OUTPUT_1_2 || slot == SLOT_OUTPUT_2_1 || slot == SLOT_OUTPUT_2_2; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 20e594eea..d707a0488 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -29,7 +29,7 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr public static final int ENERGY_PRODUCE = 40; public static final int BLOCKS_NEEDED = 4; - public EnergyStorage storage = new EnergyStorage(30000); + public final EnergyStorage storage = new EnergyStorage(30000); private int oldEnergy; public TileEntityHeatCollector(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index fcd91c5b8..ea4371936 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -22,6 +22,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import javax.annotation.Nonnull; + public class TileEntityInputter extends TileEntityInventoryBase implements IButtonReactor, INumberReactor{ public static final int PUT_FILTER_START = 13; @@ -425,17 +427,17 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return i == 0; } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot == 0; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 880ea1a16..a0dd6b7e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -23,10 +23,12 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.wrapper.SidedInvWrapper; +import javax.annotation.Nonnull; + public abstract class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ public ItemStack slots[]; - private SidedInvWrapper[] invWrappers = new SidedInvWrapper[6]; + private final SidedInvWrapper[] invWrappers = new SidedInvWrapper[6]; public TileEntityInventoryBase(int slots, String name){ super(name); @@ -92,8 +94,9 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } + @Nonnull @Override - public int[] getSlotsForFace(EnumFacing side){ + public int[] getSlotsForFace(@Nonnull EnumFacing side){ int invSize = this.getSizeInventory(); if(invSize > 0){ int[] theInt = new int[invSize]; @@ -113,22 +116,22 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } @Override - public boolean isUseableByPlayer(EntityPlayer player){ + public boolean isUseableByPlayer(@Nonnull EntityPlayer player){ return this.canPlayerUse(player); } @Override - public void openInventory(EntityPlayer player){ + public void openInventory(@Nonnull EntityPlayer player){ } @Override - public void closeInventory(EntityPlayer player){ + public void closeInventory(@Nonnull EntityPlayer player){ } @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ + public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ return false; } @@ -200,6 +203,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return stack; } + @Nonnull @Override public String getName(){ return this.name; @@ -210,18 +214,20 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return false; } + @Nonnull @Override public ITextComponent getDisplayName(){ return new TextComponentString(StringUtil.localize(this.getName())); } @Override - public boolean hasCapability(Capability capability, EnumFacing facing){ + public boolean hasCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ return this.getCapability(capability, facing) != null; } + @Nonnull @Override - public T getCapability(Capability capability, EnumFacing facing){ + public T getCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ if(this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ return (T)this.invWrappers[facing.ordinal()]; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index f8192a96c..a55ce3bb2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -20,12 +20,14 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityItemRepairer extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ public static final int SLOT_INPUT = 0; public static final int SLOT_OUTPUT = 1; public static final int ENERGY_USE = 1500; - public EnergyStorage storage = new EnergyStorage(300000); + public final EnergyStorage storage = new EnergyStorage(300000); public int nextRepairTick; private int lastEnergy; @@ -102,7 +104,7 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return i == SLOT_INPUT; } @@ -120,12 +122,12 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot == SLOT_OUTPUT; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 937b8bc92..b4b17aae9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -84,12 +84,12 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction){ + public boolean canInsertItem(int index, @Nonnull ItemStack stack, @Nonnull EnumFacing direction){ return this.isItemValidForSlot(index, stack); } @Override - public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ + public boolean canExtractItem(int index, @Nonnull ItemStack stack, @Nonnull EnumFacing direction){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ if(this.isWhitelisted(handler, stack)){ @@ -114,7 +114,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ + public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ if(this.isWhitelisted(handler, stack)){ @@ -197,9 +197,9 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private static class SpecificItemHandlerInfo{ - public IItemHandler handler; - public int switchedIndex; - public TileEntityLaserRelayItem relayInQuestion; + public final IItemHandler handler; + public final int switchedIndex; + public final TileEntityLaserRelayItem relayInQuestion; public SpecificItemHandlerInfo(IItemHandler handler, int switchedIndex, TileEntityLaserRelayItem relayInQuestion){ this.handler = handler; @@ -210,8 +210,8 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ public static class GenericItemHandlerInfo implements Comparable{ - public List handlers = new ArrayList(); - public TileEntityLaserRelayItem relayInQuestion; + public final List handlers = new ArrayList(); + public final TileEntityLaserRelayItem relayInQuestion; public GenericItemHandlerInfo(TileEntityLaserRelayItem relayInQuestion){ this.relayInQuestion = relayInQuestion; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 152f56691..b5591f675 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -10,30 +10,16 @@ package de.ellpeck.actuallyadditions.mod.tile; -import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; -import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.*; import io.netty.util.internal.ConcurrentSet; -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.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.items.IItemHandler; - -import java.util.ArrayList; -import java.util.List; public abstract class TileEntityLaserRelay extends TileEntityBase{ @@ -41,7 +27,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ private static final float[] COLOR = new float[]{1F, 0F, 0F}; private static final float[] COLOR_ITEM = new float[]{139F/255F, 94F/255F, 1F}; - public boolean isItem; + public final boolean isItem; public TileEntityLaserRelay(String name, boolean isItem){ super(name); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 040999203..595fa942e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -21,11 +21,12 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraftforge.items.IItemHandler; +import javax.annotation.Nonnull; import java.util.List; public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ - public IInventory filterInventory; + public final IInventory filterInventory; public boolean isLeftWhitelist; public boolean isRightWhitelist; private ItemStack[] slots = new ItemStack[24]; @@ -44,6 +45,7 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem return this; } + @Nonnull @Override public String getName(){ return this.tile.name; @@ -60,17 +62,17 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem } @Override - public boolean isUseableByPlayer(EntityPlayer player){ + public boolean isUseableByPlayer(@Nonnull EntityPlayer player){ return this.tile.canPlayerUse(player); } @Override - public void openInventory(EntityPlayer player){ + public void openInventory(@Nonnull EntityPlayer player){ } @Override - public void closeInventory(EntityPlayer player){ + public void closeInventory(@Nonnull EntityPlayer player){ } @@ -148,13 +150,14 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem return false; } + @Nonnull @Override public ITextComponent getDisplayName(){ return new TextComponentString(StringUtil.localize(this.getName())); } @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ + public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ return false; } }.setTile(this); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 338299bbe..95ef03e82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -29,7 +29,7 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I public static final int HAS_LAVA = 1; public static final int HAS_AIR = 2; public static final int ENERGY_USE = 150000; - public EnergyStorage storage = new EnergyStorage(3000000); + public final EnergyStorage storage = new EnergyStorage(3000000); private int currentWorkTime; private int oldEnergy; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 9c80b6e12..dca150d10 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -33,7 +33,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr public static final int RANGE = 7; public static final int ENERGY_PRODUCED = 300; - public EnergyStorage storage = new EnergyStorage(35000); + public final EnergyStorage storage = new EnergyStorage(35000); private int nextUseCounter; private int oldEnergy; @@ -83,7 +83,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr BlockPos theCoord = breakPositions.get(0); if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, theCoord, Block.getStateId(this.worldObj.getBlockState(theCoord))); + this.worldObj.playBroadcastSound(2001, theCoord, Block.getStateId(this.worldObj.getBlockState(theCoord))); } this.worldObj.setBlockToAir(theCoord); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index c175507c4..5ae1537b7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -21,6 +21,7 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -33,13 +34,14 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; +import javax.annotation.Nonnull; import java.util.List; public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyReceiver, IButtonReactor, IEnergySaver, IEnergyDisplay{ public static final int ENERGY_USE_PER_BLOCK = 500; public static final int DEFAULT_RANGE = 2; - public EnergyStorage storage = new EnergyStorage(1000000); + public final EnergyStorage storage = new EnergyStorage(1000000); public int layerAt = -1; public boolean onlyMineOres = true; private int oldLayerAt; @@ -96,17 +98,18 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR if(this.storage.getEnergyStored() >= actualUse){ BlockPos pos = new BlockPos(this.pos.getX()+anX, this.layerAt, this.pos.getZ()+aZ); - Block block = PosUtil.getBlock(pos, this.worldObj); + IBlockState state = this.worldObj.getBlockState(pos); + Block block = state.getBlock(); int meta = PosUtil.getMetadata(pos, this.worldObj); - if(block != null && !block.isAir(this.worldObj.getBlockState(pos), this.worldObj, pos)){ - if(block.getHarvestLevel(this.worldObj.getBlockState(pos)) <= 3F && block.getBlockHardness(this.worldObj.getBlockState(pos), this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ + if(!block.isAir(this.worldObj.getBlockState(pos), this.worldObj, pos)){ + if(block.getHarvestLevel(this.worldObj.getBlockState(pos)) <= 3F && state.getBlockHardness(this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ List drops = block.getDrops(this.worldObj, pos, this.worldObj.getBlockState(pos), 0); float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, pos, this.worldObj.getBlockState(pos), 0, 1, false, null); if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); + this.worldObj.playBroadcastSound(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); } this.worldObj.setBlockToAir(pos); @@ -145,7 +148,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } String reg = block.getRegistryName().toString(); - if(reg != null && !reg.isEmpty()){ + if(!reg.isEmpty()){ for(String string : ConfigValues.minerExtraWhitelist){ if(reg.equals(string)){ return true; @@ -167,7 +170,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR private boolean isBlacklisted(Block block){ String reg = block.getRegistryName().toString(); - if(reg != null && !reg.isEmpty()){ + if(!reg.isEmpty()){ for(String string : ConfigValues.minerBlacklist){ if(reg.equals(string)){ return true; @@ -178,7 +181,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } @Override - public boolean isItemValidForSlot(int slot, ItemStack stack){ + public boolean isItemValidForSlot(int slot, @Nonnull ItemStack stack){ return false; } @@ -203,12 +206,12 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index df2dbbbf2..dd286435b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -26,8 +26,8 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro public static final int ENERGY_PRODUCED = 76; private static final int BURN_TIME = 100; - public EnergyStorage storage = new EnergyStorage(50000); - public FluidTank tank = new FluidTank(2*Util.BUCKET); + public final EnergyStorage storage = new EnergyStorage(50000); + public final FluidTank tank = new FluidTank(2*Util.BUCKET); public int currentBurnTime; private int lastEnergy; private int lastTank; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 05ba3042a..39b1e38b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -18,6 +18,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; +import javax.annotation.Nonnull; + public class TileEntityPhantomItemface extends TileEntityPhantomface{ public TileEntityPhantomItemface(){ @@ -25,8 +27,9 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ this.type = BlockPhantom.Type.FACE; } + @Nonnull @Override - public int[] getSlotsForFace(EnumFacing side){ + public int[] getSlotsForFace(@Nonnull EnumFacing side){ if(this.isBoundThingInRange()){ if(this.getSided() != null){ return this.getSided().getSlotsForFace(side); @@ -100,7 +103,7 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return this.isBoundThingInRange() && this.getInventory().isItemValidForSlot(i, stack); } @@ -110,17 +113,18 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isBoundThingInRange() && (this.getSided() == null || this.getSided().canInsertItem(slot, stack, side)); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isBoundThingInRange() && (this.getSided() == null || this.getSided().canExtractItem(slot, stack, side)); } + @Nonnull @Override - public T getCapability(Capability capability, EnumFacing facing){ + public T getCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).getCapability(capability, facing) : super.getCapability(capability, facing); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 8462f8c95..fde4b585c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -27,6 +27,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; import java.util.ArrayList; public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements IPhantomTile, IRedstoneToggle{ @@ -130,7 +131,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playAuxSFX(2001, this.boundPosition, Block.getStateId(this.worldObj.getBlockState(this.boundPosition))); + this.worldObj.playBroadcastSound(2001, this.boundPosition, Block.getStateId(this.worldObj.getBlockState(this.boundPosition))); } this.worldObj.setBlockToAir(this.boundPosition); WorldUtil.addToInventory(this, drops, true, true); @@ -192,17 +193,17 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return !this.isBreaker; } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isBreaker; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java index 53004ae6e..1bc3f50cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -18,11 +18,11 @@ import java.util.Arrays; public class TileEntityPhantomRedstoneface extends TileEntityPhantomface{ - public int[] providesStrong = new int[EnumFacing.values().length]; - public int[] providesWeak = new int[EnumFacing.values().length]; + public final int[] providesStrong = new int[EnumFacing.values().length]; + public final int[] providesWeak = new int[EnumFacing.values().length]; - private int[] lastProvidesStrong = new int[this.providesStrong.length]; - private int[] lastProvidesWeak = new int[this.providesWeak.length]; + private final int[] lastProvidesStrong = new int[this.providesStrong.length]; + private final int[] lastProvidesWeak = new int[this.providesWeak.length]; public TileEntityPhantomRedstoneface(){ super("redstoneface"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 3192446ba..abd92bfbd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -26,6 +26,8 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public class TileEntityPhantomface extends TileEntityInventoryBase implements IPhantomTile{ public static final int RANGE = 16; @@ -116,7 +118,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } @Override - public boolean isItemValidForSlot(int slot, ItemStack stack){ + public boolean isItemValidForSlot(int slot, @Nonnull ItemStack stack){ return false; } @@ -177,12 +179,12 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return false; } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index 7fe3f936b..1b9e893fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -19,6 +19,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; +import javax.annotation.Nonnull; import java.util.ArrayList; public class TileEntityRangedCollector extends TileEntityInventoryBase implements IButtonReactor{ @@ -86,17 +87,17 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return false; } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return slot < WHITELIST_START; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 6b087fb41..7b04ab089 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -19,11 +19,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import javax.annotation.Nonnull; + public class TileEntityXPSolidifier extends TileEntityInventoryBase implements IButtonReactor{ public short amount; private short lastAmount; - private int[] buttonAmounts = new int[]{1, 5, 10, 20, 30, 40, 50, 64, -999}; + private final int[] buttonAmounts = new int[]{1, 5, 10, 20, 30, 40, 50, 64, -999}; public TileEntityXPSolidifier(){ super(1, "xpSolidifier"); @@ -66,17 +68,17 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I } @Override - public boolean isItemValidForSlot(int i, ItemStack stack){ + public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ return false; } @Override - public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index 5d465b788..b1f9fef3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -20,6 +20,8 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + /** * (Excerpted from Tinkers' Construct with permission, thanks guys!) */ @@ -35,13 +37,15 @@ public class FluidStateMapper extends StateMapperBase implements ItemMeshDefinit this.location = new ModelResourceLocation(new ResourceLocation(ModUtil.MOD_ID, "fluids"), fluid.getName()); } + @Nonnull @Override - protected ModelResourceLocation getModelResourceLocation(IBlockState state){ + protected ModelResourceLocation getModelResourceLocation(@Nonnull IBlockState state){ return this.location; } + @Nonnull @Override - public ModelResourceLocation getModelLocation(ItemStack stack){ + public ModelResourceLocation getModelLocation(@Nonnull ItemStack stack){ return this.location; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java index 0dd5cf3ed..2a4274056 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java @@ -21,12 +21,12 @@ import java.util.List; public class RecipeUtil{ public static LensConversionRecipe lastReconstructorRecipe(){ - List list = ActuallyAdditionsAPI.reconstructorLensConversionRecipes; + List list = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; return list.get(list.size()-1); } public static CrusherRecipe lastCrusherRecipe(){ - List list = ActuallyAdditionsAPI.crusherRecipes; + List list = ActuallyAdditionsAPI.CRUSHER_RECIPES; return list.get(list.size()-1); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 424b3ef4b..b70b6237f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -10,11 +10,7 @@ package de.ellpeck.actuallyadditions.mod.util; -import net.minecraft.block.BlockDispenser; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.enchantment.Enchantment; import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.EnumHelper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 143126385..5ee8b4eca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -328,7 +328,7 @@ public class WorldUtil{ } else{ //Shows the Harvest Particles and plays the Block's Sound - world.playAuxSFX(2001, pos, Block.getStateId(state)); + world.playBroadcastSound(2001, pos, Block.getStateId(state)); } //If the Block was actually "removed", meaning it will drop an Item @@ -355,12 +355,12 @@ public class WorldUtil{ if(!world.isRemote){ //Update the Client of a Block Change if(player instanceof EntityPlayerMP){ - ((EntityPlayerMP)player).playerNetServerHandler.sendPacket(new SPacketBlockChange(world, pos)); + ((EntityPlayerMP)player).connection.sendPacket(new SPacketBlockChange(world, pos)); } } else{ //Check the Server if a Block that changed on the Client really changed, if not, revert the change - Minecraft.getMinecraft().getNetHandler().addToSendQueue(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, Minecraft.getMinecraft().objectMouseOver.sideHit)); + Minecraft.getMinecraft().getConnection().sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, Minecraft.getMinecraft().objectMouseOver.sideHit)); } return removed; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java index d012513aa..06e65668e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java @@ -18,7 +18,7 @@ import java.util.UUID; public class PersistentServerData{ - public static ArrayList playerSaveData = new ArrayList(); + public static final ArrayList playerSaveData = new ArrayList(); public static NBTTagCompound getDataFromPlayer(EntityPlayer player){ //Get Data from existing data @@ -36,8 +36,8 @@ public class PersistentServerData{ public static class PlayerSave{ - public UUID thePlayerUUID; - public NBTTagCompound theCompound; + public final UUID thePlayerUUID; + public final NBTTagCompound theCompound; public PlayerSave(UUID theUUID, NBTTagCompound theCompound){ this.thePlayerUUID = theUUID; From 69013d358348eef119acc93c5e254b77dee6f319 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 19 May 2016 20:52:17 +0200 Subject: [PATCH 168/322] r34! --- build.gradle | 2 +- .../mod/gen/VillageComponentJamHouse.java | 2 -- update/changelog.md | 7 +++++++ update/updateVersions.properties | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index f39b5cde7..3e6b8bff5 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' //I'm doing this because people made me do it. Even though it never worked properly when I tried it. Sigh. apply plugin: 'idea' -version = "1.9-r33" +version = "1.9.4-r34" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index f093c32f8..838ff5c6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -13,9 +13,7 @@ package de.ellpeck.actuallyadditions.mod.gen; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; diff --git a/update/changelog.md b/update/changelog.md index 1100dc955..dd3f09b1d 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,10 @@ +# 1.9.4-r34 +### MINECRAFT 1.9.4!! +* Made special drops dependent on the looting level you have +* Made drop chances for wings, solid xp and cobweb more common +* Added spawner changer to creative tab +* API Version 14 because of multiple changes + # 1.9-r33 * Made Growth Ring performance better * Centered page number in booklet diff --git a/update/updateVersions.properties b/update/updateVersions.properties index b29b6d7ee..776fb3ed2 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,3 +1,4 @@ 1.7.10=21 1.8.9=26 -1.9=33 \ No newline at end of file +1.9=33 +1.9.4=34 \ No newline at end of file From ddf012ef62b9012a8db90e213f509b01ed3ecf61 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 19 May 2016 20:59:42 +0200 Subject: [PATCH 169/322] Update JEI --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3e6b8bff5..f24aa8b62 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,7 @@ dependencies { //compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" - deobfCompile "mezz.jei:jei_1.9:3.3.3.197" + deobfCompile "mezz.jei:jei_1.9.4:3.4.0.202" compile files("lib/Rarmor.jar") } From 93b51eb8538ccdd8473035d58953aa8cdaf58af7 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 20 May 2016 14:50:39 +0200 Subject: [PATCH 170/322] Removed value that was turned to true when having generated the spawn cave as it would've been overriden on world join anyway. As there's only one spawn, unless you set it into chunks that haven't generated yet, it doesn't matter anyways. --- .../actuallyadditions/mod/config/ConfigValues.java | 2 +- .../mod/gen/cave/ChunkProviderCave.java | 13 ++++++------- .../actuallyadditions/mod/misc/WorldData.java | 12 ------------ 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index e36ed5191..d6f7e123b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -41,7 +41,7 @@ public class ConfigValues{ public static boolean lessParticles; public static boolean lessBlockBreakingEffects; - public static boolean caveWorld = false; //TODO Make this proper + public static boolean caveWorld = true; //TODO Make this proper public static void defineConfigValues(Configuration config){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java index f9f197639..6ca5aa47c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.gen.cave; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; @@ -27,7 +28,6 @@ import java.util.Random; public class ChunkProviderCave implements IChunkGenerator{ - private boolean generatedSpawn; private final World world; private final Random rand; @@ -74,12 +74,11 @@ public class ChunkProviderCave implements IChunkGenerator{ @Override public void populate(int x, int z){ - if(!this.generatedSpawn){ - BlockPos spawn = this.world.getSpawnPoint(); - Chunk chunk = this.world.getChunkFromBlockCoords(spawn); - if(chunk.xPosition == x && chunk.zPosition == z){ - this.generatedSpawn = this.spawnGenerator.generate(this.world, this.rand, spawn); - } + BlockPos spawn = this.world.getSpawnPoint(); + Chunk chunk = this.world.getChunkFromBlockCoords(spawn); + if(chunk.xPosition == x && chunk.zPosition == z){ + this.spawnGenerator.generate(this.world, this.rand, spawn); + ModUtil.LOGGER.info("Generating spawn cave..."); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index 9d7dc204a..1382873b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -25,8 +25,6 @@ public class WorldData extends WorldSavedData{ public static final String DATA_TAG = ModUtil.MOD_ID+"WorldData"; private static WorldData instance; - public static NBTTagCompound additionalData = new NBTTagCompound(); - public WorldData(String tag){ super(tag); } @@ -71,10 +69,6 @@ public class WorldData extends WorldSavedData{ ModUtil.LOGGER.info("Clearing leftover Persistent Server Data from other worlds!"); PersistentServerData.playerSaveData.clear(); } - if(!additionalData.hasNoTags()){ - ModUtil.LOGGER.info("Clearing leftover Additional Data from other worlds!"); - additionalData = new NBTTagCompound(); - } } @Override @@ -92,9 +86,6 @@ public class WorldData extends WorldSavedData{ PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); PersistentServerData.playerSaveData.add(aSave); } - - //Additional Data - additionalData = compound.getCompoundTag("Additional"); } @Nonnull @@ -115,9 +106,6 @@ public class WorldData extends WorldSavedData{ } compound.setTag("PlayerData", playerList); - //Additional Data - compound.setTag("Additional", additionalData); - return compound; } } From b71af53d13834d31e175b5fdb4f93c9c1faf6cbb Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 20 May 2016 17:55:33 +0200 Subject: [PATCH 171/322] Reworked compost to accept custom recipes --- .../api/ActuallyAdditionsAPI.java | 17 ++++- .../api/recipe/CompostRecipe.java | 30 ++++++++ .../mod/blocks/BlockCompost.java | 75 ++++++++++++------- .../mod/blocks/render/RenderCompost.java | 44 ++++++++--- .../mod/booklet/InitBooklet.java | 2 +- .../mod/crafting/CrusherCrafting.java | 12 +-- .../mod/crafting/InitCrafting.java | 7 ++ .../mod/gen/cave/CaveWorldType.java | 3 + .../mod/recipe/CrusherRecipeRegistry.java | 4 +- .../mod/tile/TileEntityCompost.java | 45 ++++++----- .../assets/actuallyadditions/lang/en_US.lang | 2 +- 11 files changed, 173 insertions(+), 68 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 47b6a4f47..d69dc8068 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.lens.LensConversion; import de.ellpeck.actuallyadditions.api.recipe.*; +import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; @@ -29,7 +30,7 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "14"; + public static final String API_VERSION = "15"; /** * Use this to handle things that aren't based in the API itself @@ -44,6 +45,7 @@ public class ActuallyAdditionsAPI{ public static final List RECONSTRUCTOR_LENS_CONVERSION_RECIPES = new ArrayList(); public static final Map RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap(); public static final List COFFEE_MACHINE_INGREDIENTS = new ArrayList(); + public static final List COMPOST_RECIPES = new ArrayList(); public static final List BOOKLET_ENTRIES = new ArrayList(); public static final List BOOKLET_PAGES_WITH_ITEM_DATA = new ArrayList(); @@ -134,6 +136,19 @@ public class ActuallyAdditionsAPI{ } } + /** + * Adds a new conversion recipe to the compost. + * StackSize is regarded on both input and output and they can be different. + * + * @param input The itemstack to be input into the compost + * @param inputDisplay The block to display when there is input in the compost + * @param output The itemstack to be output from the compost once conversion finishes + * @param outputDisplay The block to display when there is output in the compost + */ + public static void addCompostRecipe(ItemStack input, Block inputDisplay, ItemStack output, Block outputDisplay){ + COMPOST_RECIPES.add(new CompostRecipe(input, inputDisplay, output, outputDisplay)); + } + /** * Adds an item to the list of possible items to be returned when right-clicking a Ball Of Fur * diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java new file mode 100644 index 000000000..e98a877b4 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java @@ -0,0 +1,30 @@ +/* + * This file ("CompostRecipe.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.api.recipe; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +public class CompostRecipe{ + + public ItemStack input; + public ItemStack output; + public Block inputDisplay; + public Block outputDisplay; + + public CompostRecipe(ItemStack input, Block inputDisplay, ItemStack output, Block outputDisplay){ + this.input = input; + this.output = output; + this.inputDisplay = inputDisplay; + this.outputDisplay = outputDisplay; + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 3314dd49a..2077f04b7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -10,10 +10,8 @@ package de.ellpeck.actuallyadditions.mod.blocks; +import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; -import de.ellpeck.actuallyadditions.mod.items.ItemFertilizer; -import de.ellpeck.actuallyadditions.mod.items.ItemMisc; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; @@ -57,8 +55,6 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ this.setHardness(0.5F); this.setResistance(5.0F); this.setSoundType(SoundType.WOOD); - - //this.setBlockBoundsForItemRender(); } @Nonnull @@ -89,36 +85,59 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stackPlayer, EnumFacing f6, float f7, float f8, float f9){ if(!world.isRemote){ - TileEntityCompost tile = (TileEntityCompost)world.getTileEntity(pos); - if(tile != null){ - //Add items to be composted - if(stackPlayer != null && stackPlayer.getItem() instanceof ItemMisc && stackPlayer.getItemDamage() == TheMiscItems.MASHED_FOOD.ordinal() && (tile.slots[0] == null || (!(tile.slots[0].getItem() instanceof ItemFertilizer) && tile.slots[0].stackSize < TileEntityCompost.AMOUNT))){ - if(tile.slots[0] == null){ - tile.slots[0] = new ItemStack(stackPlayer.getItem(), 1, TheMiscItems.MASHED_FOOD.ordinal()); - } - else{ - tile.slots[0].stackSize++; - } - if(!player.capabilities.isCreativeMode){ - stackPlayer.stackSize--; - } - tile.markDirty(); - } + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityCompost){ + TileEntityCompost compost = (TileEntityCompost)tile; + ItemStack slot = compost.getStackInSlot(0); + CompostRecipe recipeIn = TileEntityCompost.getRecipeForInput(slot); + if(slot == null || recipeIn != null){ + if(stackPlayer != null){ + CompostRecipe recipeHand = TileEntityCompost.getRecipeForInput(stackPlayer); + if(recipeHand != null && (recipeIn == null || recipeIn == recipeHand)){ + int maxAdd = Math.min(recipeHand.input.stackSize, stackPlayer.stackSize); - //Add Fertilizer to player's inventory - else if(tile.slots[0] != null && (stackPlayer == null || (stackPlayer.getItem() instanceof ItemFertilizer && stackPlayer.stackSize <= stackPlayer.getMaxStackSize()-tile.slots[0].stackSize)) && tile.slots[0].getItem() instanceof ItemFertilizer){ + if(slot == null){ + ItemStack stackToAdd = stackPlayer.copy(); + stackToAdd.stackSize = maxAdd; + compost.setInventorySlotContents(0, stackToAdd); + player.inventory.decrStackSize(player.inventory.currentItem, maxAdd); + return true; + } + else{ + ItemStack stackIn = slot.copy(); + if(stackIn.stackSize < recipeHand.input.stackSize){ + int sizeAdded = Math.min(maxAdd, recipeHand.input.stackSize-stackIn.stackSize); + stackIn.stackSize+=sizeAdded; + compost.setInventorySlotContents(0, stackIn); + player.inventory.decrStackSize(player.inventory.currentItem, sizeAdded); + return true; + } + } + } + } + } + else{ if(stackPlayer == null){ - player.inventory.setInventorySlotContents(player.inventory.currentItem, tile.slots[0].copy()); + player.inventory.setInventorySlotContents(player.inventory.currentItem, slot.copy()); + compost.setInventorySlotContents(0, null); + return true; } - else{ - stackPlayer.stackSize += tile.slots[0].stackSize; + else if(stackPlayer.isItemEqual(slot)){ + int addedStackSize = Math.min(slot.stackSize, stackPlayer.getMaxStackSize()-stackPlayer.stackSize); + ItemStack stackToAdd = stackPlayer.copy(); + stackToAdd.stackSize += addedStackSize; + player.inventory.setInventorySlotContents(player.inventory.currentItem, stackToAdd); + compost.decrStackSize(0, addedStackSize); + return true; + } - tile.slots[0] = null; - tile.markDirty(); } } } - return true; + else{ + return true; + } + return false; } @Nonnull diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index ebf7228d3..ade2f73fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -10,13 +10,15 @@ package de.ellpeck.actuallyadditions.mod.blocks.render; -import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import javax.annotation.Nonnull; @@ -27,17 +29,35 @@ public class RenderCompost extends TileEntitySpecialRenderer{ public void renderTileEntityAt(@Nonnull TileEntity te, double x, double y, double z, float partialTicks, int destroyStage){ if(te instanceof TileEntityCompost){ TileEntityCompost compost = (TileEntityCompost)te; - if(compost.getStackInSlot(0) != null){ - float i = compost.getAmount()/TileEntityCompost.AMOUNT; - GlStateManager.pushMatrix(); - GlStateManager.translate((float)x+0.5F, (float)y+(i/3F)+0.01F, (float)z+0.5F); - //Hehe - if("ShadowfactsDev".equals(Minecraft.getMinecraft().thePlayer.getName())){ - GlStateManager.translate(0F, 1F, 0F); + ItemStack slot = compost.getStackInSlot(0); + + if(slot != null){ + Block display = null; + int maxAmount = 0; + for(CompostRecipe aRecipe : ActuallyAdditionsAPI.COMPOST_RECIPES){ + if(slot.isItemEqual(aRecipe.input)){ + display = aRecipe.inputDisplay; + maxAmount = aRecipe.input.stackSize; + break; + } + else if(slot.isItemEqual(aRecipe.output)){ + display = aRecipe.outputDisplay; + maxAmount = aRecipe.output.stackSize; + break; + } + } + if(display != null){ + float i = (float)slot.stackSize/(float)maxAmount; + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x+0.5F, (float)y+(i/3F)+0.01F, (float)z+0.5F); + //Hehe + if("ShadowfactsDev".equals(Minecraft.getMinecraft().thePlayer.getName())){ + GlStateManager.translate(0F, 1F, 0F); + } + GlStateManager.scale(1.5F, i, 1.5F); + AssetUtil.renderBlockInWorld(display, 0); + GlStateManager.popMatrix(); } - GlStateManager.scale(1.5F, i, 1.5F); - AssetUtil.renderBlockInWorld(Blocks.DIRT, compost.getStackInSlot(0).getItem() == InitItems.itemFertilizer ? 1 : 0); - GlStateManager.popMatrix(); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 3eabe4441..3c9cb3180 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -99,7 +99,7 @@ public class InitBooklet{ new BookletChapter("greenhouseGlass", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGreenhouseGlass), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeGlass)); new BookletChapter("fishingNet", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFishingNet), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFisher).setNoText()); new BookletChapter("feeder", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFeeder), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFeeder).setNoText()); - new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemFertilizer)).addTextReplacement("", TileEntityCompost.AMOUNT), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.recipesMashedFood)); + new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemFertilizer)), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.recipesMashedFood)); new BookletChapter("crate", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGiantChest), new PageCrafting(1, BlockCrafting.recipeCrate), new PageCrafting(2, ItemCrafting.recipeCrateKeeper), new PageCrafting(3, ItemCrafting.recipeChestToCrateUpgrade)); new BookletChapter("rangedCollector", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockRangedCollector), new PageTextOnly(1).addTextReplacement("", TileEntityRangedCollector.RANGE), new PageCrafting(2, BlockCrafting.recipeRangedCollector).setNoText()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index fa9b7351f..2a916d46a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -105,12 +105,12 @@ public class CrusherCrafting{ recipeDiamondHorseArmor = RecipeUtil.lastCrusherRecipe(); } - CrusherRecipeRegistry.searchCases.add(new CrusherRecipeRegistry.SearchCase("oreNether", 6)); - CrusherRecipeRegistry.searchCases.add(new CrusherRecipeRegistry.SearchCase("orePoor", 4, "nugget")); - CrusherRecipeRegistry.searchCases.add(new CrusherRecipeRegistry.SearchCase("denseore", 8)); - CrusherRecipeRegistry.searchCases.add(new CrusherRecipeRegistry.SearchCase("gem", 1)); - CrusherRecipeRegistry.searchCases.add(new CrusherRecipeRegistry.SearchCase("ingot", 1)); - CrusherRecipeRegistry.searchCases.add(new CrusherRecipeRegistry.SearchCase("ore", 2)); + CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("oreNether", 6)); + CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("orePoor", 4, "nugget")); + CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("denseore", 8)); + CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("gem", 1)); + CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("ingot", 1)); + CrusherRecipeRegistry.SEARCH_CASES.add(new CrusherRecipeRegistry.SearchCase("ore", 2)); CrusherRecipeRegistry.registerFinally(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java index 7c6a1d7d3..5f11ad479 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java @@ -10,7 +10,12 @@ package de.ellpeck.actuallyadditions.mod.crafting; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; public class InitCrafting{ @@ -22,6 +27,8 @@ public class InitCrafting{ MiscCrafting.init(); FoodCrafting.init(); ToolCrafting.init(); + + ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemMisc, 10, TheMiscItems.MASHED_FOOD.ordinal()), Blocks.LEAVES, new ItemStack(InitItems.itemFertilizer, 10), Blocks.DIRT); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java index 7b7076025..44d4ff139 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.gen.cave; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentServerData; import net.minecraft.entity.player.EntityPlayerMP; @@ -36,6 +37,8 @@ public class CaveWorldType extends WorldType{ super("actaddcaveworld"); Util.registerEvent(this); + + ModUtil.LOGGER.info("Cave World config enabled! Registering cave world type..."); } public static boolean isCave(World world){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index 28c768aa2..25fc80555 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -24,7 +24,7 @@ import java.util.List; public class CrusherRecipeRegistry{ - public static final ArrayList searchCases = new ArrayList(); + public static final ArrayList SEARCH_CASES = new ArrayList(); public static void registerFinally(){ ArrayList oresNoResult = new ArrayList(); @@ -32,7 +32,7 @@ public class CrusherRecipeRegistry{ for(String ore : OreDictionary.getOreNames()){ if(!hasException(ore)){ - for(SearchCase theCase : searchCases){ + for(SearchCase theCase : SEARCH_CASES){ if(ore.length() > theCase.theCase.length()){ if(ore.substring(0, theCase.theCase.length()).equals(theCase.theCase)){ String output = theCase.resultPreString+ore.substring(theCase.theCase.length()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index f4bba2821..ea713fdf5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -10,7 +10,8 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe; import de.ellpeck.actuallyadditions.mod.items.ItemFertilizer; import de.ellpeck.actuallyadditions.mod.items.ItemMisc; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; @@ -22,7 +23,6 @@ import javax.annotation.Nonnull; public class TileEntityCompost extends TileEntityInventoryBase{ - public static final int AMOUNT = 10; public int conversionTime; public TileEntityCompost(){ @@ -35,10 +35,6 @@ public class TileEntityCompost extends TileEntityInventoryBase{ compound.setInteger("ConversionTime", this.conversionTime); } - public float getAmount(){ - return this.getStackInSlot(0) != null ? this.getStackInSlot(0).stackSize : 0F; - } - @Override public boolean shouldSyncSlots(){ return true; @@ -55,27 +51,31 @@ public class TileEntityCompost extends TileEntityInventoryBase{ super.updateEntity(); if(!this.worldObj.isRemote){ boolean theFlag = this.conversionTime > 0; - if(this.slots[0] != null && !(this.slots[0].getItem() instanceof ItemFertilizer) && this.slots[0].stackSize >= AMOUNT){ - this.conversionTime++; - if(this.conversionTime >= 2000){ - this.slots[0] = new ItemStack(InitItems.itemFertilizer, AMOUNT); + + if(this.slots[0] != null){ + CompostRecipe recipe = getRecipeForInput(this.slots[0]); + if(recipe != null && this.slots[0].isItemEqual(recipe.input) && this.slots[0].stackSize >= recipe.input.stackSize){ + this.conversionTime++; + if(this.conversionTime >= 3000){ + this.slots[0] = recipe.output.copy(); + this.conversionTime = 0; + this.markDirty(); + } + } + else{ this.conversionTime = 0; } } + if(theFlag != this.conversionTime > 0){ this.markDirty(); } } } - @Override - public int getInventoryStackLimit(){ - return AMOUNT; - } - @Override public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ - return stack.getItem() instanceof ItemMisc && stack.getItemDamage() == TheMiscItems.MASHED_FOOD.ordinal(); + return getRecipeForInput(stack) != null; } @Override @@ -91,6 +91,17 @@ public class TileEntityCompost extends TileEntityInventoryBase{ @Override public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ - return stack.getItem() instanceof ItemFertilizer; + return getRecipeForInput(stack) == null; + } + + public static CompostRecipe getRecipeForInput(ItemStack input){ + if(input != null){ + for(CompostRecipe recipe : ActuallyAdditionsAPI.COMPOST_RECIPES){ + if(input.isItemEqual(recipe.input)){ + return recipe; + } + } + } + return null; } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 49d002769..eb04e975a 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -713,7 +713,7 @@ booklet.actuallyadditions.chapter.feeder.name=Feeder booklet.actuallyadditions.chapter.feeder.text.1=The Feeder is a good alternative to a manual animal farm. Place it in the middle of an animal pen and supply it with some wheat, seeds or carrots, depending on the animal you want to feed, and just wait. It will automatically feed the animals and if there is enough animals near it, it will shut off on its own to prevent lag or animal overflow. Greenpeace approves booklet.actuallyadditions.chapter.compost.name=Compost and Fertilizer -booklet.actuallyadditions.chapter.compost.text.1=The Compost is used to make Fertilizier from Mashed Food. Fertilizer acts just like Bone Meal, but can be crafted in a much simpler manner just by crafting Mashed Food and then putting of those inside of a Compost and waiting for a bit. When the mashed food is composted, just take it out by right-clicking again. +booklet.actuallyadditions.chapter.compost.text.1=The Compost is used to make Fertilizier from Mashed Food. Fertilizer acts just like Bone Meal, but can be crafted in a much simpler manner just by crafting Mashed Food and then putting 10 of those inside of a Compost and waiting for a bit. When the mashed food is composted, just take it out by right-clicking again. This, however, also works for some other items, which will be explained when needed. booklet.actuallyadditions.chapter.compost.text.3=Mashed Food can be crafted from any type of food or plantable item. booklet.actuallyadditions.chapter.crate.name=Storage Crates From 4b425a36abf80c43613411544eda60fa314b21e4 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 20 May 2016 19:05:10 +0200 Subject: [PATCH 172/322] SUPPRESS ALL THE THINGS!! --- .../actuallyadditions/api/lens/LensConversion.java | 1 - .../mod/blocks/BlockAtomicReconstructor.java | 1 + .../actuallyadditions/mod/blocks/BlockCoffeeMachine.java | 3 +++ .../actuallyadditions/mod/blocks/BlockCompost.java | 4 ++++ .../actuallyadditions/mod/blocks/BlockFishingNet.java | 3 +++ .../actuallyadditions/mod/blocks/BlockFurnaceSolar.java | 3 +++ .../mod/blocks/BlockGreenhouseGlass.java | 3 +++ .../actuallyadditions/mod/blocks/BlockLampPowerer.java | 1 + .../actuallyadditions/mod/blocks/BlockLaserRelay.java | 2 ++ .../ellpeck/actuallyadditions/mod/blocks/BlockMiner.java | 1 + .../actuallyadditions/mod/blocks/BlockPhantom.java | 3 +++ .../actuallyadditions/mod/blocks/BlockPhantomBooster.java | 3 +++ .../ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java | 5 +++++ .../actuallyadditions/mod/blocks/BlockSmileyCloud.java | 2 ++ .../ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java | 8 ++++++++ .../actuallyadditions/mod/blocks/BlockWildPlant.java | 1 + .../actuallyadditions/mod/blocks/base/BlockBase.java | 1 + .../actuallyadditions/mod/blocks/base/BlockBushBase.java | 1 + .../mod/blocks/base/BlockContainerBase.java | 4 ++++ .../actuallyadditions/mod/blocks/base/BlockStair.java | 1 + .../java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java | 1 + .../mod/gen/VillageComponentCustomCropField.java | 1 + .../mod/gen/VillageComponentJamHouse.java | 1 + .../actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java | 1 + .../actuallyadditions/mod/items/ItemAllToolAA.java | 1 + .../de/ellpeck/actuallyadditions/mod/items/ItemDrill.java | 3 +++ .../actuallyadditions/mod/items/lens/LensColor.java | 1 - .../actuallyadditions/mod/items/lens/LensDeath.java | 1 - .../actuallyadditions/mod/tile/TileEntityBreaker.java | 1 + .../actuallyadditions/mod/tile/TileEntityCompost.java | 3 --- .../mod/tile/TileEntityDirectionalBreaker.java | 1 + .../mod/tile/TileEntityHeatCollector.java | 1 + .../mod/tile/TileEntityPhantomPlacer.java | 1 + .../mod/tile/TileEntityPhantomRedstoneface.java | 1 + .../de/ellpeck/actuallyadditions/mod/util/PosUtil.java | 3 +++ .../de/ellpeck/actuallyadditions/mod/util/StringUtil.java | 2 ++ .../java/de/ellpeck/actuallyadditions/mod/util/Util.java | 1 + .../de/ellpeck/actuallyadditions/mod/util/WorldUtil.java | 1 + 38 files changed, 70 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java index 9df5094be..4d31fd789 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java @@ -25,7 +25,6 @@ import net.minecraft.util.math.BlockPos; */ public class LensConversion extends Lens{ - @SuppressWarnings("unchecked") @Override public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ return ActuallyAdditionsAPI.methodHandler.invokeConversionLens(hitState, hitBlock, tile); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index ad909378c..fe8b8abf0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -57,6 +57,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index c6a36ccb5..1cc9f8d0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -48,17 +48,20 @@ public class BlockCoffeeMachine extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 2077f04b7..9ed630b50 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -57,12 +57,14 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ this.setSoundType(SoundType.WOOD); } + @SuppressWarnings("deprecation") @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } + @SuppressWarnings("deprecation") @Override public void addCollisionBoxToList(IBlockState state, @Nonnull World worldIn, @Nonnull BlockPos pos, @Nonnull AxisAlignedBB entityBox, @Nonnull List collidingBoxes, Entity entityIn){ addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_LEGS); @@ -72,11 +74,13 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_SOUTH); } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index bb6faf242..eafef688f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -37,6 +37,7 @@ public class BlockFishingNet extends BlockContainerBase{ this.setSoundType(SoundType.WOOD); } + @SuppressWarnings("deprecation") @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ @@ -49,11 +50,13 @@ public class BlockFishingNet extends BlockContainerBase{ return new TileEntityFishingNet(); } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index 6f67b20aa..92cfac5f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -37,6 +37,7 @@ public class BlockFurnaceSolar extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ @@ -49,11 +50,13 @@ public class BlockFurnaceSolar extends BlockContainerBase{ return new TileEntityFurnaceSolar(); } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index ed517c75d..e3018a2bc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -39,11 +39,13 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState state, @Nonnull IBlockAccess worldIn, @Nonnull BlockPos pos, EnumFacing side){ @@ -52,6 +54,7 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index 7b28c56be..afc3b10aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -38,6 +38,7 @@ public class BlockLampPowerer extends BlockBase{ this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Override public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){ this.updateLamp(worldIn, pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index c16acfd38..66ba5c923 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -48,11 +48,13 @@ public class BlockLaserRelay extends BlockContainerBase{ this.type = type; } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index 87e6986cd..a6f4921a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -46,6 +46,7 @@ public class BlockMiner extends BlockContainerBase implements IHudDisplay{ this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index b25d5c405..e3840ba91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -54,11 +54,13 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Override public boolean canProvidePower(IBlockState state){ return this.type == Type.REDSTONEFACE; } + @SuppressWarnings("deprecation") @Override public int getWeakPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ if(this.type == Type.REDSTONEFACE){ @@ -70,6 +72,7 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ return super.getWeakPower(state, world, pos, side); } + @SuppressWarnings("deprecation") @Override public int getStrongPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ if(this.type == Type.REDSTONEFACE){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index e3963fd61..99c925a60 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -37,17 +37,20 @@ public class BlockPhantomBooster extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } + @SuppressWarnings("deprecation") @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index b7f6289be..43ed42f91 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -46,6 +46,7 @@ public class BlockSlabs extends BlockBase{ this(name, fullBlock, 0); } + @SuppressWarnings("deprecation") public BlockSlabs(String name, Block fullBlock, int meta){ super(fullBlock.getMaterial(fullBlock.getDefaultState()), name); this.setHardness(1.5F); @@ -73,6 +74,7 @@ public class BlockSlabs extends BlockBase{ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); }*/ + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; @@ -90,6 +92,7 @@ public class BlockSlabs extends BlockBase{ return this.getStateFromMeta(meta); } + @SuppressWarnings("deprecation") @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ @@ -119,6 +122,7 @@ public class BlockSlabs extends BlockBase{ this.setMaxDamage(0); } + @SuppressWarnings("deprecation") @Nonnull @Override public EnumActionResult onItemUse(ItemStack stack, @Nonnull EntityPlayer playerIn, World worldIn, @Nonnull BlockPos pos, EnumHand hand, @Nonnull EnumFacing facing, float hitX, float hitY, float hitZ){ @@ -162,6 +166,7 @@ public class BlockSlabs extends BlockBase{ return worldIn.getBlockState(pos.offset(side)).getBlock() == this.block || super.canPlaceBlockOnSide(worldIn, pos, side, player, stack); } + @SuppressWarnings("deprecation") private boolean tryPlace(EntityPlayer player, ItemStack stack, World worldIn, BlockPos pos){ IBlockState iblockstate = worldIn.getBlockState(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index e25b3cc6b..5e3dd1f74 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -51,11 +51,13 @@ public class BlockSmileyCloud extends BlockContainerBase{ this.setTickRandomly(true); } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index e42ff9728..04b95d5a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -45,6 +45,7 @@ public class BlockWallAA extends BlockBase{ } + @SuppressWarnings("deprecation") public BlockWallAA(String name, Block base, int meta){ super(base.getMaterial(base.getDefaultState()), name); this.meta = meta; @@ -78,6 +79,7 @@ public class BlockWallAA extends BlockBase{ return i; } + @SuppressWarnings("deprecation") @Nonnull @Override public IBlockState getActualState(@Nonnull IBlockState state, IBlockAccess worldIn, BlockPos pos){ @@ -89,6 +91,7 @@ public class BlockWallAA extends BlockBase{ return state.withProperty(BlockWall.UP, !flag4 || !worldIn.isAirBlock(pos.up())).withProperty(BlockWall.NORTH, flag).withProperty(BlockWall.EAST, flag1).withProperty(BlockWall.SOUTH, flag2).withProperty(BlockWall.WEST, flag3); } + @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; @@ -99,12 +102,14 @@ public class BlockWallAA extends BlockBase{ return false; } + @SuppressWarnings("deprecation") @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState blockState, @Nonnull IBlockAccess blockAccess, @Nonnull BlockPos pos, EnumFacing side){ return side != EnumFacing.DOWN || super.shouldSideBeRendered(blockState, blockAccess, pos, side); } + @SuppressWarnings("deprecation") @Nonnull @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ @@ -112,12 +117,14 @@ public class BlockWallAA extends BlockBase{ return AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(state)]; } + @SuppressWarnings("deprecation") @Override public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, @Nonnull World worldIn, @Nonnull BlockPos pos){ blockState = this.getActualState(blockState, worldIn, pos); return CLIP_AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(blockState)]; } + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; @@ -135,6 +142,7 @@ public class BlockWallAA extends BlockBase{ list.add(new ItemStack(item, 1, 0)); } + @SuppressWarnings("deprecation") public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos){ Block block = PosUtil.getBlock(pos, worldIn); IBlockState state = worldIn.getBlockState(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 84a5de6a9..9cd7d369b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -72,6 +72,7 @@ public class BlockWildPlant extends BlockBushBase{ } } + @SuppressWarnings("deprecation") @Nonnull @Override public List getDrops(IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index f0ee474ec..81d30e727 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -60,6 +60,7 @@ public class BlockBase extends Block{ return EnumRarity.COMMON; } + @SuppressWarnings("deprecation") @Nonnull @Override public IBlockState getStateFromMeta(int meta){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index 6ac5d937a..0fb821ef4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -60,6 +60,7 @@ public class BlockBushBase extends BlockBush{ return EnumRarity.COMMON; } + @SuppressWarnings("deprecation") @Nonnull @Override public IBlockState getStateFromMeta(int meta){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 0cce99e9f..ae63288b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -129,6 +129,7 @@ public abstract class BlockContainerBase extends BlockContainer{ return false; } + @SuppressWarnings("deprecation") @Nonnull @Override public IBlockState getStateFromMeta(int meta){ @@ -150,6 +151,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } } + @SuppressWarnings("deprecation") @Override public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){ this.updateRedstoneState(worldIn, pos); @@ -223,11 +225,13 @@ public abstract class BlockContainerBase extends BlockContainer{ } } + @SuppressWarnings("deprecation") @Override public boolean hasComparatorInputOverride(IBlockState state){ return true; } + @SuppressWarnings("deprecation") @Override public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos){ TileEntity tile = world.getTileEntity(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index fb2866844..d46379b3f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -27,6 +27,7 @@ public class BlockStair extends BlockStairs{ this(block, name, 0); } + @SuppressWarnings("deprecation") public BlockStair(Block block, String name, int meta){ super(block.getStateFromMeta(meta)); this.name = name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 8ab5361e1..badb3a68a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -65,6 +65,7 @@ public class OreGen implements IWorldGenerator{ } } + @SuppressWarnings("deprecation") public void addOreSpawn(Block block, int meta, Block blockIn, World world, Random random, int blockXPos, int blockZPos, int maxVeinSize, int chancesToSpawn, int minY, int maxY){ if(maxY > minY){ int yDiff = maxY-minY; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index d5b9d7cae..573a65249 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -100,6 +100,7 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous } } + @SuppressWarnings("deprecation") private IBlockState getRandomCropType(Random rand){ int randomMeta = MathHelper.getRandomIntegerInRange(rand, 1, 7); switch(rand.nextInt(4)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index 838ff5c6e..d114b9d26 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -75,6 +75,7 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ this.fillWithBlocks(world, sbb, minX, minY, minZ, maxX, maxY, maxZ, block.getDefaultState(), block.getDefaultState(), false); } + @SuppressWarnings("deprecation") public void spawnActualHouse(World world, Random rand, StructureBoundingBox sbb){ //Base this.fillWithBlocks(world, sbb, 1, 0, 8, 9, 0, 10, Blocks.GRASS); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java index ca5441409..2b5fe416e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java @@ -41,6 +41,7 @@ public class WorldGenCaveSpawn extends WorldGenerator{ return true; } + @SuppressWarnings("deprecation") private void generateCave(World world, BlockPos center){ this.makeSphere(world, center, 8); this.makeSphere(world, center.add(-3, 4, 3), 4); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index f6c5cf9d5..f05193bf0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -65,6 +65,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); } + @SuppressWarnings("deprecation") @Override public boolean canHarvestBlock(@Nonnull IBlockState state, ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index ec9438f71..f80a7e323 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -263,6 +263,7 @@ public class ItemDrill extends ItemEnergy{ return toReturn; } + @SuppressWarnings("deprecation") @Override public boolean canHarvestBlock(@Nonnull IBlockState state, ItemStack stack){ int harvestLevel = this.getHarvestLevel(stack, ""); @@ -414,6 +415,7 @@ public class ItemDrill extends ItemEnergy{ * @param world The World * @param player The Player who breaks the Blocks */ + @SuppressWarnings("deprecation") public boolean breakBlocks(ItemStack stack, int radius, World world, BlockPos aPos, EntityPlayer player){ int xRange = radius; int yRange = radius; @@ -485,6 +487,7 @@ public class ItemDrill extends ItemEnergy{ * @param player The Player breaking the Blocks * @param use The Energy that should be extracted per Block */ + @SuppressWarnings("deprecation") private boolean tryHarvestBlock(World world, BlockPos pos, boolean isExtra, ItemStack stack, EntityPlayer player, int use){ Block block = PosUtil.getBlock(pos, world); IBlockState state = world.getBlockState(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index 5ca8d8b46..fa1196bd2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -49,7 +49,6 @@ public class LensColor extends Lens{ {86F, 51F, 28F}, //Brown }; - @SuppressWarnings("unchecked") @Override public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ if(hitBlock != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java index d74e5b6da..5a948fecb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java @@ -23,7 +23,6 @@ import java.util.ArrayList; public class LensDeath extends Lens{ - @SuppressWarnings("unchecked") @Override public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ int use = 150; //Per Block (because it doesn't only activate when something is hit like the other lenses!) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 8e61cb478..58c697949 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -78,6 +78,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst return this.isPlacer; } + @SuppressWarnings("deprecation") private void doWork(){ EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index ea713fdf5..328b889ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -12,9 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe; -import de.ellpeck.actuallyadditions.mod.items.ItemFertilizer; -import de.ellpeck.actuallyadditions.mod.items.ItemMisc; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 68c845e97..3721c8497 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -79,6 +79,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } } + @SuppressWarnings("deprecation") private void doWork(){ if(this.storage.getEnergyStored() >= ENERGY_USE*RANGE){ EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index d707a0488..98adccfd4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -48,6 +48,7 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr this.storage.readFromNBT(compound); } + @SuppressWarnings("deprecation") @Override public void updateEntity(){ super.updateEntity(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index fde4b585c..9fc282b62 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -122,6 +122,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements return false; } + @SuppressWarnings("deprecation") private void doWork(){ if(this.isBreaker){ Block blockToBreak = PosUtil.getBlock(this.boundPosition, this.worldObj); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java index 1bc3f50cb..25731d554 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -28,6 +28,7 @@ public class TileEntityPhantomRedstoneface extends TileEntityPhantomface{ super("redstoneface"); } + @SuppressWarnings("deprecation") @Override public void updateEntity(){ if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index be19a509b..dc6c28a31 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -22,6 +22,7 @@ import net.minecraft.world.World; public class PosUtil{ + @SuppressWarnings("deprecation") public static Material getMaterial(BlockPos pos, IBlockAccess world){ return getBlock(pos, world).getMaterial(world.getBlockState(pos)); } @@ -50,6 +51,7 @@ public class PosUtil{ return new BlockPos(pos.getX()+x, pos.getY()+y, pos.getZ()+z); } + @SuppressWarnings("deprecation") public static boolean setBlock(BlockPos pos, World world, Block block, int meta, int flag){ return world.setBlockState(pos, block.getStateFromMeta(meta), flag); } @@ -70,6 +72,7 @@ public class PosUtil{ return null; } + @SuppressWarnings("deprecation") public static void setMetadata(BlockPos pos, World world, int meta, int flag){ world.setBlockState(pos, getBlock(pos, world).getStateFromMeta(meta), flag); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index e36e07e0c..99e5733ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -26,6 +26,7 @@ public class StringUtil{ /** * Localizes a given String via StatCollector */ + @SuppressWarnings("deprecation") public static String localize(String text){ return I18n.translateToLocal(text); } @@ -33,6 +34,7 @@ public class StringUtil{ /** * Localizes a given formatted String with the given Replacements */ + @SuppressWarnings("deprecation") public static String localizeFormatted(String text, Object... replace){ return I18n.translateToLocalFormatted(text, replace); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index b70b6237f..fef3fd90e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -25,6 +25,7 @@ public class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; + @SuppressWarnings("deprecation") public static final int BUCKET = FluidContainerRegistry.BUCKET_VOLUME; public static final EnumRarity CRYSTAL_RED_RARITY = addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 5ee8b4eca..9d6d8827c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -110,6 +110,7 @@ public class WorldUtil{ } } + @SuppressWarnings("deprecation") public static ItemStack useItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ if(world instanceof WorldServer && stack != null && stack.getItem() != null){ BlockPos offsetPos = pos.offset(side); From 3f0b9beb5c01f8e583f262c67db184d054c46865 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 20 May 2016 22:13:36 +0200 Subject: [PATCH 173/322] Added custom cave gen for the cave worlds. No idea what it actually does right now though. --- .../mod/gen/cave/ChunkProviderCave.java | 5 + .../mod/gen/cave/MapGenCustomCaves.java | 240 ++++++++++++++++++ 2 files changed, 245 insertions(+) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java index 6ca5aa47c..487e8cf06 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java @@ -19,6 +19,7 @@ import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.chunk.IChunkGenerator; +import net.minecraft.world.gen.MapGenBase; import net.minecraft.world.gen.feature.WorldGenerator; import javax.annotation.Nonnull; @@ -33,6 +34,8 @@ public class ChunkProviderCave implements IChunkGenerator{ private final WorldGenerator spawnGenerator; + private final MapGenBase caveGenerator = new MapGenCustomCaves(); + public ChunkProviderCave(World world){ this.world = world; this.rand = new Random(world.getSeed()); @@ -67,6 +70,8 @@ public class ChunkProviderCave implements IChunkGenerator{ } } + this.caveGenerator.generate(this.world, chunkX, chunkZ, primer); + Chunk chunk = new Chunk(this.world, primer, chunkX, chunkZ); chunk.generateSkylightMap(); return chunk; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java new file mode 100644 index 000000000..3c91f69c8 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java @@ -0,0 +1,240 @@ +/* + * This file ("MapGenRiverCaves.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.gen.cave; + +import com.google.common.base.Objects; +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.gen.MapGenCaves; + +import javax.annotation.Nonnull; +import java.util.Random; + +//This is hideous. It's mostly copied from MapGenCaves and changed slightly. +//I also have no idea what I'm actually doing here as all of the variables have +//horrible names and I don't know what half of them do so I just try it out. +public class MapGenCustomCaves extends MapGenCaves{ + + private static final Block[] NO_REPLACEY = new Block[]{ + Blocks.BEDROCK, + Blocks.LOG, + Blocks.LOG2, + Blocks.LEAVES, + Blocks.DIRT, + Blocks.PLANKS, + Blocks.OAK_FENCE, + Blocks.CHEST, + Blocks.LADDER + }; + + @Override + protected void addRoom(long probablySeed, int chunkX, int chunkZ, @Nonnull ChunkPrimer primer, double x, double y, double z){ + this.addTunnel(probablySeed, chunkX, chunkZ, primer, x, y, z, 1.0F+this.rand.nextFloat()*15.0F, 0.0F, 0.0F, -1, -1, this.rand.nextDouble()*1.2F+0.25F); + } + + @Override + protected void addTunnel(long probablySeed, int chunkX, int chunkZ, @Nonnull ChunkPrimer primer, double x, double y, double z, float float1, float float2, float float3, int int1, int int2, double double4){ + double d0 = (double)(chunkX*16+8); + double d1 = (double)(chunkZ*16+8); + float f = 0.0F; + float f1 = 0.0F; + Random random = new Random(probablySeed); + + if(int2 <= 0){ + int i = this.range*16-16; + int2 = i-random.nextInt(i/4); + } + + boolean flag2 = false; + + if(int1 == -1){ + int1 = int2/2; + flag2 = true; + } + + int j = random.nextInt(int2/2)+int2/4; + + for(boolean flag = random.nextInt(6) == 0; int1 < int2; ++int1){ + double d2 = 1.5D+(double)(MathHelper.sin((float)int1*(float)Math.PI/(float)int2)*float1); + double d3 = d2*double4; + float f2 = MathHelper.cos(float3); + float f3 = MathHelper.sin(float3); + x += (double)(MathHelper.cos(float2)*f2); + y += (double)f3; + z += (double)(MathHelper.sin(float2)*f2); + + if(flag){ + float3 = float3*0.92F; + } + else{ + float3 = float3*0.7F; + } + + float3 = float3+f1*0.1F; + float2 += f*0.1F; + f1 = f1*0.9F; + f = f*0.75F; + f1 = f1+(random.nextFloat()-random.nextFloat())*random.nextFloat()*2.0F; + f = f+(random.nextFloat()-random.nextFloat())*random.nextFloat()*4.0F; + + if(!flag2 && int1 == j && float1 > 1.0F && int2 > 0){ + this.addTunnel(random.nextLong(), chunkX, chunkZ, primer, x, y, z, random.nextFloat()*0.5F+0.5F, float2-((float)Math.PI/2F), float3/3.0F, int1, int2, 1.0D); + this.addTunnel(random.nextLong(), chunkX, chunkZ, primer, x, y, z, random.nextFloat()*0.5F+0.5F, float2+((float)Math.PI/2F), float3/3.0F, int1, int2, 1.0D); + return; + } + + if(flag2 || random.nextInt(4) != 0){ + double d4 = x-d0; + double d5 = z-d1; + double d6 = (double)(int2-int1); + double d7 = (double)(float1+2.0F+16.0F); + + if(d4*d4+d5*d5-d6*d6 > d7*d7){ + return; + } + + if(x >= d0-16.0D-d2*2.0D && z >= d1-16.0D-d2*2.0D && x <= d0+16.0D+d2*2.0D && z <= d1+16.0D+d2*2.0D){ + int k2 = MathHelper.floor_double(x-d2)-chunkX*16-1; + int k = MathHelper.floor_double(x+d2)-chunkX*16+1; + int l2 = MathHelper.floor_double(y-d3)-1; + int l = MathHelper.floor_double(y+d3)+1; + int i3 = MathHelper.floor_double(z-d2)-chunkZ*16-1; + int i1 = MathHelper.floor_double(z+d2)-chunkZ*16+1; + + if(k2 < 0){ + k2 = 0; + } + + if(k > 16){ + k = 16; + } + + if(l2 < 1){ + l2 = 1; + } + + if(l > 248){ + l = 248; + } + + if(i3 < 0){ + i3 = 0; + } + + if(i1 > 16){ + i1 = 16; + } + + boolean flag3 = false; + + for(int j1 = k2; !flag3 && j1 < k; ++j1){ + for(int k1 = i3; !flag3 && k1 < i1; ++k1){ + for(int l1 = l+1; !flag3 && l1 >= l2-1; --l1){ + if(l1 >= 0 && l1 < 256){ + if(this.isOceanBlock(primer, j1, l1, k1, chunkX, chunkZ)){ + flag3 = true; + } + + if(l1 != l2-1 && j1 != k2 && j1 != k-1 && k1 != i3 && k1 != i1-1){ + l1 = l2; + } + } + } + } + } + + if(!flag3){ + for(int j3 = k2; j3 < k; ++j3){ + double d10 = ((double)(j3+chunkX*16)+0.5D-x)/d2; + + for(int i2 = i3; i2 < i1; ++i2){ + double d8 = ((double)(i2+chunkZ*16)+0.5D-z)/d2; + boolean flag1 = false; + + if(d10*d10+d8*d8 < 1.0D){ + for(int j2 = l; j2 > l2; --j2){ + double d9 = ((double)(j2-1)+0.5D-y)/d3; + + if(d9 > -0.7D && d10*d10+d9*d9+d8*d8 < 1.0D){ + IBlockState iblockstate1 = primer.getBlockState(j3, j2, i2); + IBlockState iblockstate2 = Objects.firstNonNull(primer.getBlockState(j3, j2+1, i2), BLK_AIR); + + this.digBlock(primer, j3, j2, i2, chunkX, chunkZ, flag1, iblockstate1, iblockstate2); + } + } + } + } + } + + if(flag2){ + break; + } + } + } + } + } + } + + @Override + protected boolean canReplaceBlock(IBlockState first, @Nonnull IBlockState second){ + return Util.arrayContains(NO_REPLACEY, first.getBlock()) < 0; + } + + @Override + protected void digBlock(@Nonnull ChunkPrimer primer, int x, int y, int z, int chunkX, int chunkZ, boolean foundTop, @Nonnull IBlockState state, @Nonnull IBlockState up){ + net.minecraft.world.biome.Biome biome = this.worldObj.getBiomeGenForCoords(new BlockPos(x+chunkX*16, 0, z+chunkZ*16)); + IBlockState top = biome.topBlock; + IBlockState filler = biome.fillerBlock; + + if(this.canReplaceBlock(state, up) || state.getBlock() == top.getBlock() || state.getBlock() == filler.getBlock()){ + primer.setBlockState(x, y, z, BLK_AIR); + } + } + + @Override + protected void recursiveGenerate(World worldIn, int chunkX, int chunkZ, int int1, int int2, @Nonnull ChunkPrimer primer){ + int i = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(20)+1)+1); + + if(this.rand.nextInt(10) != 0){ + i = 0; + } + + for(int j = 0; j < i; ++j){ + double d0 = (double)(chunkX*16+this.rand.nextInt(16)); + double d1 = (double)this.rand.nextInt(this.rand.nextInt(244)+8); + double d2 = (double)(chunkZ*16+this.rand.nextInt(16)); + int k = 1; + + if(this.rand.nextInt(4) == 0){ + this.addRoom(this.rand.nextLong(), int1, int2, primer, d0, d1, d2); + k += this.rand.nextInt(4); + } + + for(int l = 0; l < k; ++l){ + float f = this.rand.nextFloat()*((float)Math.PI*2F); + float f1 = (this.rand.nextFloat()-0.5F)*2.0F/8.0F; + float f2 = this.rand.nextFloat()*2.0F+this.rand.nextFloat(); + + if(this.rand.nextInt(10) == 0){ + f2 *= this.rand.nextFloat()*this.rand.nextFloat()*3.0F+1.0F; + } + + this.addTunnel(this.rand.nextLong(), int1, int2, primer, d0, d1, d2, f2, f, f1, 0, 0, this.rand.nextDouble()*2F+1F); + } + } + } +} From 2ff5f2758e7aa83ee0fcf33ad785ae84cfd14e7f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 21 May 2016 00:39:50 +0200 Subject: [PATCH 174/322] Added lush caves to the cave world --- .../mod/gen/cave/ChunkProviderCave.java | 9 ++ .../mod/gen/cave/MapGenCustomCaves.java | 32 +----- .../mod/gen/cave/WorldGenCaveSpawn.java | 2 +- .../mod/gen/cave/WorldGenLushCaves.java | 106 ++++++++++++++++++ 4 files changed, 121 insertions(+), 28 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java index 487e8cf06..3277c5df3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.Chunk; @@ -33,12 +34,14 @@ public class ChunkProviderCave implements IChunkGenerator{ private final Random rand; private final WorldGenerator spawnGenerator; + private final WorldGenerator lushCaveGenerator; private final MapGenBase caveGenerator = new MapGenCustomCaves(); public ChunkProviderCave(World world){ this.world = world; this.rand = new Random(world.getSeed()); + this.lushCaveGenerator = new WorldGenLushCaves(this.rand); this.spawnGenerator = new WorldGenCaveSpawn(this.rand); } @@ -85,6 +88,12 @@ public class ChunkProviderCave implements IChunkGenerator{ this.spawnGenerator.generate(this.world, this.rand, spawn); ModUtil.LOGGER.info("Generating spawn cave..."); } + else{ + if(this.rand.nextInt(3) <= 0){ + BlockPos pos = new BlockPos(x*16+this.rand.nextInt(16)+8, MathHelper.getRandomIntegerInRange(this.rand, 12, 244), z*16+this.rand.nextInt(16)+8); + this.lushCaveGenerator.generate(this.world, this.rand, pos); + } + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java index 3c91f69c8..8151a6cb2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java @@ -25,22 +25,8 @@ import javax.annotation.Nonnull; import java.util.Random; //This is hideous. It's mostly copied from MapGenCaves and changed slightly. -//I also have no idea what I'm actually doing here as all of the variables have -//horrible names and I don't know what half of them do so I just try it out. public class MapGenCustomCaves extends MapGenCaves{ - private static final Block[] NO_REPLACEY = new Block[]{ - Blocks.BEDROCK, - Blocks.LOG, - Blocks.LOG2, - Blocks.LEAVES, - Blocks.DIRT, - Blocks.PLANKS, - Blocks.OAK_FENCE, - Blocks.CHEST, - Blocks.LADDER - }; - @Override protected void addRoom(long probablySeed, int chunkX, int chunkZ, @Nonnull ChunkPrimer primer, double x, double y, double z){ this.addTunnel(probablySeed, chunkX, chunkZ, primer, x, y, z, 1.0F+this.rand.nextFloat()*15.0F, 0.0F, 0.0F, -1, -1, this.rand.nextDouble()*1.2F+0.25F); @@ -139,16 +125,10 @@ public class MapGenCustomCaves extends MapGenCaves{ i1 = 16; } - boolean flag3 = false; - - for(int j1 = k2; !flag3 && j1 < k; ++j1){ - for(int k1 = i3; !flag3 && k1 < i1; ++k1){ - for(int l1 = l+1; !flag3 && l1 >= l2-1; --l1){ + for(int j1 = k2; j1 < k; ++j1){ + for(int k1 = i3; k1 < i1; ++k1){ + for(int l1 = l+1; l1 >= l2-1; --l1){ if(l1 >= 0 && l1 < 256){ - if(this.isOceanBlock(primer, j1, l1, k1, chunkX, chunkZ)){ - flag3 = true; - } - if(l1 != l2-1 && j1 != k2 && j1 != k-1 && k1 != i3 && k1 != i1-1){ l1 = l2; } @@ -157,7 +137,6 @@ public class MapGenCustomCaves extends MapGenCaves{ } } - if(!flag3){ for(int j3 = k2; j3 < k; ++j3){ double d10 = ((double)(j3+chunkX*16)+0.5D-x)/d2; @@ -184,14 +163,13 @@ public class MapGenCustomCaves extends MapGenCaves{ break; } } - } } } } @Override protected boolean canReplaceBlock(IBlockState first, @Nonnull IBlockState second){ - return Util.arrayContains(NO_REPLACEY, first.getBlock()) < 0; + return true; } @Override @@ -215,7 +193,7 @@ public class MapGenCustomCaves extends MapGenCaves{ for(int j = 0; j < i; ++j){ double d0 = (double)(chunkX*16+this.rand.nextInt(16)); - double d1 = (double)this.rand.nextInt(this.rand.nextInt(244)+8); + double d1 = (double)this.rand.nextInt(this.rand.nextInt(236)+16); double d2 = (double)(chunkZ*16+this.rand.nextInt(16)); int k = 1; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java index 2b5fe416e..aca9345bc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java @@ -55,7 +55,7 @@ public class WorldGenCaveSpawn extends WorldGenerator{ this.makeSphere(world, center.add(-2, -1, 8), 3); world.setBlockState(center.add(-1, -5, -8), Blocks.DIRT.getStateFromMeta(1)); - WorldGenTrees trees = new WorldGenTrees(true); + WorldGenTrees trees = new WorldGenTrees(false); trees.generate(world, this.rand, center.add(-1, -4, -8)); int length = this.rand.nextInt(20)+20; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java new file mode 100644 index 000000000..0a70a4ac5 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java @@ -0,0 +1,106 @@ +/* + * This file ("WorldGenLushCaves.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.gen.cave; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.*; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +public class WorldGenLushCaves extends WorldGenerator{ + + private final Random rand; + + public WorldGenLushCaves(Random rand){ + this.rand = rand; + } + + @Override + public boolean generate(@Nonnull World world, @Nonnull Random rand, @Nonnull BlockPos position){ + this.generateCave(world, position); + return true; + } + + private void generateCave(World world, BlockPos center){ + int spheres = this.rand.nextInt(5)+3; + for(int i = 0; i <= spheres; i++){ + this.makeSphereWithGrassFloor(world, center.add(this.rand.nextInt(11)-5, this.rand.nextInt(7)-3, this.rand.nextInt(11)-5), this.rand.nextInt(3)+5); + } + + this.genTreesAndTallGrass(world, center, 10, spheres*3); + } + + private void genTreesAndTallGrass(World world, BlockPos center, int radius, int amount){ + List possiblePoses = new ArrayList(); + for(double x = -radius; x < radius; x++){ + for(double y = -radius; y < radius; y++){ + for(double z = -radius; z < radius; z++){ + if(this.rand.nextDouble() >= 0.5D){ + BlockPos pos = center.add(x, y, z); + if(world.getBlockState(pos).getBlock() == Blocks.GRASS){ + possiblePoses.add(pos); + } + } + } + } + } + + if(!possiblePoses.isEmpty()){ + for(int i = 0; i <= amount; i++){ + Collections.shuffle(possiblePoses); + if(this.rand.nextBoolean()){ + WorldGenAbstractTree trees = this.rand.nextBoolean() ? (this.rand.nextBoolean() ? new WorldGenBigTree(false) : new WorldGenShrub(Blocks.LOG.getDefaultState(), Blocks.LEAVES.getDefaultState())) : new WorldGenTrees(false); + trees.generate(world, this.rand, possiblePoses.get(0).up()); + } + else{ + ItemDye.applyBonemeal(new ItemStack(Items.DYE, 1, EnumDyeColor.WHITE.getDyeDamage()), world, possiblePoses.get(0)); + } + } + } + } + + private void makeSphereWithGrassFloor(World world, BlockPos center, int radius){ + for(double x = -radius; x < radius; x++){ + for(double y = -radius; y < radius; y++){ + for(double z = -radius; z < radius; z++){ + if(Math.sqrt((x*x)+(y*y)+(z*z)) < radius){ + world.setBlockToAir(center.add(x, y, z)); + } + } + } + } + + for(double x = -radius; x < radius; x++){ + for(double z = -radius; z < radius; z++){ + for(double y = -radius; y <= -3; y++){ + BlockPos pos = center.add(x, y, z); + IBlockState state = world.getBlockState(pos); + BlockPos posUp = pos.up(); + IBlockState stateUp = world.getBlockState(posUp); + if(!state.getBlock().isAir(state, world, pos) && stateUp.getBlock().isAir(stateUp, world, posUp)){ + world.setBlockState(pos, Blocks.GRASS.getDefaultState()); + } + } + } + } + } +} From 9b9f7b8ff3d1a4bd8fca7eb377036cd62e716480 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 21 May 2016 12:21:36 +0200 Subject: [PATCH 175/322] Scrap this project. It doesn't fit the theme, it doesn't work like it should, it's broken to no end. Yea, I'll probably do it some other time. Maybe. --- .../mod/ActuallyAdditions.java | 5 - .../mod/blocks/BlockImpureIron.java | 95 -------- .../mod/blocks/InitBlocks.java | 6 - .../mod/config/ConfigValues.java | 2 - .../mod/crafting/CrusherCrafting.java | 4 - .../mod/creative/CreativeTab.java | 4 - .../actuallyadditions/mod/gen/OreGen.java | 10 +- .../mod/gen/cave/CaveWorldType.java | 79 ------- .../mod/gen/cave/ChunkProviderCave.java | 119 ---------- .../mod/gen/cave/MapGenCustomCaves.java | 218 ------------------ .../mod/gen/cave/WorldGenCaveSpawn.java | 122 ---------- .../mod/gen/cave/WorldGenLushCaves.java | 106 --------- .../blockstates/blockImpureIron.json | 14 -- .../textures/blocks/blockImpureIron.png | Bin 369 -> 0 bytes 14 files changed, 1 insertion(+), 783 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java delete mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json delete mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockImpureIron.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 19cd898ff..1f5e05e9c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -21,7 +21,6 @@ import de.ellpeck.actuallyadditions.mod.crafting.InitCrafting; import de.ellpeck.actuallyadditions.mod.crafting.ItemCrafting; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.gen.cave.CaveWorldType; import de.ellpeck.actuallyadditions.mod.gen.InitVillager; import de.ellpeck.actuallyadditions.mod.gen.OreGen; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; @@ -104,10 +103,6 @@ public class ActuallyAdditions{ InitCrafting.init(); DungeonLoot.init(); - if(ConfigValues.caveWorld){ - new CaveWorldType(); - } - proxy.init(event); ModUtil.LOGGER.info("Initialization Finished."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java deleted file mode 100644 index 824a0bac9..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockImpureIron.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * This file ("BlockImpureIron.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.blocks; - -import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; -import de.ellpeck.actuallyadditions.mod.gen.cave.CaveWorldType; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; -import de.ellpeck.actuallyadditions.mod.util.Util; -import net.minecraft.block.Block; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumParticleTypes; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.WorldServer; - -import javax.annotation.Nonnull; - -public class BlockImpureIron extends BlockGeneric{ - - public BlockImpureIron(String name){ - super(name, Material.ROCK, SoundType.STONE, 3.5F, 12.5F, "pickaxe", 1); - } - - @Override - protected ItemBlockBase getItemBlock(){ - return new TheItemBlock(this); - } - - public static class TheItemBlock extends ItemBlockBase{ - - public TheItemBlock(Block block){ - super(block); - this.setHasSubtypes(false); - this.setMaxDamage(0); - } - - @Nonnull - @Override - public String getUnlocalizedName(ItemStack stack){ - return this.getUnlocalizedName(); - } - - @Override - public int getMetadata(int damage){ - return damage; - } - - @Override - public boolean onEntityItemUpdate(EntityItem item){ - if(item != null && CaveWorldType.isCave(item.getEntityWorld())){ - if(item.isInWater()){ - if(!item.getEntityWorld().isRemote){ - ItemStack stack = item.getEntityItem(); - if(stack != null){ - if(!stack.hasTagCompound()){ - stack.setTagCompound(new NBTTagCompound()); - } - NBTTagCompound compound = stack.getTagCompound(); - - int conversionTimer = compound.getInteger("ConversionTimer"); - if(conversionTimer >= 2000){ - item.setEntityItemStack(new ItemStack(InitItems.itemDust, 1, TheDusts.IRON.ordinal())); - - if(item.getEntityWorld() instanceof WorldServer){ - ((WorldServer)item.getEntityWorld()).spawnParticle(EnumParticleTypes.SMOKE_NORMAL, item.posX, item.posY, item.posZ, 30, 0D, 0D, 0D, 0.05D); - } - } - else{ - compound.setInteger("ConversionTimer", conversionTimer+1); - } - } - } - else{ - if(item.getEntityWorld().getTotalWorldTime()%20 == 0){ - item.getEntityWorld().spawnParticle(EnumParticleTypes.VILLAGER_HAPPY, MathHelper.floor_double(item.posX)+Util.RANDOM.nextDouble(), MathHelper.floor_double(item.posY)+Util.RANDOM.nextDouble(), MathHelper.floor_double(item.posZ)+Util.RANDOM.nextDouble(), 0D, 0D, 0D); - } - } - } - } - return false; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index e3ae22124..6246eda72 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -115,15 +115,9 @@ public class InitBlocks{ public static Block blockPillarQuartzStair; public static Block blockPillarQuartzSlab; - public static Block blockImpureIron; - public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); - if(ConfigValues.caveWorld){ - blockImpureIron = new BlockImpureIron("blockImpureIron"); - } - blockItemViewer = new BlockItemViewer("blockItemViewer"); blockFireworkBox = new BlockFireworkBox("blockFireworkBox"); blockMiner = new BlockMiner("blockMiner"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index d6f7e123b..436e7d78c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -41,8 +41,6 @@ public class ConfigValues{ public static boolean lessParticles; public static boolean lessBlockBreakingEffects; - public static boolean caveWorld = true; //TODO Make this proper - public static void defineConfigValues(Configuration config){ for(ConfigCrafting currConf : CRAFTING_CONFIG){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index 2a916d46a..b7213fa53 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -37,10 +37,6 @@ public class CrusherCrafting{ public static void init(){ ModUtil.LOGGER.info("Initializing Crusher Recipes..."); - if(ConfigValues.caveWorld){ - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(InitBlocks.blockImpureIron), new ItemStack(InitItems.itemDust, 2, TheDusts.IRON.ordinal())); - } - ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.BONE), new ItemStack(Items.DYE, 6, 15)); miscRecipes.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.REEDS), new ItemStack(Items.SUGAR, 3)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 6255fffa8..46cb04a13 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -306,10 +306,6 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemChestCrystalWhite); this.add(InitItems.itemPantsCrystalWhite); this.add(InitItems.itemBootsCrystalWhite); - - if(ConfigValues.caveWorld){ - this.add(InitBlocks.blockImpureIron); - } } public void add(Item item){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index badb3a68a..76d3dd544 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.gen.cave.CaveWorldType; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; @@ -46,19 +45,12 @@ public class OreGen implements IWorldGenerator{ public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){ int dimension = world.provider.getDimension(); if(dimension != -1 && dimension != 1){ - if(CaveWorldType.isCave(world)){ - this.generateCave(world, random, chunkX*16, chunkZ*16); - } - else if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimension()) < 0){ + if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimension()) < 0){ this.generateDefault(world, random, chunkX*16, chunkZ*16); } } } - private void generateCave(World world, Random random, int x, int z){ - this.addOreSpawn(InitBlocks.blockImpureIron, 0, Blocks.STONE, world, random, x, z, MathHelper.getRandomIntegerInRange(random, 5, 10), 60, 0, world.getHeight()); - } - private void generateDefault(World world, Random random, int x, int z){ if(ConfigBoolValues.GENERATE_QUARTZ.isEnabled()){ this.addOreSpawn(InitBlocks.blockMisc, TheMiscBlocks.ORE_QUARTZ.ordinal(), Blocks.STONE, world, random, x, z, MathHelper.getRandomIntegerInRange(random, 5, 8), 10, QUARTZ_MIN, QUARTZ_MAX); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java deleted file mode 100644 index 44d4ff139..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/CaveWorldType.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * This file ("CaveWorldType.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.gen.cave; - -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentServerData; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraft.world.WorldType; -import net.minecraft.world.chunk.IChunkGenerator; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -import javax.annotation.Nonnull; - -public class CaveWorldType extends WorldType{ - - public CaveWorldType(){ - //Name can't be longer than 16 :'( - super("actaddcaveworld"); - - Util.registerEvent(this); - - ModUtil.LOGGER.info("Cave World config enabled! Registering cave world type..."); - } - - public static boolean isCave(World world){ - return ConfigValues.caveWorld && world.getWorldType() instanceof CaveWorldType; - } - - @Nonnull - @Override - public IChunkGenerator getChunkGenerator(@Nonnull World world, String generatorOptions){ - return new ChunkProviderCave(world); - } - - @Override - public int getSpawnFuzz(@Nonnull WorldServer world, MinecraftServer server){ - return 1; - } - - @SubscribeEvent - public void onUpdate(LivingEvent.LivingUpdateEvent event){ - if(event.getEntity() instanceof EntityPlayerMP){ - EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); - if(isCave(player.worldObj) && !player.worldObj.isRemote){ - if(player.posY >= player.worldObj.getHeight() && !player.isSpectator()){ - BlockPos spawn = player.worldObj.getSpawnPoint(); - player.connection.setPlayerLocation(spawn.getX()+0.5, spawn.getY()+1, spawn.getZ()+0.5, player.rotationYaw, player.rotationPitch); - } - - NBTTagCompound playerData = PersistentServerData.getDataFromPlayer(player); - if(!playerData.getBoolean("SpawnedFirst")){ - player.inventory.addItemStackToInventory(new ItemStack(InitItems.itemBooklet)); - - playerData.setBoolean("SpawnedFirst", true); - WorldData.makeDirty(); - } - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java deleted file mode 100644 index 3277c5df3..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/ChunkProviderCave.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * This file ("ChunkProviderCave.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.gen.cave; - -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.ChunkPrimer; -import net.minecraft.world.chunk.IChunkGenerator; -import net.minecraft.world.gen.MapGenBase; -import net.minecraft.world.gen.feature.WorldGenerator; - -import javax.annotation.Nonnull; -import java.util.Collections; -import java.util.List; -import java.util.Random; - -public class ChunkProviderCave implements IChunkGenerator{ - - private final World world; - private final Random rand; - - private final WorldGenerator spawnGenerator; - private final WorldGenerator lushCaveGenerator; - - private final MapGenBase caveGenerator = new MapGenCustomCaves(); - - public ChunkProviderCave(World world){ - this.world = world; - this.rand = new Random(world.getSeed()); - this.lushCaveGenerator = new WorldGenLushCaves(this.rand); - this.spawnGenerator = new WorldGenCaveSpawn(this.rand); - } - - @Nonnull - @Override - public Chunk provideChunk(int chunkX, int chunkZ){ - ChunkPrimer primer = new ChunkPrimer(); - - for(int x = 0; x < 16; x++){ - for(int z = 0; z < 16; z++){ - for(int y = 0; y < this.world.getHeight(); y++){ - if(y == this.world.getHeight()-1 || y == 0){ - primer.setBlockState(x, y, z, Blocks.BEDROCK.getDefaultState()); - } - else{ - if(this.rand.nextInt(5) <= 0){ - if(this.rand.nextFloat() <= 0.95F){ - primer.setBlockState(x, y, z, (this.rand.nextFloat() >= 0.85F ? Blocks.MOSSY_COBBLESTONE : Blocks.COBBLESTONE).getDefaultState()); - } - else{ - primer.setBlockState(x, y, z, Blocks.GLOWSTONE.getDefaultState()); - } - } - else{ - primer.setBlockState(x, y, z, Blocks.STONE.getDefaultState()); - } - } - } - } - } - - this.caveGenerator.generate(this.world, chunkX, chunkZ, primer); - - Chunk chunk = new Chunk(this.world, primer, chunkX, chunkZ); - chunk.generateSkylightMap(); - return chunk; - } - - @Override - public void populate(int x, int z){ - BlockPos spawn = this.world.getSpawnPoint(); - Chunk chunk = this.world.getChunkFromBlockCoords(spawn); - if(chunk.xPosition == x && chunk.zPosition == z){ - this.spawnGenerator.generate(this.world, this.rand, spawn); - ModUtil.LOGGER.info("Generating spawn cave..."); - } - else{ - if(this.rand.nextInt(3) <= 0){ - BlockPos pos = new BlockPos(x*16+this.rand.nextInt(16)+8, MathHelper.getRandomIntegerInRange(this.rand, 12, 244), z*16+this.rand.nextInt(16)+8); - this.lushCaveGenerator.generate(this.world, this.rand, pos); - } - } - } - - @Override - public boolean generateStructures(@Nonnull Chunk chunkIn, int x, int z){ - return false; - } - - @Nonnull - @Override - public List getPossibleCreatures(@Nonnull EnumCreatureType creatureType, @Nonnull BlockPos pos){ - return Collections.emptyList(); - } - - @Override - public BlockPos getStrongholdGen(@Nonnull World worldIn, @Nonnull String structureName, @Nonnull BlockPos position){ - return null; - } - - @Override - public void recreateStructures(@Nonnull Chunk chunkIn, int x, int z){ - - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java deleted file mode 100644 index 8151a6cb2..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/MapGenCustomCaves.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * This file ("MapGenRiverCaves.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.gen.cave; - -import com.google.common.base.Objects; -import de.ellpeck.actuallyadditions.mod.util.Util; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.chunk.ChunkPrimer; -import net.minecraft.world.gen.MapGenCaves; - -import javax.annotation.Nonnull; -import java.util.Random; - -//This is hideous. It's mostly copied from MapGenCaves and changed slightly. -public class MapGenCustomCaves extends MapGenCaves{ - - @Override - protected void addRoom(long probablySeed, int chunkX, int chunkZ, @Nonnull ChunkPrimer primer, double x, double y, double z){ - this.addTunnel(probablySeed, chunkX, chunkZ, primer, x, y, z, 1.0F+this.rand.nextFloat()*15.0F, 0.0F, 0.0F, -1, -1, this.rand.nextDouble()*1.2F+0.25F); - } - - @Override - protected void addTunnel(long probablySeed, int chunkX, int chunkZ, @Nonnull ChunkPrimer primer, double x, double y, double z, float float1, float float2, float float3, int int1, int int2, double double4){ - double d0 = (double)(chunkX*16+8); - double d1 = (double)(chunkZ*16+8); - float f = 0.0F; - float f1 = 0.0F; - Random random = new Random(probablySeed); - - if(int2 <= 0){ - int i = this.range*16-16; - int2 = i-random.nextInt(i/4); - } - - boolean flag2 = false; - - if(int1 == -1){ - int1 = int2/2; - flag2 = true; - } - - int j = random.nextInt(int2/2)+int2/4; - - for(boolean flag = random.nextInt(6) == 0; int1 < int2; ++int1){ - double d2 = 1.5D+(double)(MathHelper.sin((float)int1*(float)Math.PI/(float)int2)*float1); - double d3 = d2*double4; - float f2 = MathHelper.cos(float3); - float f3 = MathHelper.sin(float3); - x += (double)(MathHelper.cos(float2)*f2); - y += (double)f3; - z += (double)(MathHelper.sin(float2)*f2); - - if(flag){ - float3 = float3*0.92F; - } - else{ - float3 = float3*0.7F; - } - - float3 = float3+f1*0.1F; - float2 += f*0.1F; - f1 = f1*0.9F; - f = f*0.75F; - f1 = f1+(random.nextFloat()-random.nextFloat())*random.nextFloat()*2.0F; - f = f+(random.nextFloat()-random.nextFloat())*random.nextFloat()*4.0F; - - if(!flag2 && int1 == j && float1 > 1.0F && int2 > 0){ - this.addTunnel(random.nextLong(), chunkX, chunkZ, primer, x, y, z, random.nextFloat()*0.5F+0.5F, float2-((float)Math.PI/2F), float3/3.0F, int1, int2, 1.0D); - this.addTunnel(random.nextLong(), chunkX, chunkZ, primer, x, y, z, random.nextFloat()*0.5F+0.5F, float2+((float)Math.PI/2F), float3/3.0F, int1, int2, 1.0D); - return; - } - - if(flag2 || random.nextInt(4) != 0){ - double d4 = x-d0; - double d5 = z-d1; - double d6 = (double)(int2-int1); - double d7 = (double)(float1+2.0F+16.0F); - - if(d4*d4+d5*d5-d6*d6 > d7*d7){ - return; - } - - if(x >= d0-16.0D-d2*2.0D && z >= d1-16.0D-d2*2.0D && x <= d0+16.0D+d2*2.0D && z <= d1+16.0D+d2*2.0D){ - int k2 = MathHelper.floor_double(x-d2)-chunkX*16-1; - int k = MathHelper.floor_double(x+d2)-chunkX*16+1; - int l2 = MathHelper.floor_double(y-d3)-1; - int l = MathHelper.floor_double(y+d3)+1; - int i3 = MathHelper.floor_double(z-d2)-chunkZ*16-1; - int i1 = MathHelper.floor_double(z+d2)-chunkZ*16+1; - - if(k2 < 0){ - k2 = 0; - } - - if(k > 16){ - k = 16; - } - - if(l2 < 1){ - l2 = 1; - } - - if(l > 248){ - l = 248; - } - - if(i3 < 0){ - i3 = 0; - } - - if(i1 > 16){ - i1 = 16; - } - - for(int j1 = k2; j1 < k; ++j1){ - for(int k1 = i3; k1 < i1; ++k1){ - for(int l1 = l+1; l1 >= l2-1; --l1){ - if(l1 >= 0 && l1 < 256){ - if(l1 != l2-1 && j1 != k2 && j1 != k-1 && k1 != i3 && k1 != i1-1){ - l1 = l2; - } - } - } - } - } - - for(int j3 = k2; j3 < k; ++j3){ - double d10 = ((double)(j3+chunkX*16)+0.5D-x)/d2; - - for(int i2 = i3; i2 < i1; ++i2){ - double d8 = ((double)(i2+chunkZ*16)+0.5D-z)/d2; - boolean flag1 = false; - - if(d10*d10+d8*d8 < 1.0D){ - for(int j2 = l; j2 > l2; --j2){ - double d9 = ((double)(j2-1)+0.5D-y)/d3; - - if(d9 > -0.7D && d10*d10+d9*d9+d8*d8 < 1.0D){ - IBlockState iblockstate1 = primer.getBlockState(j3, j2, i2); - IBlockState iblockstate2 = Objects.firstNonNull(primer.getBlockState(j3, j2+1, i2), BLK_AIR); - - this.digBlock(primer, j3, j2, i2, chunkX, chunkZ, flag1, iblockstate1, iblockstate2); - } - } - } - } - } - - if(flag2){ - break; - } - } - } - } - } - - @Override - protected boolean canReplaceBlock(IBlockState first, @Nonnull IBlockState second){ - return true; - } - - @Override - protected void digBlock(@Nonnull ChunkPrimer primer, int x, int y, int z, int chunkX, int chunkZ, boolean foundTop, @Nonnull IBlockState state, @Nonnull IBlockState up){ - net.minecraft.world.biome.Biome biome = this.worldObj.getBiomeGenForCoords(new BlockPos(x+chunkX*16, 0, z+chunkZ*16)); - IBlockState top = biome.topBlock; - IBlockState filler = biome.fillerBlock; - - if(this.canReplaceBlock(state, up) || state.getBlock() == top.getBlock() || state.getBlock() == filler.getBlock()){ - primer.setBlockState(x, y, z, BLK_AIR); - } - } - - @Override - protected void recursiveGenerate(World worldIn, int chunkX, int chunkZ, int int1, int int2, @Nonnull ChunkPrimer primer){ - int i = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(20)+1)+1); - - if(this.rand.nextInt(10) != 0){ - i = 0; - } - - for(int j = 0; j < i; ++j){ - double d0 = (double)(chunkX*16+this.rand.nextInt(16)); - double d1 = (double)this.rand.nextInt(this.rand.nextInt(236)+16); - double d2 = (double)(chunkZ*16+this.rand.nextInt(16)); - int k = 1; - - if(this.rand.nextInt(4) == 0){ - this.addRoom(this.rand.nextLong(), int1, int2, primer, d0, d1, d2); - k += this.rand.nextInt(4); - } - - for(int l = 0; l < k; ++l){ - float f = this.rand.nextFloat()*((float)Math.PI*2F); - float f1 = (this.rand.nextFloat()-0.5F)*2.0F/8.0F; - float f2 = this.rand.nextFloat()*2.0F+this.rand.nextFloat(); - - if(this.rand.nextInt(10) == 0){ - f2 *= this.rand.nextFloat()*this.rand.nextFloat()*3.0F+1.0F; - } - - this.addTunnel(this.rand.nextLong(), int1, int2, primer, d0, d1, d2, f2, f, f1, 0, 0, this.rand.nextDouble()*2F+1F); - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java deleted file mode 100644 index aca9345bc..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenCaveSpawn.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * This file ("WorldGeneratorCaveSpawn.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.gen.cave; - -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; -import net.minecraft.block.BlockLadder; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityChest; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.gen.feature.WorldGenTrees; -import net.minecraft.world.gen.feature.WorldGenerator; - -import javax.annotation.Nonnull; -import java.util.Random; - -public class WorldGenCaveSpawn extends WorldGenerator{ - - private final Random rand; - - public WorldGenCaveSpawn(Random rand){ - this.rand = rand; - } - - @Override - public boolean generate(@Nonnull World world, @Nonnull Random rand, @Nonnull BlockPos position){ - this.generateCave(world, position); - return true; - } - - @SuppressWarnings("deprecation") - private void generateCave(World world, BlockPos center){ - this.makeSphere(world, center, 8); - this.makeSphere(world, center.add(-3, 4, 3), 4); - this.makeSphere(world, center.add(4, 6, 1), 4); - this.makeSphere(world, center.add(3, 4, -3), 6); - this.makeSphere(world, center.add(4, -2, -3), 2); - this.makeSphere(world, center.add(5, 0, -3), 4); - this.makeSphere(world, center.add(1, 4, 3), 6); - this.makeSphere(world, center.add(-5, 1, 1), 4); - this.makeSphere(world, center.add(-1, 1, -7), 6); - this.makeSphere(world, center.add(-2, -1, 8), 3); - - world.setBlockState(center.add(-1, -5, -8), Blocks.DIRT.getStateFromMeta(1)); - WorldGenTrees trees = new WorldGenTrees(false); - trees.generate(world, this.rand, center.add(-1, -4, -8)); - - int length = this.rand.nextInt(20)+20; - for(int z = 0; z <= length; z++){ - for(int x = 0; x < 5; x++){ - for(int y = 0; y < 4; y++){ - BlockPos pos = center.add(x-3, y-4, 11+z); - - if(z%4 == 0 && (x == 0 || x == 4)){ - world.setBlockState(pos, Blocks.LOG2.getStateFromMeta(1)); - } - else if((z%4 == 0 || x == 0 || x == 4) && y == 3){ - world.setBlockState(pos, Blocks.PLANKS.getStateFromMeta(1)); - } - else if(!((y == 0 || y == 3) && this.rand.nextInt(5) <= 0)){ - world.setBlockToAir(pos); - } - } - } - } - BlockPos chestPos = center.add(-1, -4, 11+length); - world.setBlockState(chestPos, Blocks.CHEST.getDefaultState()); - TileEntity tile = world.getTileEntity(chestPos); - if(tile instanceof TileEntityChest){ - TileEntityChest chest = (TileEntityChest)tile; - chest.setInventorySlotContents(12, new ItemStack(InitItems.itemFoods, MathHelper.getRandomIntegerInRange(this.rand, 5, 15), this.rand.nextInt(TheFoods.values().length))); - chest.setInventorySlotContents(14, new ItemStack(InitItems.itemAxeCrystalBlack)); - } - - for(int x = -2; x <= 2; x++){ - for(int z = -2; z <= 2; z++){ - for(int y = -7; y <= 0; y++){ - if(x%2 == 0 && z%2 == 0 && x != 0 && z != 0){ - world.setBlockState(center.add(x, y, z), Blocks.LOG.getDefaultState()); - } - else if(y == 0 && (x == -2 || x == 2 || z == -2 || z == 2)){ - world.setBlockState(center.add(x, y, z), Blocks.OAK_FENCE.getDefaultState()); - } - else if(y == -1){ - world.setBlockState(center.add(x, y, z), Blocks.PLANKS.getStateFromMeta(1)); - } - } - } - } - - for(int y = 3; y <= 12; y++){ - world.setBlockState(center.add(0, y, 0), Blocks.LADDER.getDefaultState().withProperty(BlockLadder.FACING, EnumFacing.WEST)); - world.setBlockState(center.add(1, y, 0), Blocks.PLANKS.getDefaultState()); - } - world.setBlockState(center.add(0, 13, 0), Blocks.COBBLESTONE.getDefaultState()); - } - - private void makeSphere(World world, BlockPos center, int radius){ - for(double x = -radius; x < radius; x++){ - for(double y = -radius; y < radius; y++){ - for(double z = -radius; z < radius; z++){ - if(Math.sqrt((x*x)+(y*y)+(z*z)) < radius){ - world.setBlockToAir(center.add(x, y, z)); - } - } - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java deleted file mode 100644 index 0a70a4ac5..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/cave/WorldGenLushCaves.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * This file ("WorldGenLushCaves.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.gen.cave; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.EnumDyeColor; -import net.minecraft.item.ItemDye; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.gen.feature.*; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; - -public class WorldGenLushCaves extends WorldGenerator{ - - private final Random rand; - - public WorldGenLushCaves(Random rand){ - this.rand = rand; - } - - @Override - public boolean generate(@Nonnull World world, @Nonnull Random rand, @Nonnull BlockPos position){ - this.generateCave(world, position); - return true; - } - - private void generateCave(World world, BlockPos center){ - int spheres = this.rand.nextInt(5)+3; - for(int i = 0; i <= spheres; i++){ - this.makeSphereWithGrassFloor(world, center.add(this.rand.nextInt(11)-5, this.rand.nextInt(7)-3, this.rand.nextInt(11)-5), this.rand.nextInt(3)+5); - } - - this.genTreesAndTallGrass(world, center, 10, spheres*3); - } - - private void genTreesAndTallGrass(World world, BlockPos center, int radius, int amount){ - List possiblePoses = new ArrayList(); - for(double x = -radius; x < radius; x++){ - for(double y = -radius; y < radius; y++){ - for(double z = -radius; z < radius; z++){ - if(this.rand.nextDouble() >= 0.5D){ - BlockPos pos = center.add(x, y, z); - if(world.getBlockState(pos).getBlock() == Blocks.GRASS){ - possiblePoses.add(pos); - } - } - } - } - } - - if(!possiblePoses.isEmpty()){ - for(int i = 0; i <= amount; i++){ - Collections.shuffle(possiblePoses); - if(this.rand.nextBoolean()){ - WorldGenAbstractTree trees = this.rand.nextBoolean() ? (this.rand.nextBoolean() ? new WorldGenBigTree(false) : new WorldGenShrub(Blocks.LOG.getDefaultState(), Blocks.LEAVES.getDefaultState())) : new WorldGenTrees(false); - trees.generate(world, this.rand, possiblePoses.get(0).up()); - } - else{ - ItemDye.applyBonemeal(new ItemStack(Items.DYE, 1, EnumDyeColor.WHITE.getDyeDamage()), world, possiblePoses.get(0)); - } - } - } - } - - private void makeSphereWithGrassFloor(World world, BlockPos center, int radius){ - for(double x = -radius; x < radius; x++){ - for(double y = -radius; y < radius; y++){ - for(double z = -radius; z < radius; z++){ - if(Math.sqrt((x*x)+(y*y)+(z*z)) < radius){ - world.setBlockToAir(center.add(x, y, z)); - } - } - } - } - - for(double x = -radius; x < radius; x++){ - for(double z = -radius; z < radius; z++){ - for(double y = -radius; y <= -3; y++){ - BlockPos pos = center.add(x, y, z); - IBlockState state = world.getBlockState(pos); - BlockPos posUp = pos.up(); - IBlockState stateUp = world.getBlockState(posUp); - if(!state.getBlock().isAir(state, world, pos) && stateUp.getBlock().isAir(stateUp, world, posUp)){ - world.setBlockState(pos, Blocks.GRASS.getDefaultState()); - } - } - } - } - } -} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json b/src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json deleted file mode 100644 index 836a5fdcf..000000000 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockImpureIron.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "model": "minecraft:cube_all", - "textures": { - "all": "actuallyadditions:blocks/blockImpureIron" - }, - "transform": "forge:default-block" - }, - "variants": { - "normal": [{}], - "inventory": [{}] - } -} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockImpureIron.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockImpureIron.png deleted file mode 100644 index 727ff786e05a2bf9e5ca2de0fce044f0d1f54b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXPIMM=Lb~t-qXb~ z#KOOH(nj9H1_I2s>(~t@T$-t%7nIs+5~tvL%ww*r$Q^cdfu>jip&u&$<1cJkm;HO+ z{I{F$-`=Fdx+C{C*JqpSmCIH)m~gcGej9Y?38zbb0IS2SS>+9#m)*=h$1!?ZJUbyh zBm2Pj2Aw@}*X{mgEJ>T2sm@w534=p| zXF9jrFIsuiusMb`j(-J%gOE From b826c83c501f7d48a1bd29423ad59868b4c00c82 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 21 May 2016 12:46:55 +0200 Subject: [PATCH 176/322] "Added lush caves that spawn randomly" or something like that. I guess I'll leave these in, as they're kind of awesome. --- .../mod/config/ConfigValues.java | 2 +- .../mod/config/values/ConfigBoolValues.java | 3 +- .../mod/config/values/ConfigIntValues.java | 1 + .../actuallyadditions/mod/gen/OreGen.java | 8 ++ .../mod/gen/WorldGenLushCaves.java | 100 ++++++++++++++++++ 5 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index 436e7d78c..e9cefce3d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -57,7 +57,7 @@ public class ConfigValues{ mashedFoodCraftingExceptions = config.get(ConfigCategories.ITEMS_CRAFTING.name, "Mashed Food Crafting Exceptions", new String[]{"ActuallyAdditions:itemCoffee"}, "The ItemFood, IGrowable and IPlantable Items that can not be used to craft Mashed Food. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); paxelExtraMiningWhitelist = config.get(ConfigCategories.TOOL_VALUES.name, "AIOT Extra Whitelist", new String[]{"TConstruct:GravelOre"}, "By default, the AIOT can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); drillExtraMiningWhitelist = config.get(ConfigCategories.TOOL_VALUES.name, "Drill Extra Whitelist", new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); - oreGenDimensionBlacklist = config.get(ConfigCategories.WORLD_GEN.name, "OreGen Dimension Blacklist", new int[0], "The IDs of the dimensions that Actually Additions OreGen (Black Quartz for example) is banned in").getIntList(); + oreGenDimensionBlacklist = config.get(ConfigCategories.WORLD_GEN.name, "OreGen Dimension Blacklist", new int[0], "The IDs of the dimensions that Actually Additions OreGen (Black Quartz for example) is banned in. This also applies for other world gen like lush caves.").getIntList(); plantDimensionBlacklist = config.get(ConfigCategories.WORLD_GEN.name, "Plant Blacklist", new int[0], "The IDs of the dimensions that Actually Additions Plants (Rice for example) are banned in").getIntList(); minerExtraWhitelist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Extra Whitelist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode.").getStringList(); minerBlacklist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Blacklist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes.").getStringList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 74d05525c..330b6d57a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -46,7 +46,8 @@ public enum ConfigBoolValues{ ENABLE_SEASONAL("Seasonal Mode", ConfigCategories.OTHER, true, "If Seasonal Mode is enabled"), - DUNGEON_LOOT("Dungeon Loot", ConfigCategories.OTHER, true, "Should Actually Additions Loot spawn in Dungeons"); + DUNGEON_LOOT("Dungeon Loot", ConfigCategories.OTHER, true, "Should Actually Additions Loot spawn in Dungeons"), + GEN_LUSH_CAVES("Generate Lush Caves", ConfigCategories.WORLD_GEN, true, "Should caves with trees and grass randomly generate underground"); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java index 6d7a91006..bcf79233a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntValues.java @@ -21,6 +21,7 @@ public enum ConfigIntValues{ FLAX_AMOUNT("Flax: Amount", ConfigCategories.WORLD_GEN, 8, 1, 50, "The Amount of Flax generating"), COFFEE_AMOUNT("Coffee: Amount", ConfigCategories.WORLD_GEN, 6, 1, 50, "The Amount of Coffee generating"), BLACK_LOTUS_AMOUNT("Black Lotus: Amount", ConfigCategories.WORLD_GEN, 14, 1, 50, "The Amount of Black Lotus generating"), + LUSH_CAVE_CHANCE("Lush Caves: Chance", ConfigCategories.WORLD_GEN, 20, 1, 100, "The chance for lush caves to generate. The lower the number, the likelier."), LASER_RELAY_LOSS("Laser Relay: Loss", ConfigCategories.MACHINE_VALUES, 5, 0, 80, "The Energy Loss of the Laser Relay per Transfer in Percent"), LASER_RELAY_MAX_TRANSFER("Laser Relay: Max Transfer", ConfigCategories.MACHINE_VALUES, 10000, 100, 1000000, "The max amount of RF a Laser Relay can receive and try to transfer (if it's given 100 RF and can only transfer 50, it will only accept 50, it won't waste any power!)"), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 76d3dd544..286ce3f14 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; @@ -36,6 +37,8 @@ public class OreGen implements IWorldGenerator{ public static final int QUARTZ_MIN = 0; public static final int QUARTZ_MAX = 45; + private final WorldGenLushCaves caveGen = new WorldGenLushCaves(); + public static void init(){ ModUtil.LOGGER.info("Registering World Generator..."); GameRegistry.registerWorldGenerator(new OreGen(), 10); @@ -55,6 +58,11 @@ public class OreGen implements IWorldGenerator{ if(ConfigBoolValues.GENERATE_QUARTZ.isEnabled()){ this.addOreSpawn(InitBlocks.blockMisc, TheMiscBlocks.ORE_QUARTZ.ordinal(), Blocks.STONE, world, random, x, z, MathHelper.getRandomIntegerInRange(random, 5, 8), 10, QUARTZ_MIN, QUARTZ_MAX); } + + if(ConfigBoolValues.GEN_LUSH_CAVES.isEnabled() && random.nextInt(ConfigIntValues.LUSH_CAVE_CHANCE.getValue()) <= 0){ + BlockPos posAtHeight = world.getTopSolidOrLiquidBlock(new BlockPos(x+random.nextInt(16)+8, 0, z+random.nextInt(16)+8)); + this.caveGen.generate(world, random, posAtHeight.down(MathHelper.getRandomIntegerInRange(random, 10, posAtHeight.getY()-10))); + } } @SuppressWarnings("deprecation") diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java new file mode 100644 index 000000000..81b53e59f --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java @@ -0,0 +1,100 @@ +/* + * This file ("WorldGenLushCaves.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.gen; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumDyeColor; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.*; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +public class WorldGenLushCaves extends WorldGenerator{ + + @Override + public boolean generate(@Nonnull World world, @Nonnull Random rand, @Nonnull BlockPos position){ + this.generateCave(world, position, rand); + return true; + } + + private void generateCave(World world, BlockPos center, Random rand){ + int spheres = rand.nextInt(5)+3; + for(int i = 0; i <= spheres; i++){ + this.makeSphereWithGrassFloor(world, center.add(rand.nextInt(11)-5, rand.nextInt(7)-3, rand.nextInt(11)-5), rand.nextInt(3)+5); + } + + this.genTreesAndTallGrass(world, center, 10, spheres*3, rand); + } + + private void genTreesAndTallGrass(World world, BlockPos center, int radius, int amount, Random rand){ + List possiblePoses = new ArrayList(); + for(double x = -radius; x < radius; x++){ + for(double y = -radius; y < radius; y++){ + for(double z = -radius; z < radius; z++){ + if(rand.nextDouble() >= 0.5D){ + BlockPos pos = center.add(x, y, z); + if(world.getBlockState(pos).getBlock() == Blocks.GRASS){ + possiblePoses.add(pos); + } + } + } + } + } + + if(!possiblePoses.isEmpty()){ + for(int i = 0; i <= amount; i++){ + Collections.shuffle(possiblePoses); + if(rand.nextBoolean()){ + WorldGenAbstractTree trees = rand.nextBoolean() ? (rand.nextBoolean() ? new WorldGenBigTree(false) : new WorldGenShrub(Blocks.LOG.getDefaultState(), Blocks.LEAVES.getDefaultState())) : new WorldGenTrees(false); + trees.generate(world, rand, possiblePoses.get(0).up()); + } + else{ + ItemDye.applyBonemeal(new ItemStack(Items.DYE, 1, EnumDyeColor.WHITE.getDyeDamage()), world, possiblePoses.get(0)); + } + } + } + } + + private void makeSphereWithGrassFloor(World world, BlockPos center, int radius){ + for(double x = -radius; x < radius; x++){ + for(double y = -radius; y < radius; y++){ + for(double z = -radius; z < radius; z++){ + if(Math.sqrt((x*x)+(y*y)+(z*z)) < radius){ + world.setBlockToAir(center.add(x, y, z)); + } + } + } + } + + for(double x = -radius; x < radius; x++){ + for(double z = -radius; z < radius; z++){ + for(double y = -radius; y <= -3; y++){ + BlockPos pos = center.add(x, y, z); + IBlockState state = world.getBlockState(pos); + BlockPos posUp = pos.up(); + IBlockState stateUp = world.getBlockState(posUp); + if(!state.getBlock().isAir(state, world, pos) && stateUp.getBlock().isAir(stateUp, world, posUp)){ + world.setBlockState(pos, Blocks.GRASS.getDefaultState()); + } + } + } + } + } +} \ No newline at end of file From 068f367fa5f30a3b9365290375d838a80a4b8d9f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 21 May 2016 15:34:36 +0200 Subject: [PATCH 177/322] Changed world data file name, might break stuff though --- .../java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index 1382873b0..1f210a75f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -22,7 +22,7 @@ import javax.annotation.Nonnull; public class WorldData extends WorldSavedData{ - public static final String DATA_TAG = ModUtil.MOD_ID+"WorldData"; + public static final String DATA_TAG = ModUtil.MOD_ID+"worlddata"; private static WorldData instance; public WorldData(String tag){ From b746ec5d03ddd68493bb61fdcec237b67855a502 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 21 May 2016 15:49:50 +0200 Subject: [PATCH 178/322] Lush caves doc --- .../mod/booklet/InitBooklet.java | 2 ++ .../assets/actuallyadditions/lang/en_US.lang | 5 ++++- .../textures/gui/booklet/pageLushCaves.png | Bin 0 -> 43144 bytes 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/booklet/pageLushCaves.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 3c9cb3180..16e5a235e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -30,6 +30,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; @@ -84,6 +85,7 @@ public class InitBooklet{ new BookletChapter("spawnerShard", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()))); new BookletChapter("treasureChest", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTreasureChest), new PagePicture(1, "pageTreasureChest", 150).setStack(new ItemStack(InitBlocks.blockTreasureChest)), new PageTextOnly(2)).setSpecial(); + new BookletChapter("lushCaves", ActuallyAdditionsAPI.entryMisc, new ItemStack(Blocks.STONE), new PageTextOnly(1), new PagePicture(2, "pageLushCaves", 0).setNoText()); new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStack(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye)); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index eb04e975a..b64e971e9 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -872,4 +872,7 @@ booklet.actuallyadditions.chapter.itemStorage.text.1=Additionally to the L booklet.actuallyadditions.chapter.itemStorage.text.2=to one of the Item Laser Relays. To input or output items in the system, just pipe them into the interface. If you want a way to make a storage system with this, there are also Advanced Item Laser Relays, in which, by sneak-right-clicking them, you can specify which items are allowed and disallowed to enter or exit inventories connected to this particular relay. When placing an advanced relay next to an Item Interface, this effect also applies. booklet.actuallyadditions.chapter.banners.name=Additional Banners -booklet.actuallyadditions.chapter.banners.text.1=For special items in Actually Additions, there is also special Banner patterns. All of these just require the item next to the banner in the crafting grid with, optionally, a color. You can also combine them with a Shield like normal. The items that have a banner pattern are: The Actually Additions Manual The Phantom Connector The Leaf Blower (not the advanced version) The Drill (only the white one works due to the way banners work) \ No newline at end of file +booklet.actuallyadditions.chapter.banners.text.1=For special items in Actually Additions, there is also special Banner patterns. All of these just require the item next to the banner in the crafting grid with, optionally, a color. You can also combine them with a Shield like normal. The items that have a banner pattern are: The Actually Additions Manual The Phantom Connector The Leaf Blower (not the advanced version) The Drill (only the white one works due to the way banners work) + +booklet.actuallyadditions.chapter.lushCaves.name=Lush Caves +booklet.actuallyadditions.chapter.lushCaves.text.1=If you have ever done any Cave exploration, you will have probably noticed some caves that have trees and grass inside of them. These can be found at any height underground all over the world, and they can be very valuable when needing wood for torches and tools at some point. If you didn't ever see one before, look on the next page for a picture! \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/booklet/pageLushCaves.png b/src/main/resources/assets/actuallyadditions/textures/gui/booklet/pageLushCaves.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d536847be52d8096b36aa3d860e6f593bb6416 GIT binary patch literal 43144 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≠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 literal 0 HcmV?d00001 From d3150672f4633b70bc0164765430ccd8f05487a9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 24 May 2016 18:31:09 +0200 Subject: [PATCH 179/322] y u no foreach --- .../actuallyadditions/mod/event/PlayerObtainEvents.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 9390cf74f..3bb1efb61 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -29,8 +29,7 @@ import java.util.Locale; public class PlayerObtainEvents{ public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){ - for(int i = 0; i < TheAchievements.values().length; i++){ - TheAchievements ach = TheAchievements.values()[i]; + for(TheAchievements ach : TheAchievements.values()){ if(ach.type == type){ if(gotten != null && ach.ach.theItemStack != null && gotten.getItem() == ach.ach.theItemStack.getItem()){ if(gotten.getItemDamage() == ach.ach.theItemStack.getItemDamage()){ From 56bbde01925267a50c2cb9ca282df912fa380674 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 24 May 2016 19:38:32 +0200 Subject: [PATCH 180/322] Updated license. Also made it less colloquial. --- LICENSE.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index c3f049ec9..5f31b1d2b 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -12,11 +12,12 @@ Everything that is not listed below applies to the above. ### YOU CAN NOT * Copy the entire code or claim it is yours. -* Reupload the code or mod to another website or claim you made it. +* Redistribute the mod. This does not apply, however, when it comes to pre-packaged modpacks. +* Redistribute the code or claim you made it. * Copy entire classes, methods or other big parts of code. ### YOU HAVE TO -* Always credit me. Don't be a jerk and copy entire portions of the code and claim they're yours. +* Always credit me in some way. * When it comes to the code, always link back to the official repository. * When it comes to the Mod, always link back to the the official Minecraft Forum thread or CurseForge page. @@ -25,6 +26,6 @@ Everything that is not listed below applies to the above. * The above License only applies for code I wrote myself, any APIs used (such as the CoFH API) have their own License that is being respected. * There are some excerpts from other code used (such as the OpenBlocks XP system). Credit to the creators of these parts is always given and their permission is granted or their license is respected. * Almost all of the assets used in this mod are made by Glenthor and are owned by me. You are not allowed to copy them for any other project. -* Parts of this license, especially restrictive ones, can be ignored with personal permission. Said permission, however, will only be given to people I know or someone who has a very good reason for needing it. If you don't, don't ask. +* Parts of this license, especially restrictive ones, can be ignored with personal permission. Said permission, however, will only be given to people I know or someone who has a very good reason for needing it. © 2015-2016 Ellpeck \ No newline at end of file From ce556b70f5a2ade18dec7160e293ae8a53ec1a5b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 24 May 2016 19:40:17 +0200 Subject: [PATCH 181/322] Made this shorter. --- LICENSE.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 5f31b1d2b..1e7981b0d 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -11,10 +11,8 @@ Everything that is not listed below applies to the above. * Make Let's Play (and similar) videos containing the mod. ### YOU CAN NOT -* Copy the entire code or claim it is yours. +* Copy entire classes, methods or other big parts of code or claim you made them. * Redistribute the mod. This does not apply, however, when it comes to pre-packaged modpacks. -* Redistribute the code or claim you made it. -* Copy entire classes, methods or other big parts of code. ### YOU HAVE TO * Always credit me in some way. From a48f6ae232602445d02a43001502e7b7fc7db03e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 24 May 2016 19:47:36 +0200 Subject: [PATCH 182/322] CAPITALIZATION!! --- LICENSE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index 1e7981b0d..deb5f57b7 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -17,7 +17,7 @@ Everything that is not listed below applies to the above. ### YOU HAVE TO * Always credit me in some way. * When it comes to the code, always link back to the official repository. -* When it comes to the Mod, always link back to the the official Minecraft Forum thread or CurseForge page. +* When it comes to the mod, always link back to the the official Minecraft Forum thread or CurseForge page. ### NOTES * The Actually Additions API can be excerpted for use in other projects, however it should not be modified. It can be redistributed with other mods (if it is getting used), however it should still be visible that it is a part of Actually Additions. Do not remove the copyright header from any of the API's files. From b4a64c1270be6bdaba50dd63ecc6a04d264faaa1 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 26 May 2016 13:10:14 +0200 Subject: [PATCH 183/322] Fixed a massive bug with tiles not syncing properly when re-entering unloaded chunks >_> --- .../mod/tile/TileEntityBase.java | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index eaf8f3d22..da328faed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -87,29 +87,28 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityLaserRelayEnergy.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); GameRegistry.registerTileEntity(TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist"); GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer"); + GameRegistry.registerTileEntity(TileEntityBookletStand.class, ModUtil.MOD_ID+":tileEntityBookletStand"); } @Override - public final void readFromNBT(NBTTagCompound compound){ + public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); - this.isRedstonePowered = compound.getBoolean("Redstone"); this.readSyncableNBT(compound, false); } @Nonnull @Override - public final NBTTagCompound writeToNBT(NBTTagCompound compound){ - NBTTagCompound newCompound = super.writeToNBT(compound); - newCompound.setBoolean("Redstone", this.isRedstonePowered); - this.writeSyncableNBT(newCompound, false); - return newCompound; + public NBTTagCompound writeToNBT(NBTTagCompound compound){ + compound = super.writeToNBT(compound); + this.writeSyncableNBT(compound, false); + return compound; } @Override - public final SPacketUpdateTileEntity getUpdatePacket(){ - NBTTagCompound compound = this.getSyncCompound(); + public SPacketUpdateTileEntity getUpdatePacket(){ + NBTTagCompound compound = this.getUpdateTag(); if(compound != null){ - return new SPacketUpdateTileEntity(this.pos, 3, compound); + return new SPacketUpdateTileEntity(this.pos, 0, compound); } else{ return null; @@ -117,7 +116,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } @Override - public final void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt){ + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt){ if(pkt != null){ this.receiveSyncCompound(pkt.getNbtCompound()); } @@ -132,26 +131,34 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.readSyncableNBT(compound, true); } - public NBTTagCompound getSyncCompound(){ - NBTTagCompound tag = new NBTTagCompound(); + @Nonnull + @Override + public NBTTagCompound getUpdateTag(){ + NBTTagCompound tag = super.getUpdateTag(); this.writeSyncableNBT(tag, true); return tag; } public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + if(!isForSync){ + compound.setBoolean("Redstone", this.isRedstonePowered); + } if(this instanceof IRedstoneToggle){ compound.setBoolean("IsPulseMode", ((IRedstoneToggle)this).isPulseMode()); } } public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + if(!isForSync){ + this.isRedstonePowered = compound.getBoolean("Redstone"); + } if(this instanceof IRedstoneToggle){ ((IRedstoneToggle)this).toggle(compound.getBoolean("IsPulseMode")); } } @Override - public final void update(){ + public void update(){ this.updateEntity(); } @@ -159,7 +166,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.ticksElapsed++; } - public final void setRedstonePowered(boolean powered){ + public void setRedstonePowered(boolean powered){ this.isRedstonePowered = powered; this.markDirty(); } @@ -168,7 +175,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ return player.getDistanceSq(this.getPos().getX()+0.5D, this.pos.getY()+0.5D, this.pos.getZ()+0.5D) <= 64 && !this.isInvalid() && this.worldObj.getTileEntity(this.pos) == this; } - protected final boolean sendUpdateWithInterval(){ + protected boolean sendUpdateWithInterval(){ if(this.ticksElapsed%ConfigIntValues.TILE_ENTITY_UPDATE_INTERVAL.getValue() == 0){ this.sendUpdate(); return true; @@ -178,9 +185,9 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } } - public final void sendUpdate(){ + public void sendUpdate(){ if(!this.worldObj.isRemote){ - NBTTagCompound compound = this.getSyncCompound(); + NBTTagCompound compound = this.getUpdateTag(); if(compound != null){ PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(compound, this.getPos()), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); } From 796944d2ab7d523fd655c4cac152269443c276fd Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 26 May 2016 13:11:43 +0200 Subject: [PATCH 184/322] Re-added booklet stand. Model and better bounding box to come. --- .../mod/blocks/BlockBookletStand.java | 135 ++++++ .../mod/blocks/InitBlocks.java | 3 + .../metalists/TheColoredLampColors.java | 2 +- .../mod/blocks/render/RenderSmileyCloud.java | 2 +- .../mod/booklet/GuiBookletStand.java | 75 +++ .../mod/booklet/InitBooklet.java | 1 + .../mod/crafting/BlockCrafting.java | 5 + .../mod/inventory/GuiHandler.java | 4 + .../mod/misc/special/SpecialRenderInit.java | 2 +- .../mod/network/PacketBookletStandButton.java | 94 ++++ .../mod/network/PacketHandler.java | 1 + .../mod/tile/TileEntityBookletStand.java | 41 ++ .../mod/tile/TileEntityLaserRelay.java | 7 +- .../blockstates/blockBookletStand.json | 17 + .../assets/actuallyadditions/lang/en_US.lang | 7 +- .../models/block/blockBookletStand.json | 459 ++++++++++++++++++ 16 files changed, 849 insertions(+), 6 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json create mode 100644 src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java new file mode 100644 index 000000000..aaa0902d4 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java @@ -0,0 +1,135 @@ +/* + * This file ("BlockBookletStand.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks; + +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; +import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.profiler.Profiler; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; + +@SuppressWarnings("deprecation") +public class BlockBookletStand extends BlockContainerBase implements IHudDisplay{ + + public BlockBookletStand(String name){ + super(Material.WOOD, name); + this.setHarvestLevel("axe", 0); + this.setHardness(1.0F); + this.setResistance(4.0F); + this.setSoundType(SoundType.WOOD); + } + + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, EnumFacing par6, float par7, float par8, float par9){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.BOOK_STAND.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); + return true; + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ + int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; + + if(rotation == 0){ + PosUtil.setMetadata(pos, world, 0, 2); + } + if(rotation == 1){ + PosUtil.setMetadata(pos, world, 3, 2); + } + if(rotation == 2){ + PosUtil.setMetadata(pos, world, 1, 2); + } + if(rotation == 3){ + PosUtil.setMetadata(pos, world, 2, 2); + } + + TileEntityBookletStand tile = (TileEntityBookletStand)world.getTileEntity(pos); + if(tile != null){ + if(tile.assignedPlayer == null){ + tile.assignedPlayer = player.getName(); + tile.markDirty(); + tile.sendUpdate(); + } + } + + super.onBlockPlacedBy(world, pos, state, player, stack); + } + + @Nonnull + @Override + public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + return new TileEntityBookletStand(); + } + + @Override + @SideOnly(Side.CLIENT) + public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ + TileEntity tile = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); + if(tile instanceof TileEntityBookletStand){ + EntrySet set = ((TileEntityBookletStand)tile).assignedEntry; + + String strg1; + String strg2; + if(set.entry == null){ + strg1 = "No entry saved! Save one if"; + strg2 = "you are the player who placed it!"; + } + else if(set.chapter == null){ + strg1 = set.entry.getLocalizedName(); + strg2 = "Page "+set.pageInIndex; + } + else{ + strg1 = set.chapter.getLocalizedName(); + strg2 = "Page "+set.page.getID(); + + AssetUtil.renderStackToGui(set.chapter.getDisplayItemStack() != null ? set.chapter.getDisplayItemStack() : new ItemStack(InitItems.itemBooklet), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2+10, 1F); + } + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg1, resolution.getScaledWidth()/2+25, resolution.getScaledHeight()/2+8, StringUtil.DECIMAL_COLOR_WHITE); + minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg2, resolution.getScaledWidth()/2+25, resolution.getScaledHeight()/2+18, StringUtil.DECIMAL_COLOR_WHITE); + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 6246eda72..28dbfdd40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -115,9 +115,12 @@ public class InitBlocks{ public static Block blockPillarQuartzStair; public static Block blockPillarQuartzSlab; + public static Block blockBookletStand; + public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockBookletStand = new BlockBookletStand("blockBookletStand"); blockItemViewer = new BlockItemViewer("blockItemViewer"); blockFireworkBox = new BlockFireworkBox("blockFireworkBox"); blockMiner = new BlockMiner("blockMiner"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java index 1635ea37d..c9b0821fc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java @@ -43,7 +43,7 @@ public enum TheColoredLampColors{ for(int i = 0; i < values().length; i++){ String aName = values()[i].name; if(aName != null){ - if(aName.toLowerCase(Locale.ROOT).equals(actualName.toLowerCase(Locale.ROOT))){ + if(aName.equalsIgnoreCase(actualName)){ return values()[i]; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 2ba524ac3..da67629aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -43,7 +43,7 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ for(String triggerName : cloud.getTriggerNames()){ if(triggerName != null && theCloud.name != null){ - if(triggerName.toLowerCase(Locale.ROOT).equals(theCloud.name.toLowerCase(Locale.ROOT))){ + if(triggerName.equalsIgnoreCase(theCloud.name)){ GlStateManager.pushMatrix(); switch(PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ case 1: diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java new file mode 100644 index 000000000..186621476 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java @@ -0,0 +1,75 @@ +/* + * This file ("GuiBookletStand.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.booklet; + +import de.ellpeck.actuallyadditions.mod.network.PacketBookletStandButton; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nonnull; + +@SideOnly(Side.CLIENT) +public class GuiBookletStand extends GuiBooklet{ + + private GuiButton buttonSetPage; + + private TileEntityBookletStand theStand; + + public GuiBookletStand(TileEntityBase theStand){ + super(null, false, false); + this.theStand = (TileEntityBookletStand)theStand; + } + + @Override + public void actionPerformed(GuiButton button){ + if(button == this.buttonSetPage){ + PacketHandler.theNetwork.sendToServer(new PacketBookletStandButton(this.theStand.getPos(), this.theStand.getWorld(), Minecraft.getMinecraft().thePlayer, this.currentEntrySet)); + } + super.actionPerformed(button); + } + + @SuppressWarnings("unchecked") + @Override + public void initGui(){ + super.initGui(); + + //Remove Bookmark Buttons + for(GuiButton bookmarkButton : this.bookmarkButtons){ + bookmarkButton.visible = false; + } + + this.buttonSetPage = new GuiButton(-100, this.guiLeft+this.xSize+10, this.guiTop+10, 100, 20, "Set Page"){ + @Override + public void drawButton(@Nonnull Minecraft mc, int x, int y){ + boolean unicodeBefore = mc.fontRendererObj.getUnicodeFlag(); + mc.fontRendererObj.setUnicodeFlag(false); + super.drawButton(mc, x, y); + mc.fontRendererObj.setUnicodeFlag(unicodeBefore); + } + }; + this.buttonList.add(this.buttonSetPage); + + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if(player != null && player.getName() != null){ + this.buttonSetPage.visible = player.getName().equalsIgnoreCase(this.theStand.assignedPlayer); + } + + //Open the pages the book was assigned + BookletUtils.openIndexEntry(this, this.theStand.assignedEntry.entry, this.theStand.assignedEntry.pageInIndex, true); + BookletUtils.openChapter(this, this.theStand.assignedEntry.chapter, this.theStand.assignedEntry.page); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 16e5a235e..80665ee9a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -70,6 +70,7 @@ public class InitBooklet{ //Miscellaneous new BookletChapter("reconstructorLenses", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.LENS.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLens).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeColorLens), new PageReconstructor(4, LensRecipeHandler.recipeExplosionLens), new PageReconstructor(5, LensRecipeHandler.recipeDamageLens), new PageReconstructor(6, LensRecipeHandler.recipeSoulSand).setNoText(), new PageReconstructor(7, LensRecipeHandler.recipeLeather).setNoText(), new PageReconstructor(8, LensRecipeHandler.recipeNetherWart).setNoText()).setImportant(); new BookletChapter("banners", ActuallyAdditionsAPI.entryMisc, new ItemStack(Items.BANNER, 1, 15), new PageTextOnly(1)); + new BookletChapter("bookStand", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBookletStand), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeBookStand).setNoText().setPageStacksWildcard()); new BookletChapter("miscDecorStuffsAndThings", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, LensRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeGreenWall).setNoText()); new BookletChapter("quartz", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal())).addTextReplacement("", OreGen.QUARTZ_MIN).addTextReplacement("", OreGen.QUARTZ_MAX), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())), new PageCrafting(3, BlockCrafting.recipeQuartzBlock).setNoText(), new PageCrafting(4, BlockCrafting.recipeQuartzPillar).setNoText(), new PageCrafting(5, BlockCrafting.recipeQuartzChiseled).setNoText()); new BookletChapter("cloud", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockSmileyCloud), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud).setNoText().setPageStacksWildcard()).setSpecial(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 635a7feae..1844454f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -85,9 +85,14 @@ public class BlockCrafting{ public static IRecipe recipeLaserRelayItem; public static IRecipe recipeLaserRelayItemWhitelist; public static IRecipe recipeItemInterface; + public static IRecipe recipeBookStand; public static void init(){ + //Book Stand + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitBlocks.blockBookletStand), new ItemStack(InitItems.itemBooklet), "plankWood")); + recipeBookStand = RecipeUtil.lastIRecipe(); + //Firework Box if(ConfigCrafting.FIREWORK_BOX.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockFireworkBox), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index 8b3bea59a..b0aa01a77 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; +import de.ellpeck.actuallyadditions.mod.booklet.GuiBookletStand; import de.ellpeck.actuallyadditions.mod.inventory.gui.*; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -155,6 +156,8 @@ public class GuiHandler implements IGuiHandler{ return new GuiRangedCollector(entityPlayer.inventory, tile, x, y, z, world); case MINER: return new GuiMiner(entityPlayer.inventory, tile); + case BOOK_STAND: + return new GuiBookletStand(tile); case LASER_RELAY_ITEM_WHITELIST: return new GuiLaserRelayItemWhitelist(entityPlayer.inventory, tile); default: @@ -190,6 +193,7 @@ public class GuiHandler implements IGuiHandler{ DIRECTIONAL_BREAKER, RANGED_COLLECTOR, MINER, + BOOK_STAND, LASER_RELAY_ITEM_WHITELIST; public final boolean checkTileEntity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index e6613e456..887e65bf3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -74,7 +74,7 @@ public class SpecialRenderInit{ //Does the player have one of the names from the list? String playerName = event.getEntityPlayer().getName(); if(entry.getKey() != null && playerName != null){ - if(entry.getKey().toLowerCase(Locale.ROOT).equals(playerName.toLowerCase(Locale.ROOT))){ + if(entry.getKey().equalsIgnoreCase(playerName)){ //Render the special Item/Block entry.getValue().render(event.getEntityPlayer(), event.getPartialRenderTick()); break; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java new file mode 100644 index 000000000..546c0e182 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java @@ -0,0 +1,94 @@ +/* + * This file ("PacketBookletStandButton.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.network; + +import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.api.internal.IEntrySet; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +public class PacketBookletStandButton implements IMessage{ + + private int worldID; + private int playerID; + + private NBTTagCompound entrySet; + private BlockPos tilePos; + + @SuppressWarnings("unused") + public PacketBookletStandButton(){ + + } + + public PacketBookletStandButton(BlockPos tilePos, World world, EntityPlayer player, IEntrySet set){ + this.tilePos = tilePos; + this.entrySet = set.writeToNBT(); + this.worldID = world.provider.getDimension(); + this.playerID = player.getEntityId(); + } + + @Override + public void fromBytes(ByteBuf buf){ + PacketBuffer buffer = new PacketBuffer(buf); + try{ + this.entrySet = buffer.readNBTTagCompoundFromBuffer(); + this.tilePos = buffer.readBlockPos(); + this.worldID = buffer.readInt(); + this.playerID = buffer.readInt(); + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to receive a TileEntity packet!", e); + } + } + + @Override + public void toBytes(ByteBuf buf){ + PacketBuffer buffer = new PacketBuffer(buf); + + buffer.writeNBTTagCompoundToBuffer(this.entrySet); + buffer.writeBlockPos(this.tilePos); + buffer.writeInt(this.worldID); + buffer.writeInt(this.playerID); + } + + public static class Handler implements IMessageHandler{ + + @Override + public IMessage onMessage(PacketBookletStandButton message, MessageContext ctx){ + World world = DimensionManager.getWorld(message.worldID); + TileEntity tile = world.getTileEntity(message.tilePos); + EntityPlayer player = (EntityPlayer)world.getEntityByID(message.playerID); + + if(player != null && tile instanceof TileEntityBookletStand){ + TileEntityBookletStand stand = (TileEntityBookletStand)tile; + if(player.getName() != null && player.getName().equalsIgnoreCase(stand.assignedPlayer)){ + stand.assignedEntry = EntrySet.readFromNBT(message.entrySet); + stand.markDirty(); + stand.sendUpdate(); + } + } + + return null; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 45bd82260..2c3a5fd5b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -30,5 +30,6 @@ public class PacketHandler{ theNetwork.registerMessage(PacketGuiString.Handler.class, PacketGuiString.class, 2, Side.SERVER); theNetwork.registerMessage(PacketParticle.Handler.class, PacketParticle.class, 3, Side.CLIENT); theNetwork.registerMessage(PacketUpdateTileEntity.Handler.class, PacketUpdateTileEntity.class, 4, Side.CLIENT); + theNetwork.registerMessage(PacketBookletStandButton.Handler.class, PacketBookletStandButton.class, 5, Side.SERVER); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java new file mode 100644 index 000000000..4605cd892 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java @@ -0,0 +1,41 @@ +/* + * This file ("TileEntityBookletStand.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; +import net.minecraft.nbt.NBTTagCompound; + +public class TileEntityBookletStand extends TileEntityBase{ + + public EntrySet assignedEntry = new EntrySet(null); + public String assignedPlayer; + + public TileEntityBookletStand(){ + super("bookletStand"); + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.writeSyncableNBT(compound, isForSync); + compound.setTag("SavedEntry", this.assignedEntry.writeToNBT()); + + if(this.assignedPlayer != null){ + compound.setString("Player", this.assignedPlayer); + } + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.readSyncableNBT(compound, isForSync); + this.assignedEntry = EntrySet.readFromNBT(compound.getCompoundTag("SavedEntry")); + this.assignedPlayer = compound.getString("Player"); + } +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index b5591f675..d83eccabb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -21,6 +21,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; + public abstract class TileEntityLaserRelay extends TileEntityBase{ public static final int MAX_DISTANCE = 15; @@ -53,9 +55,10 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ super.receiveSyncCompound(compound); } + @Nonnull @Override - public NBTTagCompound getSyncCompound(){ - NBTTagCompound compound = super.getSyncCompound(); + public NBTTagCompound getUpdateTag(){ + NBTTagCompound compound = super.getUpdateTag(); BlockPos thisPos = this.pos; ConcurrentSet connections = LaserRelayConnectionHandler.getInstance().getConnectionsFor(thisPos); diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json b/src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json new file mode 100644 index 000000000..fa2c48761 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json @@ -0,0 +1,17 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "actuallyadditions:blockBookletStand", + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}], + "meta": { + "0": { "y" : 180 }, + "1": { "y" : 0 }, + "2": { "y" : 90 }, + "3": { "y" : 270 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index b64e971e9..f9229f5b3 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -207,6 +207,7 @@ tile.actuallyadditions.blockLaserRelayItem.name=Item Laser Relay tile.actuallyadditions.blockLaserRelayItemWhitelist.name=Advanced Item Laser Relay tile.actuallyadditions.blockItemViewer.name=Item Interface tile.actuallyadditions.blockImpureIron.name=Impure Iron +tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual #ESD tile.actuallyadditions.blockInputter.name=ESD @@ -875,4 +876,8 @@ booklet.actuallyadditions.chapter.banners.name=Additional Banners booklet.actuallyadditions.chapter.banners.text.1=For special items in Actually Additions, there is also special Banner patterns. All of these just require the item next to the banner in the crafting grid with, optionally, a color. You can also combine them with a Shield like normal. The items that have a banner pattern are: The Actually Additions Manual The Phantom Connector The Leaf Blower (not the advanced version) The Drill (only the white one works due to the way banners work) booklet.actuallyadditions.chapter.lushCaves.name=Lush Caves -booklet.actuallyadditions.chapter.lushCaves.text.1=If you have ever done any Cave exploration, you will have probably noticed some caves that have trees and grass inside of them. These can be found at any height underground all over the world, and they can be very valuable when needing wood for torches and tools at some point. If you didn't ever see one before, look on the next page for a picture! \ No newline at end of file +booklet.actuallyadditions.chapter.lushCaves.text.1=If you have ever done any Cave exploration, you will have probably noticed some caves that have trees and grass inside of them. These can be found at any height underground all over the world, and they can be very valuable when needing wood for torches and tools at some point. If you didn't ever see one before, look on the next page for a picture! + +booklet.actuallyadditions.chapter.bookStand.name=Wall-Mount Manual +booklet.actuallyadditions.chapter.bookStand.text.1=The Manual Stand is a block that is supposed to mainly be used on Servers. You can, provided you are the person who placed it down, set a page in the GUI that will open when someone else accesses it by pressing the "Set Page"-button while being on the desired page. The Wall-Mount Manual does not save pages another player navigated to, meaing re-accessing the Manual will cause it to always end up on the page speficied by the placer. +booklet.actuallyadditions.chapter.bookStand.text.2=People were using this not to have to have a manual item on their hotbar. This is not supposed to be used for that, because the Actually Additions Manual has bookmarks and also keeps the page you were on before. This, however, does neither. This was also originally made for Better Than Minecon. But whatever. \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json b/src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json new file mode 100644 index 000000000..aac95ee54 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json @@ -0,0 +1,459 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "actuallyadditions:blocks/models/modelCoffeeMachine", + "coffeeMachine": "actuallyadditions:blocks/models/modelCoffeeMachine" + }, + "elements": [ + { + "from": [3,0,1], + "to": [13,1,15], + "faces": { + "up": { + "uv": [2.1052632,0.26315784,2.7368422,1.5263159], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [2.999999,0.6842098,5.631579,2.68421], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [4.105262,1.3684217,5.052636,2.6315799], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [2.9473686,0.68421054,6.4210534,1.5263159], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [0,1.3400855,6.8,2.6], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [4.2105265,0.84210527,4.5263147,1.5263158], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [3,1,1], + "to": [13,10,7], + "faces": { + "up": { + "uv": [0.0,0.0,10.0,6.0], + "texture": "missingtexture" + }, + "down": { + "uv": [0.0,0.0,10.0,6.0], + "texture": "missingtexture" + }, + "west": { + "uv": [1.3684201,0.47368407,4.105262,1.5263153], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [1.5789478,0.31578958,5.157894,2.8421037], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [2,0,6,3], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [2,0,4,2], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [3,9,1], + "to": [13,11,12], + "faces": { + "up": { + "uv": [9.094739,1.0421052,10.568425,2.094737], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [2.3157897,0.21052635,6.000002,2.9999995], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [8.2,2.6,11.2,3], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [7.6,2.6,9,3], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [7.2,2.6,9,3], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [8.6,2.6,10,3], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [4,11,1], + "to": [12,14,9], + "faces": { + "up": { + "uv": [1.6,3,3.2,4.6], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [0.0,0.0,8.0,8.0], + "texture": "missingtexture" + }, + "west": { + "uv": [10.315789,1,10.4,1.6842105], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [9.684211,1.4736842,10.736842,1.8947369], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [9.326308,1.1271291,10.957892,1.4631579], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [10.2,0.6,10.8,1.2], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [7,8,9.5], + "to": [9,9,11.5], + "faces": { + "up": { + "uv": [0.0,0.0,2.0,2.0], + "texture": "missingtexture" + }, + "down": { + "uv": [9.684211,1.2631578,10.526316,1.8947369], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [9.7263155,1.2736838,10.357892,1.4842103], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [9.7263155,1.0526314,10.357892,2.1052628], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [10.105263,0.84210527,10.526316,1.8947369], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [10.105263,1.0526316,10.526316,1.6842105], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [6,1,9], + "to": [10,2,13], + "faces": { + "up": { + "uv": [7.368421,3.5789473,8,4.2], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [0.0,0.0,4.0,4.0], + "texture": "missingtexture" + }, + "west": { + "uv": [6.947369,3.3684208,7.7894735,4.157895], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [7.3684196,3.2105274,7.999996,4], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [7.578948,3.5789473,8.210525,4.2105265], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [6.968419,3.210528,8.021048,4], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [6,2,8], + "to": [10,7,9], + "faces": { + "up": { + "uv": [7.105263,3.6315806,8.15789,4.2105265], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [7.38947,3.3789477,7.810521,4.1684194], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [7.368421,3.6315784,8,4], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [7.2105265,3.4210534,7.8,4], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [6.915793,3.221051,7.8,4], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [7.526315,3.421054,8,4], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [6,2,13], + "to": [10,7,14], + "faces": { + "up": { + "uv": [7.5789475,3.7894738,8,4], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [6.999999,3.6,7.631578,3.9684215], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [7.368421,3.5789473,8,4], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [7.7894735,3.368421,8,3.7894738], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [7.157894,3.4210515,7.8,4], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [7.2,3.8,8,4], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [5,2,9], + "to": [6,7,13], + "faces": { + "up": { + "uv": [7.2105265,3.157895,7.999999,3.9999993], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [6.7894745,3.578949,7.842106,4], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [6.7684236,3.789474,8.242098,4.000001], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [7.7368455,3.578947,8,4.2], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [7.526315,3.368423,8,4], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [7.5789504,3.3684218,8,4], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [10,2,9], + "to": [11,7,13], + "faces": { + "up": { + "uv": [7.1578946,3.5789473,7.7894735,4], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [7.368421,3.7894738,7.5789475,4], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [7.1578946,3.4210515,7.6,3.8], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [6.9789453,3.2210534,8.031565,4.0105267], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [7.3684235,3.421053,8.210532,3.9999993], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [7.421055,3.210527,7.999999,4], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [4,2,10], + "to": [5,3,12], + "faces": { + "up": { + "uv": [6.778949,3.1894736,7.4105287,3.821053], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [7.2105265,3.210527,7.7894735,4.1578965], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [6.9473686,3.5789473,7.5789475,4], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [0.0,0.0,2.0,1.0], + "texture": "missingtexture" + }, + "north": { + "uv": [7.0000014,3.4210515,7.8,4], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [7.3684244,3.3684216,7.8,4], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [4,5,10], + "to": [5,6,12], + "faces": { + "up": { + "uv": [7.5789456,3.7894752,8.210522,4.2105274], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [7.5789475,3.7894738,8,4], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [6.8947353,3.5789483,7.5263157,3.9999993], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [0.0,0.0,2.0,1.0], + "texture": "missingtexture" + }, + "north": { + "uv": [7.2105207,3.2105284,8.210525,4.2105293], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [7.5789475,3.7894752,8.210524,4.2105284], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [3,3,10], + "to": [4,5,12], + "faces": { + "up": { + "uv": [7.421055,3.4736857,8.000004,4.000002], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [7.368421,3.5789473,8,3.7894738], + "texture": "#coffeeMachine" + }, + "west": { + "uv": [7.5789475,3.5789473,8,3.7894738], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [7.4736843,3.4736855,8.2105255,4.2105255], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [6.9684157,3.178948,7.3894744,4.021053], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [6.978949,3.5999997,7.610526,4.0210524], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [6,10.2,10.8], + "to": [7,11.2,11.8], + "faces": { + "up": { + "uv": [10.315789,2.4,10.4,2.6], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [9.4,2.4,9.6,2.6], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + } + } + }, + { + "from": [9,10.2,10.8], + "to": [10,11.2,11.8], + "faces": { + "up": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + }, + "down": { + "uv": [0.0,0.0,1.0,1.0], + "texture": "missingtexture" + }, + "west": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + }, + "east": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + }, + "north": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + }, + "south": { + "uv": [9.4,2.2,9.8,2.6], + "texture": "#coffeeMachine" + } + } + } + ] +} \ No newline at end of file From c6b0ea9f98191ec6dde23c7b1c3e97391e347121 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 26 May 2016 14:59:48 +0200 Subject: [PATCH 185/322] Booklet stand model + bounding box --- .../mod/blocks/BlockBookletStand.java | 41 +- .../blockstates/blockBookletStand.json | 8 +- .../models/block/blockBookletStand.json | 450 +----------------- .../blocks/models/modelBookletStand.png | Bin 0 -> 575 bytes 4 files changed, 64 insertions(+), 435 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/models/modelBookletStand.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java index aaa0902d4..ea52adbb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java @@ -21,22 +21,24 @@ import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; +import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.profiler.Profiler; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -46,6 +48,13 @@ import javax.annotation.Nonnull; @SuppressWarnings("deprecation") public class BlockBookletStand extends BlockContainerBase implements IHudDisplay{ + private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); + + private static final AxisAlignedBB AABB_1 = new AxisAlignedBB(0, 3*0.0625, 0, 1, 14*0.0625, 0.0625); + private static final AxisAlignedBB AABB_2 = new AxisAlignedBB(0, 3*0.0625, 0, 0.0625, 14*0.0625, 1); + private static final AxisAlignedBB AABB_3 = new AxisAlignedBB(1-0.0625, 3*0.0625, 0, 1, 14*0.0625, 1); + private static final AxisAlignedBB AABB_4 = new AxisAlignedBB(1, 3*0.0625, 1-0.0625, 0, 14*0.0625, 1); + public BlockBookletStand(String name){ super(Material.WOOD, name); this.setHarvestLevel("axe", 0); @@ -54,6 +63,31 @@ public class BlockBookletStand extends BlockContainerBase implements IHudDisplay this.setSoundType(SoundType.WOOD); } + @SuppressWarnings("deprecation") + @Nonnull + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + int meta = this.getMetaFromState(state); + switch(meta){ + case 0: + return AABB_4; + case 1: + return AABB_1; + case 2: + return AABB_3; + case 3: + return AABB_2; + } + return super.getBoundingBox(state, source, pos); + } + + @SuppressWarnings("deprecation") + @Override + public boolean isFullCube(IBlockState state){ + return false; + } + + @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; @@ -132,4 +166,9 @@ public class BlockBookletStand extends BlockContainerBase implements IHudDisplay minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.YELLOW+""+TextFormatting.ITALIC+strg2, resolution.getScaledWidth()/2+25, resolution.getScaledHeight()/2+18, StringUtil.DECIMAL_COLOR_WHITE); } } + + @Override + protected PropertyInteger getMetaProperty(){ + return META; + } } diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json b/src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json index fa2c48761..23f14b719 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockBookletStand.json @@ -8,10 +8,10 @@ "normal": [{}], "inventory": [{}], "meta": { - "0": { "y" : 180 }, - "1": { "y" : 0 }, - "2": { "y" : 90 }, - "3": { "y" : 270 } + "0": { "y" : 270 }, + "1": { "y" : 90 }, + "2": { "y" : 180 }, + "3": { "y" : 0 } } } } \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json b/src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json index aac95ee54..276aec831 100644 --- a/src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json +++ b/src/main/resources/assets/actuallyadditions/models/block/blockBookletStand.json @@ -1,457 +1,47 @@ { "ambientocclusion": false, "textures": { - "particle": "actuallyadditions:blocks/models/modelCoffeeMachine", - "coffeeMachine": "actuallyadditions:blocks/models/modelCoffeeMachine" + "particle": "actuallyadditions:blocks/models/modelBookletStand", + "tex": "actuallyadditions:blocks/models/modelBookletStand" }, "elements": [ { - "from": [3,0,1], - "to": [13,1,15], + "from": [0.01,3,0], + "to": [0.01,14,16], "faces": { - "up": { - "uv": [2.1052632,0.26315784,2.7368422,1.5263159], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [2.999999,0.6842098,5.631579,2.68421], - "texture": "#coffeeMachine" - }, "west": { - "uv": [4.105262,1.3684217,5.052636,2.6315799], - "texture": "#coffeeMachine" + "uv": [9,0,13,2.5], + "texture": "#tex" }, "east": { - "uv": [2.9473686,0.68421054,6.4210534,1.5263159], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [0,1.3400855,6.8,2.6], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [4.2105265,0.84210527,4.5263147,1.5263158], - "texture": "#coffeeMachine" + "uv": [9,0,13,2.5], + "texture": "#tex" } } }, { - "from": [3,1,1], - "to": [13,10,7], + "from": [0.01,4,1], + "to": [1.01,13,15], "faces": { "up": { - "uv": [0.0,0.0,10.0,6.0], - "texture": "missingtexture" + "uv": [0.25,4.75,3.75,5], + "texture": "#tex" }, "down": { - "uv": [0.0,0.0,10.0,6.0], - "texture": "missingtexture" - }, - "west": { - "uv": [1.3684201,0.47368407,4.105262,1.5263153], - "texture": "#coffeeMachine" + "uv": [0.25,4.75,3.75,5], + "texture": "#tex" }, "east": { - "uv": [1.5789478,0.31578958,5.157894,2.8421037], - "texture": "#coffeeMachine" + "uv": [0.25,5,4,7], + "texture": "#tex" }, "north": { - "uv": [2,0,6,3], - "texture": "#coffeeMachine" + "uv": [0,5,0.25,7], + "texture": "#tex" }, "south": { - "uv": [2,0,4,2], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [3,9,1], - "to": [13,11,12], - "faces": { - "up": { - "uv": [9.094739,1.0421052,10.568425,2.094737], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [2.3157897,0.21052635,6.000002,2.9999995], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [8.2,2.6,11.2,3], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [7.6,2.6,9,3], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [7.2,2.6,9,3], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [8.6,2.6,10,3], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [4,11,1], - "to": [12,14,9], - "faces": { - "up": { - "uv": [1.6,3,3.2,4.6], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [0.0,0.0,8.0,8.0], - "texture": "missingtexture" - }, - "west": { - "uv": [10.315789,1,10.4,1.6842105], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [9.684211,1.4736842,10.736842,1.8947369], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [9.326308,1.1271291,10.957892,1.4631579], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [10.2,0.6,10.8,1.2], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [7,8,9.5], - "to": [9,9,11.5], - "faces": { - "up": { - "uv": [0.0,0.0,2.0,2.0], - "texture": "missingtexture" - }, - "down": { - "uv": [9.684211,1.2631578,10.526316,1.8947369], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [9.7263155,1.2736838,10.357892,1.4842103], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [9.7263155,1.0526314,10.357892,2.1052628], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [10.105263,0.84210527,10.526316,1.8947369], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [10.105263,1.0526316,10.526316,1.6842105], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [6,1,9], - "to": [10,2,13], - "faces": { - "up": { - "uv": [7.368421,3.5789473,8,4.2], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [0.0,0.0,4.0,4.0], - "texture": "missingtexture" - }, - "west": { - "uv": [6.947369,3.3684208,7.7894735,4.157895], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [7.3684196,3.2105274,7.999996,4], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [7.578948,3.5789473,8.210525,4.2105265], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [6.968419,3.210528,8.021048,4], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [6,2,8], - "to": [10,7,9], - "faces": { - "up": { - "uv": [7.105263,3.6315806,8.15789,4.2105265], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [7.38947,3.3789477,7.810521,4.1684194], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [7.368421,3.6315784,8,4], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [7.2105265,3.4210534,7.8,4], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [6.915793,3.221051,7.8,4], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [7.526315,3.421054,8,4], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [6,2,13], - "to": [10,7,14], - "faces": { - "up": { - "uv": [7.5789475,3.7894738,8,4], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [6.999999,3.6,7.631578,3.9684215], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [7.368421,3.5789473,8,4], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [7.7894735,3.368421,8,3.7894738], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [7.157894,3.4210515,7.8,4], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [7.2,3.8,8,4], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [5,2,9], - "to": [6,7,13], - "faces": { - "up": { - "uv": [7.2105265,3.157895,7.999999,3.9999993], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [6.7894745,3.578949,7.842106,4], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [6.7684236,3.789474,8.242098,4.000001], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [7.7368455,3.578947,8,4.2], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [7.526315,3.368423,8,4], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [7.5789504,3.3684218,8,4], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [10,2,9], - "to": [11,7,13], - "faces": { - "up": { - "uv": [7.1578946,3.5789473,7.7894735,4], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [7.368421,3.7894738,7.5789475,4], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [7.1578946,3.4210515,7.6,3.8], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [6.9789453,3.2210534,8.031565,4.0105267], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [7.3684235,3.421053,8.210532,3.9999993], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [7.421055,3.210527,7.999999,4], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [4,2,10], - "to": [5,3,12], - "faces": { - "up": { - "uv": [6.778949,3.1894736,7.4105287,3.821053], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [7.2105265,3.210527,7.7894735,4.1578965], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [6.9473686,3.5789473,7.5789475,4], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [0.0,0.0,2.0,1.0], - "texture": "missingtexture" - }, - "north": { - "uv": [7.0000014,3.4210515,7.8,4], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [7.3684244,3.3684216,7.8,4], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [4,5,10], - "to": [5,6,12], - "faces": { - "up": { - "uv": [7.5789456,3.7894752,8.210522,4.2105274], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [7.5789475,3.7894738,8,4], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [6.8947353,3.5789483,7.5263157,3.9999993], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [0.0,0.0,2.0,1.0], - "texture": "missingtexture" - }, - "north": { - "uv": [7.2105207,3.2105284,8.210525,4.2105293], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [7.5789475,3.7894752,8.210524,4.2105284], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [3,3,10], - "to": [4,5,12], - "faces": { - "up": { - "uv": [7.421055,3.4736857,8.000004,4.000002], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [7.368421,3.5789473,8,3.7894738], - "texture": "#coffeeMachine" - }, - "west": { - "uv": [7.5789475,3.5789473,8,3.7894738], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [7.4736843,3.4736855,8.2105255,4.2105255], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [6.9684157,3.178948,7.3894744,4.021053], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [6.978949,3.5999997,7.610526,4.0210524], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [6,10.2,10.8], - "to": [7,11.2,11.8], - "faces": { - "up": { - "uv": [10.315789,2.4,10.4,2.6], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [0.0,0.0,1.0,1.0], - "texture": "missingtexture" - }, - "west": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [9.4,2.4,9.6,2.6], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" - } - } - }, - { - "from": [9,10.2,10.8], - "to": [10,11.2,11.8], - "faces": { - "up": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" - }, - "down": { - "uv": [0.0,0.0,1.0,1.0], - "texture": "missingtexture" - }, - "west": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" - }, - "east": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" - }, - "north": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" - }, - "south": { - "uv": [9.4,2.2,9.8,2.6], - "texture": "#coffeeMachine" + "uv": [0,5,0.25,7], + "texture": "#tex" } } } diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelBookletStand.png b/src/main/resources/assets/actuallyadditions/textures/blocks/models/modelBookletStand.png new file mode 100644 index 0000000000000000000000000000000000000000..822ab5dfa050ad360b0876641c8626c42ba5f36d GIT binary patch literal 575 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enkiEpy*OmP~w}g-)(}qu;uYf`lC9V-A!TD(= z<%vb93~dIoxCe|nPd1MQjX>Eakt5%+fT*}x+PJgvn`7_1(+2+CwM z3ahW1^Rj_YBi-85TJhTpR@Z4}*0b+gsJ)+EnH;_8>-L*^AOHTe%2_$b$07_Mos z?`eB!eAi==*<$tp-t{M{y)LD#;$t|O?Rk9yx0TXW_6DXrRZeTepLX;9hv~lEUbc05 z!S+YP_y0-L<(ANom%l9DyieNW(EIt3pSNv1!8d#AF71b&!gKtV zKa@K8d7EeNms^G2#`PBb= z+e7gMb%|>Ntn_~#- Date: Thu, 26 May 2016 16:34:12 +0200 Subject: [PATCH 186/322] r35! --- build.gradle | 2 +- update/changelog.md | 6 ++++++ update/updateVersions.properties | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f24aa8b62..fe799456b 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' //I'm doing this because people made me do it. Even though it never worked properly when I tried it. Sigh. apply plugin: 'idea' -version = "1.9.4-r34" +version = "1.9.4-r35" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index dd3f09b1d..e15e20596 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,9 @@ +# 1.9.4-r35 +* Added lush caves that spawn randomly in the overworld. Turn them off or change their spawn rate in the config if you don't like them. +* Changed some world data mechanics. Might break some Laser Relay Networks. Sorry about that, just reconnect them. +* Fixed a massive bug with TileEntities not syncing properly when re-entering unloaded chunks +* Re-added booklet stand. Is now a thing on the wall. But works the same. + # 1.9.4-r34 ### MINECRAFT 1.9.4!! * Made special drops dependent on the looting level you have diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 776fb3ed2..dd497df40 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=34 \ No newline at end of file +1.9.4=35 \ No newline at end of file From 16d9b95b5acf24f6971aad486515336f1963ed54 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 26 May 2016 22:49:47 +0200 Subject: [PATCH 187/322] Added a config option to print all of the booklet text to file on startup. For debug purposes. And because it's cool. --- .../mod/config/values/ConfigBoolValues.java | 4 +- .../mod/proxy/ClientProxy.java | 47 ++++++++++++++----- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 330b6d57a..926dddedc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -47,7 +47,9 @@ public enum ConfigBoolValues{ ENABLE_SEASONAL("Seasonal Mode", ConfigCategories.OTHER, true, "If Seasonal Mode is enabled"), DUNGEON_LOOT("Dungeon Loot", ConfigCategories.OTHER, true, "Should Actually Additions Loot spawn in Dungeons"), - GEN_LUSH_CAVES("Generate Lush Caves", ConfigCategories.WORLD_GEN, true, "Should caves with trees and grass randomly generate underground"); + GEN_LUSH_CAVES("Generate Lush Caves", ConfigCategories.WORLD_GEN, true, "Should caves with trees and grass randomly generate underground"), + + BOOKLET_TEXT_TO_FILE("Booklet Text to File", ConfigCategories.OTHER, false, "Should the entire text of the booklet be put into a new file in the Minecraft Folder on startup or resource reload. This is for debug purposes only and shouldn't really ever be needed."); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index c344aa0d6..8bb958612 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -45,7 +45,9 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import javax.annotation.Nonnull; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.util.*; public class ClientProxy implements IProxy{ @@ -56,26 +58,49 @@ public class ClientProxy implements IProxy{ public static int bookletWordCount; public static int bookletCharCount; - private static final List colorProdividingItemsForRegistering = new ArrayList(); - private static final Map modelLocationsForRegistering = new HashMap(); + private static final List COLOR_PRODIVIDING_ITEMS_FOR_REGISTERING = new ArrayList(); + private static final Map MODEL_LOCATIONS_FOR_REGISTERING = new HashMap(); private static void countBookletWords(){ bookletWordCount = 0; bookletCharCount = 0; + String bookletText = ""; for(IBookletEntry entry : ActuallyAdditionsAPI.BOOKLET_ENTRIES){ + bookletWordCount += entry.getLocalizedName().split(" ").length; + bookletCharCount += entry.getLocalizedName().length(); + bookletText+=entry.getLocalizedName()+"\n\n"; + for(IBookletChapter chapter : entry.getChapters()){ + bookletWordCount += chapter.getLocalizedName().split(" ").length; + bookletCharCount += chapter.getLocalizedName().length(); + bookletText+=chapter.getLocalizedName()+"\n"; + for(BookletPage page : chapter.getPages()){ if(page.getText() != null){ bookletWordCount += page.getText().split(" ").length; bookletCharCount += page.getText().length(); + bookletText +=page.getText()+"\n"; } } - bookletWordCount += chapter.getLocalizedName().split(" ").length; - bookletCharCount += chapter.getLocalizedName().length(); + bookletText+="\n"; + + } + bookletText+="\n"; + } + + if(ConfigBoolValues.BOOKLET_TEXT_TO_FILE.isEnabled()){ + File file = new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"booklettext.txt"); + try{ + file.createNewFile(); + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + writer.write(bookletText); + writer.close(); + ModUtil.LOGGER.info("Wrote booklet text to file!"); + } + catch(Exception e){ + ModUtil.LOGGER.error("Couldn't write booklet text to file!", e); } - bookletWordCount += entry.getLocalizedName().split(" ").length; - bookletCharCount += entry.getLocalizedName().length(); } } @@ -95,7 +120,7 @@ public class ClientProxy implements IProxy{ PersistentClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"data.dat")); - for(Map.Entry entry : modelLocationsForRegistering.entrySet()){ + for(Map.Entry entry : MODEL_LOCATIONS_FOR_REGISTERING.entrySet()){ ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), entry.getValue()); } @@ -138,7 +163,7 @@ public class ClientProxy implements IProxy{ //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png")); - for(Item item : colorProdividingItemsForRegistering){ + for(Item item : COLOR_PRODIVIDING_ITEMS_FOR_REGISTERING){ if(item instanceof IColorProvidingItem){ Minecraft.getMinecraft().getItemColors().registerItemColorHandler(((IColorProvidingItem)item).getColor(), item); } @@ -150,17 +175,15 @@ public class ClientProxy implements IProxy{ ModUtil.LOGGER.info("PostInitializing ClientProxy..."); SpecialRenderInit.init(); - - countBookletWords(); } @Override public void addRenderRegister(ItemStack stack, ModelResourceLocation location){ - modelLocationsForRegistering.put(stack, location); + MODEL_LOCATIONS_FOR_REGISTERING.put(stack, location); } @Override public void addColoredItem(Item item){ - colorProdividingItemsForRegistering.add(item); + COLOR_PRODIVIDING_ITEMS_FOR_REGISTERING.add(item); } } From 9e50818fcaa62414619c1463f23e0be2fef4e2d1 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 26 May 2016 22:53:11 +0200 Subject: [PATCH 188/322] Remove formatting codes of the text output --- .../de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 8bb958612..822d4774d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -37,6 +37,7 @@ import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fml.client.registry.ClientRegistry; @@ -94,7 +95,7 @@ public class ClientProxy implements IProxy{ try{ file.createNewFile(); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); - writer.write(bookletText); + writer.write(TextFormatting.getTextWithoutFormattingCodes(bookletText)); writer.close(); ModUtil.LOGGER.info("Wrote booklet text to file!"); } From f2ee1b94147884323701dbf2fb057a7f595cdd60 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 26 May 2016 23:05:08 +0200 Subject: [PATCH 189/322] Made booklet words and characters not be more than they should be because everything was being done twice --- .../mod/proxy/ClientProxy.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 822d4774d..68e491fd6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -18,6 +18,7 @@ import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; +import de.ellpeck.actuallyadditions.mod.booklet.InitBooklet; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; @@ -68,26 +69,28 @@ public class ClientProxy implements IProxy{ String bookletText = ""; for(IBookletEntry entry : ActuallyAdditionsAPI.BOOKLET_ENTRIES){ - bookletWordCount += entry.getLocalizedName().split(" ").length; - bookletCharCount += entry.getLocalizedName().length(); - bookletText+=entry.getLocalizedName()+"\n\n"; + if(entry != ActuallyAdditionsAPI.allAndSearch){ + bookletWordCount += entry.getLocalizedName().split(" ").length; + bookletCharCount += entry.getLocalizedName().length(); + bookletText += entry.getLocalizedName()+"\n\n"; - for(IBookletChapter chapter : entry.getChapters()){ - bookletWordCount += chapter.getLocalizedName().split(" ").length; - bookletCharCount += chapter.getLocalizedName().length(); - bookletText+=chapter.getLocalizedName()+"\n"; + for(IBookletChapter chapter : entry.getChapters()){ + bookletWordCount += chapter.getLocalizedName().split(" ").length; + bookletCharCount += chapter.getLocalizedName().length(); + bookletText += chapter.getLocalizedName()+"\n"; - for(BookletPage page : chapter.getPages()){ - if(page.getText() != null){ - bookletWordCount += page.getText().split(" ").length; - bookletCharCount += page.getText().length(); - bookletText +=page.getText()+"\n"; + for(BookletPage page : chapter.getPages()){ + if(page.getText() != null){ + bookletWordCount += page.getText().split(" ").length; + bookletCharCount += page.getText().length(); + bookletText += page.getText()+"\n"; + } } - } - bookletText+="\n"; + bookletText += "\n"; + } + bookletText += "\n"; } - bookletText+="\n"; } if(ConfigBoolValues.BOOKLET_TEXT_TO_FILE.isEnabled()){ From bbebca268ebf364b968a9a0de32636cc6884e010 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 27 May 2016 00:36:54 +0200 Subject: [PATCH 190/322] A change to the license --- LICENSE.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index deb5f57b7..e7f9a32bd 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -15,7 +15,8 @@ Everything that is not listed below applies to the above. * Redistribute the mod. This does not apply, however, when it comes to pre-packaged modpacks. ### YOU HAVE TO -* Always credit me in some way. +* When modifying or using code, always explicitly credit Ellpeck as the creator. +* When making a review/spotlight containing the mod or using it in a modpack, always make clear that Actually Additions is used. * When it comes to the code, always link back to the official repository. * When it comes to the mod, always link back to the the official Minecraft Forum thread or CurseForge page. From 32b2de21e01059817d3a12eb5208b1d449cb365b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 27 May 2016 01:32:29 +0200 Subject: [PATCH 191/322] Some more changes to the license --- LICENSE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index e7f9a32bd..8714aaf52 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -6,12 +6,12 @@ Everything that is not listed below applies to the above. ### YOU MAY * Fork and modify the code. * Submit pull requests. -* Copy (SMALL!) parts of the code for other projects. +* Copy small parts of code for other projects. * Make a review/spotlight of the mod or use it in a modpack. * Make Let's Play (and similar) videos containing the mod. ### YOU CAN NOT -* Copy entire classes, methods or other big parts of code or claim you made them. +* Copy entire classes, methods or features or claim you made them. * Redistribute the mod. This does not apply, however, when it comes to pre-packaged modpacks. ### YOU HAVE TO From da0f071d58f8facc9730416e2f6cf8bbee65fa76 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 27 May 2016 18:54:17 +0200 Subject: [PATCH 192/322] Death tracking part 1 --- .../mod/booklet/GuiBooklet.java | 10 +- .../mod/event/EntityLivingEvent.java | 82 ---------- .../mod/event/EntityLivingEvents.java | 151 ++++++++++++++++++ .../mod/event/InitEvents.java | 3 +- .../mod/event/LivingDropEvent.java | 53 ------ .../mod/event/PlayerObtainEvents.java | 4 +- .../mod/inventory/ContainerDrill.java | 3 +- .../mod/items/ItemLaserWrench.java | 7 +- .../mod/items/ItemPhantomConnector.java | 7 +- .../mod/misc/DamageSources.java | 3 +- .../actuallyadditions/mod/misc/WorldData.java | 14 +- .../mod/proxy/ClientProxy.java | 5 +- .../mod/tile/TileEntityInventoryBase.java | 3 +- .../TileEntityLaserRelayItemWhitelist.java | 7 +- ...ntClientData.java => ExtraClientData.java} | 2 +- ...tServerData.java => PlayerServerData.java} | 2 +- .../assets/actuallyadditions/lang/en_US.lang | 1 + 17 files changed, 189 insertions(+), 168 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java rename src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/{PersistentClientData.java => ExtraClientData.java} (99%) rename src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/{PersistentServerData.java => PlayerServerData.java} (98%) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 43f922449..217305ddb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -27,7 +27,7 @@ import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; +import de.ellpeck.actuallyadditions.mod.util.playerdata.ExtraClientData; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; @@ -353,14 +353,14 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ if(ItemBooklet.forcedEntry == null){ //Open last entry or introductory entry - if(this.tryOpenMainPage && !PersistentClientData.getBoolean("BookAlreadyOpened")){ + if(this.tryOpenMainPage && !ExtraClientData.getBoolean("BookAlreadyOpened")){ BookletUtils.openIndexEntry(this, InitBooklet.chapterIntro.entry, 1, true); BookletUtils.openChapter(this, InitBooklet.chapterIntro, null); - PersistentClientData.setBoolean("BookAlreadyOpened", true); + ExtraClientData.setBoolean("BookAlreadyOpened", true); } else{ - PersistentClientData.openLastBookPage(this); + ExtraClientData.openLastBookPage(this); } } else{ @@ -410,7 +410,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void onGuiClosed(){ if(this.saveOnClose){ - PersistentClientData.saveBookPage(this); + ExtraClientData.saveBookPage(this); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java deleted file mode 100644 index c15e0e0f8..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvent.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This file ("EntityLivingEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; -import de.ellpeck.actuallyadditions.mod.util.Util; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.passive.EntityOcelot; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -import java.util.UUID; - -public class EntityLivingEvent{ - - @SubscribeEvent - public void livingUpdateEvent(LivingUpdateEvent event){ - //Ocelots dropping Hair Balls - if(event.getEntityLiving() != null && event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote){ - if((event.getEntityLiving() instanceof EntityOcelot && ((EntityOcelot)event.getEntityLiving()).isTamed()) || (event.getEntityLiving() instanceof EntityPlayer && event.getEntityLiving().getUniqueID().equals(/*KittyVanCat*/ UUID.fromString("681d4e20-10ef-40c9-a0a5-ba2f1995ef44")))){ - if(ConfigBoolValues.DO_CAT_DROPS.isEnabled()){ - if(Util.RANDOM.nextInt(5000)+1 == 1){ - EntityItem item = new EntityItem(event.getEntityLiving().worldObj, event.getEntityLiving().posX+0.5, event.getEntityLiving().posY+0.5, event.getEntityLiving().posZ+0.5, new ItemStack(InitItems.itemHairyBall)); - event.getEntityLiving().worldObj.spawnEntityInWorld(item); - } - } - } - } - - //Wings allowing Flight - this.doWingStuff(event); - } - - /** - * Makes players be able to fly if they have Wings Of The Bats equipped - * (Partially excerpted from Botania's Wing System by Vazkii (as I had fiddled around with the system and couldn't make it work) with permission, thanks!) - */ - private void doWingStuff(LivingUpdateEvent event){ - if(event.getEntityLiving() instanceof EntityPlayer){ - EntityPlayer player = (EntityPlayer)event.getEntityLiving(); - boolean wingsEquipped = ItemWingsOfTheBats.getWingItem(player) != null; - - //If Player isn't (really) winged - if(!ItemWingsOfTheBats.isPlayerWinged(player)){ - if(wingsEquipped){ - //Make the Player actually winged - ItemWingsOfTheBats.addWingsToPlayer(player); - } - } - //If Player is (or should be) winged - else{ - if(wingsEquipped){ - //Allow the Player to fly when he has Wings equipped - player.capabilities.allowFlying = true; - } - else{ - //Make the Player not winged - ItemWingsOfTheBats.removeWingsFromPlayer(player); - //Reset Player's Values - if(!player.capabilities.isCreativeMode){ - player.capabilities.allowFlying = false; - player.capabilities.isFlying = false; - //Enables Fall Damage again (Automatically gets disabled for some reason) - player.capabilities.disableDamage = false; - } - } - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java new file mode 100644 index 000000000..f24326d96 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -0,0 +1,151 @@ +/* + * This file ("EntityLivingEvent.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.event; + +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntityOcelot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.util.UUID; + +public class EntityLivingEvents{ + + @SubscribeEvent + public void livingUpdateEvent(LivingUpdateEvent event){ + //Ocelots dropping Hair Balls + if(event.getEntityLiving() != null){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote){ + if((event.getEntityLiving() instanceof EntityOcelot && ((EntityOcelot)event.getEntityLiving()).isTamed()) || (event.getEntityLiving() instanceof EntityPlayer && event.getEntityLiving().getUniqueID().equals(/*KittyVanCat*/ UUID.fromString("681d4e20-10ef-40c9-a0a5-ba2f1995ef44")))){ + if(ConfigBoolValues.DO_CAT_DROPS.isEnabled()){ + if(Util.RANDOM.nextInt(5000)+1 == 1){ + EntityItem item = new EntityItem(event.getEntityLiving().worldObj, event.getEntityLiving().posX+0.5, event.getEntityLiving().posY+0.5, event.getEntityLiving().posZ+0.5, new ItemStack(InitItems.itemHairyBall)); + event.getEntityLiving().worldObj.spawnEntityInWorld(item); + } + } + } + } + + //Wings allowing Flight + this.doWingStuff(event.getEntityLiving()); + } + } + + @SubscribeEvent + public void livingDeathEvent(LivingDeathEvent event){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)event.getEntityLiving(); + NBTTagCompound data = PlayerServerData.getDataFromPlayer(player); + + NBTTagList deaths = data.getTagList("Deaths", 10); + while(deaths.tagCount() >= 5){ + deaths.removeTag(0); + } + + NBTTagCompound death = new NBTTagCompound(); + death.setDouble("X", player.posX); + death.setDouble("Y", player.posY); + death.setDouble("Z", player.posZ); + deaths.appendTag(death); + + data.setTag("Deaths", deaths); + + player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); + WorldData.makeDirty(); + } + } + + @SubscribeEvent + public void onEntityDropEvent(LivingDropsEvent event){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ + //Drop Solidified XP + if(event.getEntityLiving() instanceof EntityCreature){ + if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); + } + } + + //Drop Cobwebs from Spiders + if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.getEntityLiving() instanceof EntitySpider){ + if(Util.RANDOM.nextInt(20) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); + } + } + + //Drop Wings from Bats + if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat){ + if(Util.RANDOM.nextInt(15) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2+event.getLootingLevel())+1, TheMiscItems.BAT_WING.ordinal()), 0); + } + } + } + } + + /** + * Makes players be able to fly if they have Wings Of The Bats equipped + * (Partially excerpted from Botania's Wing System by Vazkii (as I had fiddled around with the system and couldn't make it work) with permission, thanks!) + */ + private void doWingStuff(EntityLivingBase living){ + if(living instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)living; + boolean wingsEquipped = ItemWingsOfTheBats.getWingItem(player) != null; + + //If Player isn't (really) winged + if(!ItemWingsOfTheBats.isPlayerWinged(player)){ + if(wingsEquipped){ + //Make the Player actually winged + ItemWingsOfTheBats.addWingsToPlayer(player); + } + } + //If Player is (or should be) winged + else{ + if(wingsEquipped){ + //Allow the Player to fly when he has Wings equipped + player.capabilities.allowFlying = true; + } + else{ + //Make the Player not winged + ItemWingsOfTheBats.removeWingsFromPlayer(player); + //Reset Player's Values + if(!player.capabilities.isCreativeMode){ + player.capabilities.allowFlying = false; + player.capabilities.isFlying = false; + //Enables Fall Damage again (Automatically gets disabled for some reason) + player.capabilities.disableDamage = false; + } + } + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java index 72050a4e1..b605b6700 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java @@ -24,8 +24,7 @@ public class InitEvents{ ModUtil.LOGGER.info("Initializing Events..."); Util.registerEvent(new PlayerObtainEvents()); - Util.registerEvent(new LivingDropEvent()); - Util.registerEvent(new EntityLivingEvent()); + Util.registerEvent(new EntityLivingEvents()); Util.registerEvent(new LogoutEvent()); Util.registerEvent(new WorldLoadingEvents()); Util.registerEvent(new BreakEvent()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java deleted file mode 100644 index a6168f2b8..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LivingDropEvent.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file ("LivingDropEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import de.ellpeck.actuallyadditions.mod.util.Util; -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.entity.passive.EntityBat; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.event.entity.living.LivingDropsEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -public class LivingDropEvent{ - - @SubscribeEvent - public void onEntityDropEvent(LivingDropsEvent event){ - if(event.getSource().getEntity() instanceof EntityPlayer){ - //Drop Solidified XP - if(event.getEntityLiving() instanceof EntityCreature){ - if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ - event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); - } - } - - //Drop Cobwebs from Spiders - if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.getEntityLiving() instanceof EntitySpider){ - if(Util.RANDOM.nextInt(20) <= event.getLootingLevel()*2){ - event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); - } - } - - //Drop Wings from Bats - if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat){ - if(Util.RANDOM.nextInt(15) <= event.getLootingLevel()*2){ - event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2+event.getLootingLevel())+1, TheMiscItems.BAT_WING.ordinal()), 0); - } - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 3bb1efb61..f6fc2871f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -16,7 +16,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.misc.WorldData; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentServerData; +import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -49,7 +49,7 @@ public class PlayerObtainEvents{ String name = event.crafting.getItem().getRegistryName().toString(); if(name != null && name.toLowerCase(Locale.ROOT).contains(ModUtil.MOD_ID)){ - NBTTagCompound compound = PersistentServerData.getDataFromPlayer(event.player); + NBTTagCompound compound = PlayerServerData.getDataFromPlayer(event.player); if(compound != null && !compound.getBoolean("BookGottenAlready")){ compound.setBoolean("BookGottenAlready", true); WorldData.makeDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index 64c38e872..1304dab0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -25,6 +25,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import javax.annotation.Nonnull; @@ -265,7 +266,7 @@ public class ContainerDrill extends Container{ @Nonnull @Override public ITextComponent getDisplayName(){ - return new TextComponentString(StringUtil.localize(this.getName())); + return new TextComponentTranslation(this.getName()); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index f69f7973c..8044a357d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -25,6 +25,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -48,7 +49,7 @@ public class ItemLaserWrench extends ItemBase{ if(tile instanceof TileEntityLaserRelay){ if(ItemPhantomConnector.getStoredPosition(stack) == null){ ItemPhantomConnector.storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.stored.desc"))); + player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.stored.desc")); } else{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); @@ -60,10 +61,10 @@ public class ItemLaserWrench extends ItemBase{ ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.connected.desc"))); + player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.connected.desc")); } else{ - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".laser.cantConnect.desc"))); + player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.cantConnect.desc")); ItemPhantomConnector.clearStorage(stack); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 46082e8fd..487dcf517 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -26,6 +26,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; @@ -96,7 +97,7 @@ public class ItemPhantomConnector extends ItemBase{ ((TileEntityBase)tile).sendUpdate(); } clearStorage(stack); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.connected.desc"))); + player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".phantom.connected.desc")); return EnumActionResult.SUCCESS; } return EnumActionResult.FAIL; @@ -104,7 +105,7 @@ public class ItemPhantomConnector extends ItemBase{ } //Storing Connections storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world); - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.stored.desc"))); + player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".phantom.stored.desc")); } return EnumActionResult.SUCCESS; } @@ -117,7 +118,7 @@ public class ItemPhantomConnector extends ItemBase{ if(tile instanceof IPhantomTile){ ((IPhantomTile)tile).setBoundPosition(null); } - player.addChatComponentMessage(new TextComponentString(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".phantom.unbound.desc"))); + player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".phantom.unbound.desc")); return false; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index a3bfe983c..076da6eaa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -17,6 +17,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.DamageSource; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import javax.annotation.Nonnull; @@ -35,6 +36,6 @@ public class DamageSources extends DamageSource{ @Override public ITextComponent getDeathMessage(EntityLivingBase entity){ String locTag = "death."+ModUtil.MOD_ID+"."+this.damageType+"."+(Util.RANDOM.nextInt(this.messageCount)+1); - return new TextComponentString(StringUtil.localizeFormatted(locTag, entity.getName())); + return new TextComponentTranslation(String.format(locTag, entity.getName())); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index 1f210a75f..f188da725 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.misc; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentServerData; +import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.server.MinecraftServer; @@ -65,9 +65,9 @@ public class WorldData extends WorldSavedData{ ModUtil.LOGGER.info("Clearing leftover Laser Relay Connection Data from other worlds!"); LaserRelayConnectionHandler.getInstance().networks.clear(); } - if(!PersistentServerData.playerSaveData.isEmpty()){ + if(!PlayerServerData.playerSaveData.isEmpty()){ ModUtil.LOGGER.info("Clearing leftover Persistent Server Data from other worlds!"); - PersistentServerData.playerSaveData.clear(); + PlayerServerData.playerSaveData.clear(); } } @@ -83,8 +83,8 @@ public class WorldData extends WorldSavedData{ //Player Data NBTTagList playerList = compound.getTagList("PlayerData", 10); for(int i = 0; i < playerList.tagCount(); i++){ - PersistentServerData.PlayerSave aSave = PersistentServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); - PersistentServerData.playerSaveData.add(aSave); + PlayerServerData.PlayerSave aSave = PlayerServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); + PlayerServerData.playerSaveData.add(aSave); } } @@ -100,8 +100,8 @@ public class WorldData extends WorldSavedData{ //Player Data NBTTagList playerList = new NBTTagList(); - for(int i = 0; i < PersistentServerData.playerSaveData.size(); i++){ - PersistentServerData.PlayerSave theSave = PersistentServerData.playerSaveData.get(i); + for(int i = 0; i < PlayerServerData.playerSaveData.size(); i++){ + PlayerServerData.PlayerSave theSave = PlayerServerData.playerSaveData.get(i); playerList.appendTag(theSave.toNBT()); } compound.setTag("PlayerData", playerList); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 68e491fd6..ffd5df5d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -18,7 +18,6 @@ import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; -import de.ellpeck.actuallyadditions.mod.booklet.InitBooklet; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; @@ -29,7 +28,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PersistentClientData; +import de.ellpeck.actuallyadditions.mod.util.playerdata.ExtraClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; @@ -122,7 +121,7 @@ public class ClientProxy implements IProxy{ ModUtil.LOGGER.warn("You have turned Seasonal Mode off. Therefore, you are evil."); } - PersistentClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"data.dat")); + ExtraClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"data.dat")); for(Map.Entry entry : MODEL_LOCATIONS_FOR_REGISTERING.entrySet()){ ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), entry.getValue()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index a0dd6b7e0..1f2c8190d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -19,6 +19,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.wrapper.SidedInvWrapper; @@ -217,7 +218,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Nonnull @Override public ITextComponent getDisplayName(){ - return new TextComponentString(StringUtil.localize(this.getName())); + return new TextComponentTranslation(this.getName()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 595fa942e..ecdd6b98f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -19,6 +19,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; @@ -38,9 +39,9 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem this.filterInventory = new IInventory(){ - private de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist tile; + private TileEntityLaserRelayItemWhitelist tile; - private IInventory setTile(de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist tile){ + private IInventory setTile(TileEntityLaserRelayItemWhitelist tile){ this.tile = tile; return this; } @@ -153,7 +154,7 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem @Nonnull @Override public ITextComponent getDisplayName(){ - return new TextComponentString(StringUtil.localize(this.getName())); + return new TextComponentTranslation(this.getName()); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java similarity index 99% rename from src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java index 66de9c155..a21aed15d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java @@ -27,7 +27,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; @SideOnly(Side.CLIENT) -public class PersistentClientData{ +public class ExtraClientData{ private static File theFile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PlayerServerData.java similarity index 98% rename from src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PlayerServerData.java index 06e65668e..e862aa28b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PersistentServerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PlayerServerData.java @@ -16,7 +16,7 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; import java.util.UUID; -public class PersistentServerData{ +public class PlayerServerData{ public static final ArrayList playerSaveData = new ArrayList(); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index f9229f5b3..6b5fe4d3c 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -547,6 +547,7 @@ info.actuallyadditions.noLens=No Lens info.actuallyadditions.booklet.manualName.1=Actually Additions info.actuallyadditions.booklet.manualName.2=Manual info.actuallyadditions.booklet.edition=Edition +info.actuallyadditions.deathRecorded=Your death has been recorded. Use a Death Tracker to find the death location! #Container Names container.actuallyadditions.inputter.name=ESD From af67fb87cce17b2f9ff1489a11acbe3ae298dbd5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 29 May 2016 22:11:18 +0200 Subject: [PATCH 193/322] Added view online button to booklet --- .../mod/booklet/BookletUtils.java | 4 ++++ .../mod/booklet/GuiBooklet.java | 16 ++++++++++++++-- .../textures/gui/booklet/guiBooklet.png | Bin 18640 -> 18756 bytes 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 93c7d33f9..00a8d8af2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -266,6 +266,8 @@ public class BookletUtils{ booklet.buttonForward.visible = booklet.currentEntrySet.getPageInIndex() < booklet.indexPageAmount; booklet.buttonBackward.visible = booklet.currentEntrySet.getPageInIndex() > 1; + booklet.buttonViewOnline.visible = false; + for(int i = 0; i < booklet.chapterButtons.length; i++){ IndexButton button = (IndexButton)booklet.chapterButtons[i]; if(entry == null){ @@ -335,6 +337,8 @@ public class BookletUtils{ booklet.buttonBackward.visible = getPrevPage(chapter, booklet.currentEntrySet.getCurrentPage()) != null; booklet.buttonPreviousScreen.visible = true; + booklet.buttonViewOnline.visible = true; + for(GuiButton chapterButton : booklet.chapterButtons){ chapterButton.visible = false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 217305ddb..12464f28f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton; @@ -78,6 +79,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public GuiButton buttonConfig; public GuiButton buttonWebsite; public GuiButton buttonPatreon; + public GuiButton buttonViewOnline; public final GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT]; public final GuiButton[] bookmarkButtons = new GuiButton[8]; public GuiTextField searchField; @@ -229,6 +231,13 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ BookletUtils.openBrowser(UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK); } } + //Handles View Online + else if(button == this.buttonViewOnline){ + IBookletChapter chapter = this.currentEntrySet.getCurrentChapter(); + if(chapter != null){ + BookletUtils.openBrowser("http://ellpeck.de/actaddmanual/#"+chapter.getUnlocalizedName()); + } + } //Handles Website else if(button == this.buttonWebsite){ BookletUtils.openBrowser("http://ellpeck.de"); @@ -302,7 +311,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ updateHover.add(StringUtil.localize("info."+ModUtil.MOD_ID+".update.buttonOptions")); } this.buttonUpdate = new TexturedButton(4, this.guiLeft-11, this.guiTop-11, 245, 0, 11, 11, updateHover); - this.buttonUpdate.visible = UpdateChecker.needsUpdateNotify; + this.buttonUpdate.visible = UpdateChecker.needsUpdateNotify || UpdateChecker.checkFailed; this.buttonList.add(this.buttonUpdate); this.buttonTwitter = new TexturedButton(5, this.guiLeft, this.guiTop+10, 213, 0, 8, 8, Collections.singletonList(TextFormatting.GOLD+"Open @ActAddMod on Twitter in Browser")); @@ -327,6 +336,9 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.buttonPatreon = new TexturedButton(-100, this.guiLeft, this.guiTop, 237, 0, 8, 8, patreonHover); this.buttonList.add(this.buttonPatreon); + this.buttonViewOnline = new TexturedButton(-101, this.guiLeft+146, this.guiTop+180, 245, 44, 11, 11, Collections.singletonList(TextFormatting.GOLD+"View Online")); + this.buttonList.add(this.buttonViewOnline); + ArrayList configHover = new ArrayList(); configHover.add(TextFormatting.GOLD+"Show Configuration GUI"); configHover.addAll(this.fontRendererObj.listFormattedStringToWidth("It is highly recommended that you restart your game after changing anything as that prevents possible bugs occuring!", 200)); @@ -395,7 +407,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.currentEntrySet.getCurrentPage().updateScreen(this.ticksElapsed); } - boolean buttonThere = UpdateChecker.needsUpdateNotify; + boolean buttonThere = UpdateChecker.needsUpdateNotify || UpdateChecker.checkFailed; this.buttonUpdate.visible = buttonThere; if(buttonThere){ if(this.ticksElapsed%8 == 0){ diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/booklet/guiBooklet.png b/src/main/resources/assets/actuallyadditions/textures/gui/booklet/guiBooklet.png index 1bc043758743f3e4e8140afce0b817a914936f4f..7f2c5572f6f5d2e9412fb7814183888d89340344 100644 GIT binary patch literal 18756 zcmY(rc|27A7e9XPof$LsA^SR_5+#-F%apRTphc8zT0|i#yKuE>Q`#3{T9Iv{DC?-C zQs|v!B21}dC)u+7Ueo*i`F_8@Ki&^2bKQGh=bYzq&V8S9aBbW_G9alkcOz5$;`2mkcazT)LO;N&eiqXt~!{0jr?SXP37d0ho1Kq-tKzztIl@G zqAere9%Mb4co=y>To%;E>NWH8=KrG?RaS&?KdKM;yOhs#l&@$sPFu`-Fy@sQ65Q`5 z4_y0D_u#sdHKxB8zW;M;mOGucMdZE9h{fz5%~6#Lg)=KAdpEy{3A{QFoGujiN91KL z=smP&=w-B#tmEMy55C$@2I!Mg{aj1i7nw@ek#QAzo%Va`(RP^21 z-?t9g&RCE5l^17772GcGn_4gsw&%WA?AD3Yk+96xG0TQ_pVL*lzc2Q?H;M1Cm{O;- zY#ufG-XQvI@wy!|`zLQLom*UXMJ>r;tiZ7n>V8ZuP4hp*qmzRzT5}8f9;FYL_IM2F zI9N^p{$ZpNKioC`CwaIwvZYhk`D6FMmEF_2ff0uub+uN>Uh{}{IPg3v)hf@jFoXCo z5j37Up3!QvnidqTO@{q`WbkD;eopgePp0;DTUizdm$jRvO_`^S*HUk}Of`{eGjCnq z)G039^Up+|d8=Gu!tA4(^8r62L#?zIQFoMemru<+(|ms5fLr+=GaqW@^p63rsKy?* z|tvU18JN9~s8Rs&>hzz8;*4HBE5# zEt?6ndn~W|r+m70I8C}>W#Y?%>Moh9l{4wly+ehGLsdU|LKoJgDgxW8FKcjFZd|12R%dTzd2F<=4UkkSlIGmKo_;vMY zhg)abrb29or>|MS^T=*y(BYKnE`x6Nt^FALoMUIx#Q03FMNIxF+%tCS%dX+<;hw`G zk%vb`!1!=O`;yx6TdzcBzgwJB?^52At-jYI{xVM3-;(U9Uoh%>WQmpsb@FQfwS4oj zkS{91m!;w}M9bWOH<2>jlz*wv@zaC|oE}aSg5WO`KC-a~8YWLG=RSM*bmT<2cK_4w z&0qT$8_A5dJ$W`hKH75Hu{G9q=#%4TkHcSaM^f8q1wLR*V<=x4o|qWPiz`$YL9yQPy6B7>dN-%?=HI2 z(_Ycp|5(k87@dy&lN7l1k5%ks_S)I8fijP-+3D%9)3G!01BTltss<8%+Rpx-UL@sD zPO7-dS=>8)tvx3FVOn7H_qeZ_-mTF?`D3!Fll2yr)V8q&mD6LNx0iG}wr%}sOIn9(iP#{GCm3W5}Hm}k z+z)SjG|?>S+&5PSV}IF3-P|d<@WPp8 zhTqcowe4;gOACLRe-`>%Hyw`bOxBd*Ub8Acv8G<@i#CrNa>)Pe4O#>c{SqxsY|D=7^LogFx znCCNFK3(B*b3apvS&kr#!x{04?mVLhmO+)?mC-Hx7tZ|tXQe#*G^_>2>>QlC*{a0W z$=Nz-<12gY0j3fn!uxx%@lPLePAa&_nNnE4h%rPve!o+7QFe{hiyn>NeLXcXfF2ybQ zI-FXThQo_k3cSp>N>jr=ml!(#MxY`Ynmvtgi|(ev|jVGeLQz@3_{dZ|66%(RS3Y)+YM z*KG}|5q;=bJo9?gZ^f`54E7FSP`c}NE^02Xv2YJq4L3=V1@#MK7taBv(z*1^Y z6ShCjeC*ha)n$33+Q%uqzPe<>MK@=X|)NC6~P9wQz(jaDE0t@)$v;*sw;-Fhc{=m5c*3VCmSw2 z$!9!_Jh)jdWacGGAVVpxiI1H6be*hor6x6~GrLK4?Cd;j;M9D~0(g3G2rdCplZw^p z@o1s>Qp5&4QVK2-MqaZQmIA+!iu$snYT!R36RQ9A+xPzI`kgbCqzq6!=AmHaT#0^FH$DxgllTDA}jaOU*k=`W56 zz_?7}IumrL8_YVIF??L+&|CY)v4X0;mot7BPIvM$R&9irG6T4=b=*K%v_AdkoUt}f z63Z>uI}@~MZqN=T_C*4 zgBd#1x>8ZThmaO1P|}Be;I}3PdNV!X2dwfS!b(<%0WE+w(zVip9NHV7?b4h2wsCJx z(}4&UmCXOV6t>iyzo>+A9Yhoe#^k!jAkOcZIs}*^>k~ckbXpzN1 zb-2-CGLnZstBYg-_mldn4i@Q)kA!UJf>LOdCq7i409_V;Xt#`!z4iCk27+{SE^U zEekt7g*-VPdEC(zxNjm_a?^gCU{FA#4wxr!$&18YO>C*mbr0BpcYjLtAQa$Wx^dKT zApWdOj=rB|CPsePPtlhoe<=kI)M{_oXrC!it zG*3wXA{Y^wC&i?}qfAhQOwC5!sbj1G3Pj2>k#OMFqbvRyF#l<)dW^D#w? z85|=CB5`7bL4}RsmfshNUVJc=6^t1OU&lDEn>daXI1XiV;Lm#IKm;rWj&hwWM2^_lhaG{^Wp!aP2y*;p(!H)%QxpPQxB||pT1kRGU`CodSSZxw2-T31* zaFfaah6=4-2ux9t7W14~jwuWMrJbnwLNKP&`gS*!I;ielKyRjZOOKqc6(c5uNA_tJ z$AFWSl-(slg{rS2%$sp?3W*U#q1#!dI5P))(~b3YNUVcWz`2W~a7lt$f7vq})J0B* z(n&<4pAdJ-U^)0oFqe?>L|K7C&%L?4VW`v3x=wxv*Gpx3|o7dIUW3l$3^kF5 zg`~eJ1YBh*@#;8@y;xY`3wdB@{{r6V`HZxFy;5X#cxdt}=)m*5;hOPh~DvK5K#!I9F06Q|FDlh1m5XK?3u zDIC>eCjf8jGT7>vp|$?by}=X^b;Q7PEoJ{1)6s$i$IkiRA&?9`}X+J!}l>bq}XoLA?jjV&v5dtSXN}14(kk;H4ME*e>9I zO7)?|{4*g8qq7!3#}(ny8xpg3Kl8JwzKV!>iL#R>P>4p|nx`K{9C|kV+n=5|M$EQ2 zH^hwIBrnn}tG&%_b_yyuxdxtz)}^vEc^j1OLnSSbr6iG~sGQo5VXByYCTyJ#0tS`C1Q@G_M?jd@29k)@xP+ zJW&>CTbreISTw9gR6a@r9t_1`>pm;tD ziFruT3Ftj|5QDDTh6qV0M#BuY{{_qn8;(2%#Z?yx02|y;iYZRis}N1b#We3y9DZHx zngc-x2lSW^pJ}9vLq*fkrVc2%%?*md2`NbSv|fWFm~{eQGP5%+YuGv^?%Fmv;22?q z7DE%PgcTG}Gfi9+m=t=WY;<$-Y>~LK`wBV@W3R;Dz{JO=F~?w~y;fJ9?XYcy1knyG+Cy8Bn5!Sle#+ zt;?g0&IMLr3v#H8Wv-9myq37dpr0T>f+EqD6bfVwFCZZa@XZs>kysLp@28lE_#7wt z@W+^dP0{6hG35v;=spE}XOyF%*iLZb_(1TS9%OKZ*QAPp4J73%w@H|<$M-L^{P^Vt z5sbQj5_$KyBQQjmNAE9#`PV3*3DI*CZNO~Z>+@Pz&jsQUjTk9Hsg+R@u&QW%JF3w! z84CA!r{r9SwiqvH>9CGVi(d3J0an>_5d}jJ;fTQ4o2iUFo`-#KkP-BfrzHW+-hY}M z-P__1ML9S+*QhH~*@(Nce(&cFX|dMIGp*OWt|p}qcj_^%)?&na)S=VIoaC7pQKVJB z9A0@Bb}s(70G#;WP#UfVdem~KX>$N}-+R>ie6^+?*GPuE!L-TC;OmhD))F4QfC2`> zG(dn#gKsfyA#eC`3}>@X9UCw3NRT_-67VGEjk3^gy#DR9ai#Kwg*%_O0F zYA*y`B*NO&%2X9Ju|8)&#N3{l06(V?)1(vFGH9+m@mvq(SiL01Du$=3PrGm$jJq=* z&v~qB12U?6lx{C-{(D(-jvKgEIg&t+BmxRpkP2Zb=bj6@VbOy{s8AB1*N!_`AijjO z44pGm<3GSL1lLYSA-F^wRs%h1>#h`Gg?Ma?@)_wBYtrGuiRX+q>_h++Cj8d=93FdUi-24cFa zL5VWh>j;Ez@QfJIC15j^K`PvE=|m5RQq(809__}!Do+Z^-R6a1!79uVr#cbnI8Ui^ zLLrq$J>!uSQ;6Fug9GEe5y|2=_nZ(Mjl$YYFOs!T`XcgJgnm)pi|^6Kg`K~*e4onb z008qjK`o7@)WmV8x&jpd{&$Q9eK;Q$BhjM>2OixXT>oVawAnEw!GD315Vw16MNQ=Y zWkurTU;PvYY#N}{363IJeWwhOzXjoW9uV2q_RJq}om?MjFl>E+;?VWNq(#g0!dv(*oXjs2ja_GEM+iwmV|iFHqMw3;UvLU6n4c} ziKMzXCKAc~sSFRKSgE)aZfv}Yi?|$8ffk!Nw|NIZ7T%gRXt8wuV=baEzHys7>NRBM zh&hnZQzyD$y>`qfSzLHAn4L`oZ>SlB{fARHmWWV!3`J+SCpU5zj#^uGOS zTAUV64r&m15=yw2WQ`Vsia!!%X~GiW^xJbap*Pr#%mxnqHTYh$*sKjsf$Q-*qWpQ- zfw@exFY}lMbF@jUk$Wtk(yNsrp^n)mh%QT{inyOAPmPb;aSg%O8Uq9!=vKHm2njBO z^jfwHc2k82#%wMUA?WffnM8~exe4_1bkFqkrd$O5U!H^#+}2{r!^?|=?>+N$S27)k zZ;Jkk6gN6>G%$LJVmg`o(}}-Bf`Jn0W#sYH-%1#N5Bq#WpwKD_evMmIJT3`A19sB% zqic(71Qx{aUUky{_*AWozjlQd`?EL=+#`qFZqkT=V}0b00zO41Y(l*cB)4uh5Pp4| zTNqdt`Fn&v;tb~WW5~21XsGGFYLLTt+6a#s3gd;3Z{Qp;5vuX9>ThE;5Fq{ps^5p0&Ep$sn(PKKZ&37$3( zRv>|Qk8Hv}HesHnc@7KR(h|cCS1&?G)~pPPOJ9UrQLG}LFGmQo??g?AW2ZVN$iK;bS zcFYa<^NF-K7@8J99gRU^7n=jGnrO(Z__mB+yd>IBoTzX{V%|7lZpB7FjONH2JG-`c zp!7g`sYC9Mj#=Szt)mehCeu$eQ;YkK7t2<+s}|%>TBfdbd0tw99uX*5tA{ zVZw11LIZY#tBdO`O`5)%MB3S#pdNajto#jLT_P??Q1*(CRm z%!MRDlaqsE1pcqZB?+F=b;V-WFOv9=Pt|{T<{r^Plz11vZPD9O+a5iz;Z8!s;}DEk zN#>s=1*wUwg`Z6JWg2Q?ItVls;iItOk@qZH-c>~G;(?zO_j?&5X9iJ3sokK^FsxhE z9>yQPUbepoRD{!)2t6wo6Su;^m=qTz%kD8I4B;D%6Aye` zHPpeVD-4XQVw6T2f4SMfLnYCXfVG zY~y~?L;o!EeNPgM8b*plVC>3m4NaoLnAiyHrRY@heaQm1A0Z%9gO4$h@?~rgoXkGy z#A}FIg@68d?qQja_>%`1+a9&VMjF_2S4yxZUz!Ne3hdq>p>XdM5aPn9f(?YnSznXl z76EDn|7G?@5IccSf`YlUzXBFsOI|M^(#L>_oD232A9yTkc%-#Ng(y?IWdhOj8B0j7 zfK?ou9_BWd9vIX7^ZZ~_qx>X7%YOL)x=Cs#R3YE9TgIT!&;1aBGy&#>Gv2hMP?4W2Ax7@eNw2-TOi{M z$vD(l1&|@))wZny!PrY{kw#9=WMokEd^Uxtjnf(|dRiMxDNx}!t_wwtrD0RmT0P$` zyX}OhMGgp>gPH=G&fCC`W&C>{gp&eK2u_M~{m6+vx4dQj5mU)tA)IbRT1wTwNcMjw z=Bo+*@*@(rbGEhLj$8nb`=7LJ8w-xnX_|bR)vAp;>;Gw@X>^WK! zLLOj`H=+aPN>EZpJyGHKk>$YuzuYn6%_%sZ93am!5F{(|rZgbjgK#Co-coB1jQ%ic zVEmeWe@Rt6$GOa(d>YK{` zlBkWq^T8$5MJ;FS^f%z66i8nz_6~gI1ybt-nHXEmuz`h|m@JrM?{H9?S`LRB1mtTa z4DM%Am>(%TOBIoKO-J2OT6-g|hcH-t^q2>-8XiW&abm2s61G@ zyiJ-Y6Fh|;15=L%b=5?sFfsiPilc#sQKAKdfM5&NUl{5J zn85mbw~WdL_HY$AnXsaJqj5NLX}Ea7JI8G{V^>maw zVF4VBBjvj7#gcrMrg1_a9xg@v06KOLm`LVDr6R+iYpzOIJN&fv!y)jS6F+aDNeg>l zjP)T=DRN7MsByfllj2fD#dhxpO0##A+c{@j)=SM zi)aVYy|;mXj-(J}F&?amX&A?fz$z&sfOgr3?=9PlO>*~hG_k=K12Gw=pv=8d{Sxt_ zCC*k|RE@+fxkzM1HJbD!JM8I+X@tRhPEPPRL>@g#e@{gZ4RWbf#strfX@Jve+V6`Z zz|fWj-6tKJ1-==I<9%c`qvTPga;u5`5?o+jA~GqE+wVext%miI=*9>=SVA%!!!Jw0 zK`^U+B~>JrKF!VXfRyPLWK-6@;%suU{H_>&<6kdft}f5iP&(0w6i_uoHfz^44QUtWvn;AW~PRpKorHMkrP`mX|dcI7wfXHSUQHTw=VFz^Up|3iq z)&*wp27K+VTMzHmM`yK7HcS5hdJ=MXETzw0!&>%Jf81a%Mg}#JBgIUYVy0ZUwvj{e zCr2$r&E;$YSxk&_4&#Pm9FIn`?q;2>10NepeU5rx4Ec5a4)XuFXd-Y1*!6nEHIm(4 zGF_QyqA_ZXtF?K!fXg}ZWF_R^VZPFw8jK-)9f$hj>?l)91)_@DxFk=Khf+W~m0Tz8J#>!;1J`Kz+t{MC$_{yk{d0J<+A zrRFJg7K55xL>gNgExMCZ^Kl|<3Q-WFw(z_ET`wEZh@epl)I>c?71R9}k^e44WU1Q$ z)1Qn+R2tz4ToNcT(R7I=`mZ_Z*M|cfws=~qssP+mOpJ*p6GY$hiCu$*BPr6;8N>12 zZTTzhszrzgk8ytUpJlA+eHKNQ-;c_TUm6;)$NK4ExFj0mle<+||gF>>8a=(2-Btlt zvtoQ7=aC9wE>qtoTGvQ%dL-pbLhFpIQ%h(QbpfHvWf&5nW<%p zuSvkJb?li+OqkjUKkv2$Xz>^4%XzD&9$bga*|R9THmS7wStmXn=I{MW_hkGr<%<2B z1-&9scSQ*w{M;JA(Gf6ik+=qrQL{xOLcdI>Z$<+@CGSGhrD1CUwK@i9ko(lHdSq8F z^}Gj#wg%Ft=)j|g%bi?-|Cf@8lP|~E)^RIP7`ePYt{k9NyrL&5)$?~6nhMW!PelXE z;;n%4xss8^eIp4hh0^j!&En1e=I51^&lVLFq`4%$^r;3a^nLdl1OYkpN`L z{@T?Vh0fbLeay8L>AHqei_p(I&9Z~8rL^|Xtu~EW|3!sM@sZ5IFALCq;8W!01F@gb zlt)_=NQ8Yqg)qQh!%r_kTS`Kk3RG4*LU;F=PnDYXOhE(nh{x~dOxV*nZJT>MQK7!< zPL?oFa0*U3qh}oY@M00%?!*R5!4R*rshfur1~O+crZTE^cXUNcam8OpG>MEHVHMgv zDda87V5nybYOz=zeOIa$g?{vd9=G8lIcqLqwtt@>mys5$FC?|l;Fr?MRPgnq{SPS} zac&RJ(_$Qg(Hn%Xrqd#H@2;v9k2W{lB-J6D)x@eiD4lZJgYfwPEMFLSgIa2Av`Af4_D^=u)j>~J!;Q2 zr6SvK1(gj>(9?+ZbGNuS+d|u*JTk}6}tUS8C8m;2z2@&0%M3E>LNjVjR z%jDgf{2L6^k8-8x;JHkj3@vo?7mG6gLr-A@l8@o!JZv#IjRlw>y-<&&LOd-tw++o9 zD4k>9uF@fB3G!rDxM0T8bnCbc@`A=Me>qZ)7>)u2VFBVhZcyB~mK^0?;o|2tp3;dX zf{T*k{s2Lp(F4|WRksC+wF(S60Bzfi=1DQ8+GA`j=)SfV(i|aX%X?;G6K&NFHWdj# zLsVsnXuNme>c5~`frcxBQNUpfV=CT7T8X@kvVu8i$E7CM1Q55O%w(Y&$sEp~*)@`a z)nTBcg=JnKOl6*yiPW7X8{`U+kc9-80bxHGmx0Ku54@zfxdOK_z@F(z33n96k!^u1 zAO|c9wX5#t(m@e>oK^X?I20?P0oqIP zMcP|}fa?XK{1r#U2n5qyf#kIlc)p0Hwuu{`M4g=HaGiuwG&^d^uXS*&HWgPF;XZzdb1MtP0W^&|--rtLB#ulZJL8 z>@p^u5R7aa2u6oPg!d}K9KnngL(=(ZCn6oMFA!~gTr`nMV9NT@{ErpA@#@;*88F>AEsSJ6l22zMPK?JcDYrs_cG!v=~JGy)W<}y7zNU zg-_Ce6xZJ#x^C#rg=*qx95X|TDF%jO$CkkZG}-*ONc8QcgV1buL;^T%X&9)6H{WS- z55D3Z32fBW=4x2j0mzNI)L4pW zg$L9MA$MUMxeEgK`h8}_Jy9lzsfiT*IZvq-*Z9lyTM=4cF(FWYPa?6Tk$k9+Zn0z5 z8(FpR+l2`CfgRhb(mr3rQAK3g;EiKAI^4ExOmAgu&dLHQWKy7qX~fzAj;am~q>2vka zAa0p}6o>*XfoWagr1=^x?4Y|6F+7UgB$PQf2qiQq96whmp-z*=x#y>O=d*ujxOPPU zyelu~u_bq_Y=Fxn+R?s!*`!y^AKv!ibTquX4*V$W_cHc5@@namI~cX(g+3S#c|O?5 zngNWl)jrWD(fcn-??Kg-c#*7vHaE_Z&tiO%`Z)J`+w9DkOVQWUx?6Kfeyt5tY|!odxcWBF3&!z<5}QkkcRH;Z7Rglq8~ zmf01b_BB_Z+;yg-MWQ;MH`5*;HIaF`7$4MmOCo&E3Se1Kit1S1$Os>xDtd>8s(v`g2Yv2V9#~iKW;a& znt?J$f;dmk_W(2LpzXjcxVTF8N!|(Fy^RQ@7l=Zsm~SzVxkwbm7@;RRWtlS4HQqi^ zQ+TFyENbh4wr8EPll`;3Uw5fbx=u{odSnMZ7#=$wAIlSlsdJ9gIm5Ex>-OmNrk1Tj ze^-T-ur1bc-*2)L_(?nE;`+j`^|&ksy$De8`^ytYI)?Mt3I6#ROHvegH(aot_FN5^ zN{TZFm4o&63A@V2EUwA>+&W-$;Pr(CTX)QEORCXn8!H>TO6P4`8CR_uGU8cghIyR|63Gp0?;CQ)lZT!AL~>Zh#i!65;DkS4r^z=WAMw6Uk;Ik zGtl4~u@@s!mofUK1~_4@ORiazJehpWeN(j6_(_))=Vrf1#y;IHmkP{%sMJ1WSd8-S zUhJH5QilCcznr-7^Fh-7gFW7Ad7+QjzQz2}c3Fit*US*nW&VCNXXD$Ul>@~4-eWI; zyLRsVCglvDg*?0fsc&l>EiV?7s+rG2-WB6)e23N4;ETI-?b>nTXv$E-#8UAdwcxsy z$r!V005y}m-?s`Szr2liSu&i6s$!J{3r+EVMnI@G2l-rRRthI;)T=RV*jXbPA@mnO zr5F$uDbUt$oza5ZCX85}LdANOj1AAjA#>~3NsAc@?AWX9yje+HNi3nF?%A&n4VxJbH zU2JzM?eW-NJqVg^KMJx34~yZ??{n?Z=AjfcHP8L?JKu*=ZmGy5&} zx$sFizaz{A5He7RCW_PjQ0(!YRfw_NY0UqNSpxS3XUxMD#K=k%ZhzGIGNrR%JoIu- z=7nelv3qp>wsup?t5JP^UT$%un`E@qinfCt7d4l@1GJP;g)wkmOefkNw3K8WX3)_J z3Wd!dpSnf>Yzk|ni(0Dn{>`O$N0`XsL1r1 z?!MA#F%Yo}XeL(o&b9xT`d;#54|@x6Lv?D)mS%4QF?CVTP|PsaA3b8UEH`RyolEud zlcgeD8l#?4r-Ix$&P7+$E_Wc7GpAQ*G6EDL)QC&u)$&B&QQ(EtUa|!=N7lb{-Uu|Z z(mq-Ths)kl-$)`@@p#oOuQl}WVgA%-wR6b`P$^B| z*J@%W65Obzb|TO`mvCAW0j^!H_5v9#ko~rTwc7fP>7x22%0Y=_e-b>8JvK<+-)+Jt zNH^P!^EF@8wl95xfkf*XROWfvfXd3V^~b4exG9Q$ zw8$#>wMKka$>8xNVx|@kddy>*Ix*MIG;2T7=)KCC4*PjB+q&O)D*@9`dhqIvC%r>% zYcRC4Iz*?vi=A5Tpb)~|biTdg<&%tGu5zAxQojUUPQLc=p`{-?^Jw9l0#QkbUYl&y zFtquy2$;?q0HIIweR4}ZuPRWs7dL3He)W8B!O{^7{9Ov)x7$BdK9u`w#`d0r-IK*l z5k-Yw`E+i-9VYo`arz!{Fpc&)=lEsA%8w#Tl!tC*|J|}2S+~*M%qd%nd+#5izV~Ch zn?AJPy86(*De1VJx7DA^RKl%aZ|nZD%yi4!Ed{c=My(sOKD(|>a|?LpGd_KGcz-7F zS2S9#uDWico$_%sqii&PQI2Z56g+<8N4xa;5Y0i<{@R9(zR`gq_!E(!?G;AwZZhxnKEF@rnzn|!+?O-%6L&*GReYp;bR<{i{P^(& zGPbHid0!W(4QEz*U-Q@+GZT-XmcumSPuR}bqsM)QF$|ZjRlRdQPU;NX+sxDLi^rAi z|3c>MuWPBBRKh-gsH~ltNjfcG{&VnaRqT&zrx&~J*KPY%B`>RNl)Mbb2u%`;jn>V5 z)`ZYZDe(cgdjUmO@F4O*j4` zTP2^C61k6p8BZfdv~8*v3-nb{FX}JqIc+Uz@i@HyOxsm-6wbgu{xU$~OW)Mo{~M*n zLNiD@`yS_tN=C#Sc=c*S!&q!_r*J|?d57vi`qjz>kf=$-$w@hrH`v5xIXyzw;l&BJLOQ@ zVcQi7b{gFLvXH}zBr!;8;Hb7(A<1dh=y?MsTEkq4!!w4 z`*VYvi|1fo^)guN4e#vyzK4H+2hOdu&!-)o_r-nutqkmQ1bc#2YRr33a zOBO#*EvCcJ%h=o!!}a0^Xp<9BjkSmpI2B-Svssf)(@`N$UZZx@FzL-SF#q>je%bCq z?q}fV=C-om8fa^dgl4uR-At$1=r?NR4R#XTLo~m$GDq1%Arlsk@4tp;k1H(-^n55s z0jISQ-)4E`s|7qjYg_ulgv zmR_69f27Y*2J=5BJ3K6Yyq@zs@{O*%5=2``Po-ARb{gJJ+F!D?$Z>Q$`*S8}#1mUz z(l5_wD5pAf1W)%bUM@KjU7}-bo)ht6;=o}vbgX?zclGlC<1e*Vvz3**JV(3ZE~$sD z&Dea#%e?=0#h4Jli*y|@zfXQG>S^ja`+AdYd8oFJ>Ut`uP5pj|tnf>)qw{te^ zzP{vX3~tUpk{)*VN%#Wd39^?xO}46sKCM%THa=!(*(z+d`0;1+`p%(EDZ_K1r63^l z&XF9t>oBAr@A@oPW;M$D=h6EcsvmD_fPQZ1_|i`GBX>6mi)OhE*!XR$hPr6G*8S1E zFBiM%3x#&P_^3+TAi3DgZzQ6Gu9CFF>e#O53mz=RuWL!WqS=*N^tV&a3TP?$*;x5P zLzU6=?#W%}Y{I=#zWC8tO3z~t<3Q`trE$OX*v*w7Dh#_@eHW9NZqs2V*vt9_u%#3O z@qq2OAAPCi4F*$<7aJtEhomeRh%FYG?btA&)9RHny)=Q&{yBaUmw}9`Gv6O<^l-0o zaNbvu7qt54BiqXki{`?(+ZQ;{Dgw5*j0tNBu{ny$-R_8QD#f{e<{rn6Sbg048Jlcz zt8shvFn79lI9$Vc#Vuut+zZHk+62tcC(@oEF6toevo#>Rq1Kts4GWfidMhVB!c*cl z#-v~*Vv}oOTSDVM6gb9xi<8&^vE45uu9c}C`M9clS2geZmNO!7l1}`bGVifAq_SK7 z=}T`!!x+=T(@?iJG&us0@LdJKAZHCPSq9hX{w=A0I4`_CVemmj_0QmjxgBikI9Lt{-l;_|d(S=w*MNq2RlR7_V@847hnR9w&{ndyVQdJk9z5N0UoNm!@5mg- zGBcQVoaYzvMjIDOt2ybKuI;vT=wdEZcD-yI=vkcVNmC9nni zb%M1l;Z+r>5yOAz1*QJLjd9TR&s>!A;=az4@Se~Q3b1cSk=`67dsmc;LkGcAo`K%Z zsNKF1<>T`c%MzRheb5b6lDhn?uJwgiFZquy=GOAFvzrMZs6*5Bqu0}rnd-2wk!grBEMBzIW#XE;Gn{A{Y z$VpIYAiesI$uT4K?YS`c!@61wG9QXMk)XZru=bN+MJkh)g{;xzU#BA;K2;4=d!mN% z-``yZCw5A(k8m%;>&nY(4$uON_LXAXq@1^)(ETtoXWtz-Ja+Ys_wziO#DzN}WJ1Op z&WdhCLx(**vSp2!xO?TJlT5Ah{R4hc!TrU zdrgDJPZ`~>^u#7Y-WkDAlM-y5tYnPr|Mt%lE&}^D#f{0&%`{hel03I$U+M7h17gl| z4VRw(eq=Y=Ab)vzJO9|n&oySb@<+ez6nVbGPW6bxZ2@HVfU9m*@gDSE^FX-S5`zuo zjRQ7%9-^wa&l=Mg%YgOaeAs&uTkgRjxAC&(B|>j1FN+ak#Pv<0$-Ls^G0B+`N7)4y zztS=XGN*SYy05=&?Q19I!;!e{@F-72;={GZw?n5%j&A>_`d_!ztb@VA=h)XGS=cir z_y~H91a<46oV}N~KQ&KQs>zD%s5Q?!0%cK!!v~Ya2$O4i5-Zctx`o6e|EhJ=q%9e1 znr@)ZC6is8Rzk(AZ(IvF7&p zy5(OZ4+&^Qk1rx?CG_>@$CB7WT^&?tj$?fG?s;WpvU{=OHww6Nnx-c z_4}EX2bWfwY5ub?%bKg$xQon5IbWFbJ+EB|E%(dfhyPvW_9X`$V zFAEMyCgh~O_0Iq20vl~pY=ZZ>OF122NEHdU**$lkzbK%ovWwm=qwB}h_}{P59Mv!_ zd>Ej$LvN0pG5OYx8^Bp#<>oT{?u_ZK_EqRjA8weL`djbkC{|rEje@lNKOf#Zq>|^j zlnOL719Fd<8Jd*ew#~y^HK=i?3@dFjN^hqd=cBqWY};nv>|N`UD*}wwSg6vK>SM>z z8`S*;wTi}T*35_2$DGh&K=Ch@_)ID&l^mfAC=FD3KOvN)# zn|%v6H55GTOWD*Na^KU&Z(1Nb9KN_XOyh_2yh%L*+8loD&}JOK*tOsF;Xv`7Ddm zZU!_5ywJ#AYpbj3%MW@oSbXDzx6RnPLW|(lrkYp1l4p;Hep;?qJE7t6Y9JkzvccrK6$&G%IPbw7x$jwX4tkwXYy$l zRb~fNHSD({UinOfs9UebP&5;`BY?r+j%?c=;MTgg_1BBU6{cHGm0|3#dh5+z`G4uG ztN$3 zCFty{`po;!>e8aAy>yFM-PiI)O9YeP=aOv8E8~>_K7+(3D4cw%8 z8AF9JgTvCaS=-|@&#j-zxWTWR^}xE+X2})j7KP86_;_REri)v%+7Tdh z>i@{hNJL>l8l-a4G zS=)Q}J^7c;4>e16_J6}w%PLPd6Cmd3|LzMO`qs@}75@l;t z;@yI>Mwn74d$Mo8XX^d=e1D%myht-=&Uv2uzV7R~?)&kN)lM@Zep!A15VA1eyc+;R zKVm@TLEjFX$~cO?kzF?J*aYw}USReh1^t`P%Y2_Vfbf0p7Z&w7(-ZxY*T-VV7T!+k zVo|--0|n~C=vUG{TkL$SJ&*eMA3Ws@UI&kP_-J}K`_Q#DwKVnI)`so`FyCOYdDET% z$AM(N77d%gp1`H6|4qE{uWO-Ma_m1E9ye4UcduTnnJp@IC-R?*m6SaRJ1Dy@kDXF_ z^v~^om#amaivPp2?oEyJvjbP(et%)JXY-bmor%{C*Cy89oVIO#KHcg0yr&^^@aO#W z%yd%Elu^5by=_@f>GPmk`}8co>9bWswnv)(n&MzzDZ?!S$T z#y8#x__|RpX4%FQhey7Jte3P5Y`RgIXEYOU8u=qG<;g*M@?OiTVzuqf19Pv3%F;fB zg%0YeETm08>1=PIw$*j|&0CKf-uakkR5DvTUDD_gocwiYZRO!dzpk$P7!sbpcs@R2 zV8zU>Uq30ouHMrMYc8`?yy(!mHGW5Wa9jEzaP^+QZe6J7M#YO$25sBM?HZ;!MpGul z)06%7kIG$mIpuSDu4c-md`{p>*0HgPt&ip<)<3`3GTCuBW?P9-Q6@j#D2_wXIvlhUmJK@S)XmkL8cR*F*6$ojb_h*zn7uYvyK=q_>)E?= zYv$;=NZ%i`ekmR?ZLb&Xda87M3`-Qnub$Cz8gmL;ND}?>^l6UMT=L_Huc4z8d4@AW zIWOj|Cq3tKXWn#i*39OAQIEt=$KEIvYn6Kt81Iv3l9U?4k#jCFLHeUr*zN z%R(qNoc-~OO(bJVLFgRRnYx@kcjx&hTFx0)lhN+r7vsN6=9`Yu_hc|hOcd*=O??-Ka< zyOd%fhmG2KJM7|x$?3~LnqtRm^J%Kl^JM6T)Ebdw?;5?sqrN5LJ+*>RmpHz%R_s)_ zS#ND1O|DRfzSExkWI*b+wE49dK2iMp`ypl1B^?ImXQVFqZ?88mQQu#?Hxb~rNml81 z&ScY6W`jH9x>W1VTlp#aH2GAQF#S0F<>~g2(N#a?yRqEJWunvVHnCpbzoq4L->kk< z^5WDo9E6?5Cf=^ynEvoZnDa!J>GZjMeP;WcmF@vktmmcv*gu9hIRX~V73BeK6+_|& z9dvmWoL?RM88IXYe&s#0WBuO-to_Py;_GZC1`b{wH!7VDOoe|v_aINhdI_yu6#iVMK&)=Jg@!U9jj!cA&J=wZ2 z-0YP1+cIqQ{nylmar-OtwVfd)9~b6khW1Q{EeyARb($Xuj@vu`V@75AgV6$g8(FU6 zX#Ns6f#8Kk|HWB9f3!J;uqOBK^LLv5Tvpj*6yiUUCQ@4RbZF52{6yKzK;=Nu0qfGf z0Z&aGhnWvq4s?E|+%90B>^- zVqt!EP6AAoi4AY4oRs&KE`Fa^i(#j~3v76;Oy~f6N=ZM=7M7FOz*l|@cC{9j|N6ua zPNBo)YB+%3zDU4>Q6+K957! zE<`;yvT`lYn3$@avQ_yw1;pVEuu)p2}`Hqg`hsfQW+vf#JASVXXt``d$I* z!Q%@h&u5R<3spm}Eh=S_h4Xzwq5o3YQJT*Sp8EH_uS|7Z(~IvBW$?kbFk=X4HS-tA zI_|o5c}Li;G36b6J0{NSD^_6{i*!a$R5cGJg^e$SW{BM%*>Jbd>2$67`L2!QZI$-x zpBL!|OQj$1ncVnJyQq&oIo#ln(-Wmy85hjl@Es$Fnqy?J{UW&VMrb z!euZQ*uzd3jPzTko3+$h`e7PS$B?10D)vL&)LQsRk*o02!6z$<&N&dPLIykT3jk>G zdi}e_Q-K7dw=nj<#YP?ab)k9FiK=h@$$1xsFwVE0x%jQksdF!W z*5?{Mn%n<=Ru&9qf`NTXsWD~}0%q67D{cl~F`6D|lfOZhCPM);urdW;U)xv|qKel& zHbSti0@Rv3QNoXO2#80cMe0k?8sGm1vQ>=TYZSfT=tK!^Vl>y!9dBDKAWyD2T7|{x z(&aC?xV))Zb+5*=r+!K)mLzTORJd*3s6DXV-CB>OZyn!o%^M>uaY7G%Q*Oz#3*Xz2 zwSZm757k(J18jzyB%*7yz8jYQ0|sz}8oLc+i2}T*5*CayewH4QmE1o+eFO^h z62`+Y+6|G#u!C&nhlrIQb{~VyQF{X4R*d9~T4%NqTB{0@byh@k=vhIhtR;QtUjd_1 zN0j}^MO<;A`nye~3a?ky%4SLb_$AoTg{7Dwv}l4iBmz;Biq&bhQ2ic@5f_YAyJyLx;1Qpv5WfGNzZf1)V!OfbWOU3-Jd z?gq}RyC`9bW$F=v#9%~Rt1=wm*&c^d-_^uRUSCF5DJ;F(yV#1TMmcL`(sIIZ2xv0Y3lFHV2=k_{*&f3wj(*A z1m;|i!-3I@dm(_bQ_8x`E6 zlEfeuZ$Q~KeG!N8M((PmX|gwTO7cLYPUQ4&)?$3a_{%2saZBeu?dHCx2KgkMi#BRK zW)^W!M=NX+WwQjlTt+x^{=6lSsR!=MX(iYSAlAS~R2)27tx8o{C}7MP3WAY-FQ{x1 zkb5lS`t8#99i4fCftqhUow=qKlEJ96CH3ZK=NWYrD?_&KcJYIB_aNSMk$1V_>DYk!d)i zUyZ@T{uw>SZ=}=`j1i8MI(dNnJ8tstxS6JFBwK&if?*1@s?b!7Hg<=5p=kpm zW>wHO#I6O2sehaLP&zpuuRJacT`=sXyFvVV5h>Id#fDHYp980lD?C}zhEMP}P+*Wu6tg)MzmeG4bgmraqiGIB0R=Agp z*0=#^3#u>0*22+M6p-Urff+k5M;`e=WvgxEzi)ZyDEbM#?Y%i8k#zltD(l?&gloKX zI3>k0sxTejeo%$zHD}9$pDG72J;U7r zhWcwg7(9&UkA%)bz5~iO1>S^2BGW}sQ%zdRTUe7%N?XkS02 z?#y%HH&;Oz%ZrPmI_5JkNceo%nZLwjiywwK3Q;Z-ZHu*DBCem)iPU#Cbb)u48P;;2 zD)PR3D;;RI_BOHFN@i;^ejcvCAZ0F%2GSVAD>M#@fxaQEgt@FGMikr>V&UhlaLtn6 zxA`GR#_O&?e$PKL@Ia&K0nU0qmC27QffiqMRK(8#HaCQ5F#H;0om9eIx8bjqLEcUf z5-5yw?5CyYUdR&))NkGJGZ-_yMBtFqjKau51x)?Q07ThU+klu2lCi=#?ZUCI8wCgWabzw!O!*;-IB;7|tA! z<_mB+AyyXyZc+$&Er8Ke3$9Xbuc$bUs%VD7=EUby1&0=*JUM ztn;AFXQvZ+Pzr3ZbE0q#D~cmAUgjHYULBuyk1uHD|jWG87 zb6!9x&0G@*(d|Of!Pq&I@F;)MaWV_)f+}VF_g5S%`{B^o<7ZGZzG5h>B&)U7F_Cbt zoX``uljETN;> zmT3;Xd}f%QuGSMDM`B7rEvc?8Tm~yJluY7d2!N2pCko^6-BZF$orpNMjA$yb3QfY- z@e-P_iu4+YX>RJgt{ey$&De{KaaT-+VvV2Bk{UWPzVmGj8 z)etS96VYBEKs-R@uD1+?z@zv$fG0fxgNhVPOSApzdc~h7jNa}pQ&ruP40Q*1#Nkyj z$Wu2*74c()0~kZxRdk)}+w(>Hw*Y(ap(-7Siv(f}B>FmD&bk^+<9&HRlsZd_K}GYK z<}N5rV|#_-geW9Cnry-8mq}LON@nz=?~NTbNeREUPZILiV}vSQ1&sKlrTMO72^yZa z{BE4Z8CS^JP9nKQByYOa8!Kj>04wclHZX;5HKve{kXa58EWySJcZ$1t-#QZWK!=W! z!_hQAzh8w*1GBHiib;VINRtOyf#l~x5J^xNgZSNlaVR`0W~Bnah{D@Wf)Z$KBXi#0 z+M9jnEQLL3#d*IDOub=+D4}yXiJX*5MKp*C4e=DVIf^x}Qy>F#d~J@)p`|VS1C7Td zd}=dm7X;X1+Pn-v>~Iy%rS*STr=t+2JwCwXnz&7e>rI3Ej|NiZx4!j zd5?S&t|i|^#I;40{xS@QT_CH0Qu&z%0-oMQ;o5l1F5^&DKD&5w>=u-vV}gXmclSjf zohA7}DrtQ*{2t@jd&Y=RQpO*0ba3htgzLpIKp3v$%eaQQlk2XMH*eSlRx;4_tMJ&h zealh06ChnC=Vicm{UfE$O7zz+_&NJbpe}wlFp0EaLmzeW(?H-`4M{lU z$&;1J3s6udQ;kDhWNOn?nx-C{WpCwS>_O{9k$X`H#8M1{ki~!zpKF6P7aP#-9$!}S zyj(^&2}}4Bl>6-<)(l>%GTr16(#5@0^N}EEu6_7&^4>KN5n)J$7SY19WdpjX9zJpa z1-=Ym+AD$dCufL_X&dR@B|w2Pey#0zht^X;S04PVDK3T^beRO*Cjb)wE+dHpE&==a z4I@O^>&p$y@xAes=V4mHge`Vcl|_PrML77r3912UslqQiY*&gy0{PV_m||M*Fu`JY zna0-PWs_Nmj6#qE)F{TFWMRB4gyGnd{)jl{hL%Nz&QgfNUMI_=CHx(TwmadRuFbvz z#CZm+Lk3*-9dMZt-+}K(teNN#ysR%SeWBJ;4r8ov017DOD+6IbTJ=~Q9;z}a#B>?R z^Ri2@!(4p2;kLg*ru092$}P0Y8^$JiR5tW|TkX3Q@9?#s^kc@73v4lI%H5^dI-E5c zEJ_#yPc_0~IsOua_f|$^VgTp(aqbJyf#Z#R*jeW%jam6zKNk7OwQZ!oxb+v?QL_1y z;T9EiFDh_>R96+zCqW1jm6s{dpCd{r@C6JteQ{=RH*z@{nojVrXSLU&QdZrAaZc5> zci$k+$g}CVYY9K&uPh)#BoF@zpkfqAHX^Yc$l&IR5&B)`i~|(u&w|=F$)!Jv1)(F;I}!LPg;3hYW#)?pxuD zgP6f2qM{5uX)ReLaY;ye1`x7?sf>Ugw8sEzR|1Y z;F2jw%%j`1kGe#>!?gG^Ch+0@cn@SBaM_^+24e!mBLVoe2*z&^_2ts9Hq7{Q!{QP~ zlfXdk9MHDmg%~5TLTeMW-ndXH>}9qb4#i z@Nq3g?z{r86~@Z8-hto88C)z4eFTK!pJ&|!dumBY`>w?TCD<3ZA=I+qLMF}~+|pBo z+#IfIIs!h|a8O2&gFvuUmC3{YN*zdoy6Rkw+{eM^&A>L4^#f-q4UciQvVzgy=!6HZe$cFGWu-B5`ujvFgHyRKZ zRpkt4vd7HXmKWm5ZX`lS98g8cN4KH@OcafN`+(gMB*FR@GnZl_J4*isgHN4LFGoFtiC9%^b;jKjWR@P7*Uqp0yz)3dq6yg{y&MRjWdJ^2hfh}4un!E zmYYVJS;SdoL|aVIUbG^vVfQak`Nx?i;X-_bofH9#X3IokHCPooepv4A)6=NlclnVo ze_&P7yWPOfEyKWq@eSEgJII`+*h~pOD~`hT3{u@p!gJQ~Ra4pJa$a5%%t=NCiVUb8n(#A?Rs2Hc0v9_JNS0)(ozbTY#DL{IZRuRAcHHi zhqG-nPLv%A^DcW$3C?#sSoH~M$MsBK2}TP40U^rOaE7B;LOZHtLNC>#&W|SI;P(XS z4TdAdRhjs;nS+5lulw@1%{w1h8JLNz5Qa7iRgkh2an3E`r;iFz+Oh+|OCB+jt}Zw?M4|d(oLQtog(X~8wVV+p&Yjo6r9+nYzPHeW z0)>LKWkV$=w?8lLeEqdK)PIlVr-|6F7SBV19=18AYqvVbCuX^Cnk?^gOxIc1^d)Sy zWu@=yf}Vep3%mGcCcnA3XG9M98O}z{blzSk1m#j7QCot^V4Rb?^u??a39tEMr;y*E z0oq)$qA3F7YnWrlwVnx1c5Lg|OJaIS(0O3zEpxAi{qSPZxL(;uk6?G{YhGH z{w+k9cAQ!r*oHV|$(uIKZ!7IjIB>a}%B&|3eg!zAaL9t88-^&9H_(zgae`*`HxIvK z>}`0^HO%@HB>W*gXc_UBZ|z>{4CX*UZsK`R=PPC|{zCO!m{m&LFE z3&x*<#MG}a&6nw?wynV#b2K=;Ho=kSRih%nvIs%A6BPP=az;>IvA%hS6rqBRRnjM} zq3{Sv|m-S&EZXCmIeD5^2r0BT95d_WhLMwvUo9{?soi9Tz;}0Xl=`V>wD>B z?vc#HS^uq#hW!%i+b$<5KsZSSFPZ$%wFzZXETq72`ZCN#1vzl_@`!7>lk?|tE1cOC zDivFyffO!|t3XC_#J*vEapuG0Jc=z+*pRcM zxJ>lQ!V?c5xW2%iB2u#o#@hw2orLv|k(ssgtwMik*`rajD>x!zx=7^Crm@_Xx%IkD zHjbTC(Le2~f7ZRVbJ|HQ+3ZKLn#1e13&~CQSF@uhQ%@`g4>2t*F{=_(bt5^miQP!| zpwf)27E!lKP1NdTw5f6=t~ngQn3Hy1ia?VK>T3DAoTl(%rxQ<3AjEElq679Ar(=!w z5weyvuNFUOFGaf|83&xs6lG+HGEz=nwaMQ_1xG2SmrPxl;pAP& z_sy%Z1jY)e9v0!gJ4X)^Qo(hxfTk$A)ele{i}Vuv90T<}(&K<$tNT{1g*qOgaL^uA z+`~v>)shQuQC*+p3!^ZaizhCG-8hn*bZVO**fv@)e6YdNvEmO@t~FC2 zK;tL1p)NZX5C^|vA7@9zi9`OArP$a}dN&|9VkK8V5CgY6lp5CcZPns?-GBhA|zhJb{4#g2dN=S{P6;Gpp{Q7l# z(#2AQ{~5K(eG{vJk>Q^=Sf{N4F69QRo0t|E@&phz({ubY)WO(yNMT{kzxo@$UzLX6e#{QRSDN6- z^T;GzPnao-c0E#d6A#0G1<;WMKu$`vCNP*7%NJEr+ljQGD7&G=rZWH8x2k=UtG9T= z8BGH5GdUFc8@z0xfZ-JCD=OVtm4y?_2t=jMgz*r0#az}zg$|(%a4m*5WQo9hZEy|*x&t)X~ z*Xo`m@12hoi))_sq}cB`afWS7LIlJ>B4F5Vc*OS1j+e_KI`V&#RKvT!P+{{Pa z)yD#CRn`FV89B;a%DCsk(yI1l(92OW+Y2qufXz9)Pycz0D>da3y5MH>ne`UzAB*|A zeG#?Owh{mxvJS2j$%O;S#oV%m@((4SD(Y(R6Z^Um_w$)Yo<47Od>P7TuT!BDky9() z_LiTT5ugy4o6p>N7$8D9i>6+BP=f^nedJl`AU3UjV$xaCjhz0F>pmdMTA4s368Q&1 zi{Ph*LuA*W9E7;;0L~71{sZH4NXrJUXO&42CgIi?t(ZT7OX2S#D)pXeNi8%b56^iD zClY?D9Ax4b3J^V=eCYNbpNEEh#ndW8Zy*X^z&RVfw`myRj4^7BA!WHIo`Ur7IUrhgYCyr@3>kU3DCzW!w70?Vb`K@3 z!qOjoCInO-i{S-t2_{mAQ^R}t!Ek&Z4v*$SjKlj}pVl5zLi+skNjRLxo9dxTN4*Y=u^i7A3jZZonjK-t zRBRFQQ-#pUvQ_Iv*|u+{4~uyPY#8o6TyYq#+lnRl*6O>I)&J|(UMmYJ;{5zX;ou8n zj2&Vapn!44IMTc{Iiwt*VyeUk)8?bz!mxxlig!QB?dH6d~aBO#h$t*5}il`W+G84m|;o2smhn}s~9Ci zKpbnEiQUl($$W|a`&^Iys63;cg19pUk`xCbxh(ovto4=4#qo{7PBUr$2a|-!AI&00 z)-c-!*anLVwm_jk-8!7Q4zFJOYYl%P5ywQ`1{LDrMItyYzA1Asx|+B0sLT!kZYMv&_NZ5s3u4qRW9APD7my-7vxV!Vc@(M!xe_?ZG@xS}8w6!gYY*9>;7wm!HB- zQAv~mh@K&GrN&s!XD$k9y_Q_2Q!75~0^65zuk(=y_LPRKt>YYJed(((vBd(Gn#aL! z4WK& z7gR>&$44HqF$9lq!y1o&^Tuk5t2R#XAyKPubR;?X)HW&vs7gBt>0BixL`Ad)W39!Yrh~hq@c?=r z3YazI7ZEEBVAz8Jj8tCMdXms3;$=8P30l^Z0s($c9ZObxbkRu=LK;fq$feFrx3jyf zJ^nF+Gbe$}MsD)7BELM&R{cZwVk1@}WD**WbU5hggAH$IKcq6aTM+3Ds5eIL5y8OM zUE=&~x5C^(aZb>w&}uHVqCtNd_z#YI&Y?A_8O20uP- zb2zfEDt<*0Np~T;!Unl*Y*kLXy@$r2y4-63XEGDC{w;$9Q*IAHfD21&DJU%agE6Fq zG|OC7`KSm$S$$T_hIK}KSX1!vc6F4fc4hV9>7wU7ygyK?cG~QgqW?BPk{l7ZR%-EP zWC2I423M5p(dddf%=ImGh+-a1B=p6vlaPZ?j7BLFm;dJC1ox-r!?h5t-b#78^%7x2 z_L_;?!Hs34#isq3$SZbK>0JcwLI?k=l>HXmp2RKk5n(oJCAyQ5(}m116 zX8Ncy4fv|h(N2&bo=e~-tW1Ul5tsi{9=V(AvID}9kzlz1Ed*rXhXV(L0yn#!g_!q3m%sxjIB-iH2Xt}j< z#D{_4_J%nu0geb|FIZ)q4(+BgH=@T})*_^%3dXf0X-mA^Spy%2x+T1v#*hpFB4qsM zMiN^}Uhd56X$YL00$r)qF{|~l^ z5T<&|MQ+U#AncI(2H(!Bq`G3WGLvlo=;4Wp;=e)#a)4C?w)qVMte$pS7-QT|iyFo%1-9XC_fdI}B4ozX%9cy7JnXy)w z6^jOj-Y)HTa&zp^n5AR;2{O0*=$0%i zqCxf^eh1hfmSDl?5Fq3ksqvI3<2W`6#^?=71Q z`wS(q|n(w!)IGmV6R3wvM^&nON@5LlnUQ~N*pWs1Jc*Imm&vOTp)8DUrlyz zJ8_0eAU7sb4{_y|;tA#F;*$@MDG)1AGx#r(rdl{tjFv`EB*-vCah2mYaF>Fw`v{@5 zoIeU2`NUk|b2VSRUw%8@gzOf29v+E$kAG9OFJ)|J589mQD%4X&O(={8{vG-Oi_zGV zJYR3SFzTGPQujPO$HZv*0VEw(XI!eYMPj(^^4O+C`@|^Wj6Y&Rlo&<=Quu;>kmi#*x&lkNL8Q!sv zeS+$WfF_Y|9D$^I%Ox=9NL_!HzgKehx?eeKlJPSJTEeN?CsH~t3RAsIc%P*Ir zUnT#p!PVNR*Qt-<;P?shGo{GCiUAFEu;Wl&@k%7iEAkS45rrnO9VOjZJjzK#Ni_Q= zFWZZQc&G|rz?hkl-PzC`QqTne-ZH3x^9q$G_F5yObY$eyxal7I7*#;jap*(BWFt+L zOjzXMEkTx3_Jo2~(}ler$V_LW z*%0UyU|qv}Rq2-)f~3Hu=6V7&NH7#&_=JkU!>thpXEg3G1zM;&XB7B|%c>lX8rw^i zDF}+wby2T>SBQk>fBb&Usr*!>gzeL}8IEIFw$FgYsYB-h@^}5H&-J;nRwVHFv!Be6 z0;FeN?bJ+(ld>@wOo-4U)~AN;J$Yp_Odq0sgBH~99acl+TpR+@=*iEwk@K6>k6%Un zK(R#-l@LBeD&3{%I<)1#&9%^UwtW4`Duw3LyYoT@PS{>B9B;Xz5^r$oJ3$hrnnKE` zl-bNLI^jP2?Kb4QtCLu>9kHb4>M2ln5+o77*AhLV0{k_#wa1E~@KRIImiN24;24Z7 zh?V{CsNnmWipZzII>ZM`e_hEtpx1r+>Gz`Sd6nq=rjLx$ZU`37P3e>qeG;ls*U{6Yj)V@C--xAI^d<|Q|*V1Ff;b!e} z5lC5$TtD7^ggK#PMsxES61b_LxlanR(_5m+4I`czP8A`aoQKpM1KwE(k@L~q8dKh< zZc{SGdR`Woh%*h7?6MVdZabju@GPG{+_)%QmpfUzQS6-`)^E-}hQX(;{5B15WOMKC z6Bs9wHQ@IeA9s46w>k7~ZgPtON~=v)n6{x4GNPAnt^;CD{sfSfV1tz)4*$0S(t_!etzE z!>HhX*Kyy=E7~V27NdCpl=B!9vC7cloK*#;u%ed4Br~egy@zI!jFxLY<-}DUtn$>T z(I3q|6dy9a(y#w%-sEGWlG{%wFZstYfWsXZ#5?>QqC^=yY^xmZNG_W@qIV{o(Tm5% zlh8aE|ApFGP40hxi!el4?BYm?UV=rzuqV$i@EX3jOy|Pf{Di~aq|oUfl@(@5R%hp2 zJPaOBvUxk4jG1N>ie}Nmrd2D(J0>R12LdsmhE7N8v0f{t zc5LBAVmp5O;#Mtg#kN=bx4}OAUvZ+rKItA}`A&9S|f^ZH^_m0n? zzr*R1V{@#RPVKt$X2@wfzV9>+nW8{3OZV#xnb?{#YT^!0=coHzZp(R=e#p5NSl#+T zZ3S=s_p1+huVJ2@+E4k35^RSsVlnG*rW6_lqLD!TpUaM(cT?^m7~j1vXwuUb&)`AfDq+6$Mj-gkA;cgd#XoPQ>oW*RNwBJf~)-~ z4}5!nD~g+Xfac~Jb%|*;^dG{y|Rx z5>u z#2OMEK!KN_GTRhhQkkgtI}*-#M{<=SBDzMs#r_<9_(-W&_4_(^;-Hkw=7smF}%S6V{bi#;F4R6k)-YK!I<9y zVW$|)0SZNM<~75evKZo7?C6ah5SgE{Q{=-J8?VsKLJ*nn(Sc@_9n4>A)qdZzA$;3>9R04;ThWX?t-9ESXBcL==w-~c~?7-=6-gk zhR<$y+r+|^zCp*=T?$9V?*Ld)M`+_Ci>AN3l-?E#%Ufaiaw_LVflK)swZ&o1q|uTO z_3<**x6*@-K6@uW_S8k*&}v_&1EtNi4H4movvn1`ilx79OO-9}{e3-mbkZS}mzkU@ zoFmkdD7hhi*%hlJnai%BcIYQ_w*AqjM^&B@6d?Chnb5TsMrsX08^X65hE6PMy8q_z zzJMDc=U(pebIi(`&JNEN?pWHUX#l@h_|EUCvfQNxy|eWIFX*gBB)u0ux5*c%JH1Ly zApO(p23}+vwd;f}%k+3x_GU)$qP|jN;ennX9ii`yp+tpZ@T!n?a~<^l4$<3qc0FZ> zda2th@4}7W=R9p2S8X{tz<6Q`iCg6g)^{d4n1y-o&syr>DY^ghT(33i+?7ADd-kK| z_H?92`~K|D0l^PXnXE|mcrrEkWum^e>}*S)ZmoUv)Q@EfbxZS< zwky{v>8@0D(AknUR(7nzz_YwaaEn}Jcc$^EkKyvM1z(wx9iIEo``p^A1nh9bWWSpC z>glCl?q6A3(|I5y=xvf$>zF!k`L|>lxQ8YWL-^yWZh2Jl48FI2u-~)lE)aK~&%fKD zav|jBr}cSBffe09XDkPP{f=n$>c~;|eCoAror0C_kL(@lQSzY{JdDg|B)a;E-J)>o zjh14KVAaN{cpV!pwrA4VkKaaN?6atnzh#fa8;uoTY4&(}@H^+4LlS0nJQu3p-26l0 zlSV}OGP=TsNkgl0pMHJxwRE&rbMcd*A424sp!)9Pfox8tS=o9LtKlEq` zAhFw<#Be)uS%0%4NkwwgTffr67bR*>v~X5e{j;!NwkiANgZp?!t~93H!p&`!|KZo$Kq=Wd*#tle+r|2x_kfwv4po zgSB-^y@CzrPx4f6Aht9<`tOont!;%u7>lMmf2B$yJ?Yd|3Z^@^%S>U{?B{t;H&p4y zTTjH82-@W zJ?U{tBaKt5h5E{St0#`Y<(qPFO3W)n@$ci4|4#*ZCZJV!K!tEV75zV(MFqj>5jx|n zykZ|m?9d=CsBMdEP~lB3b|PSR|L>=s1vV??ap$Svb<*Za?8oK4r!|l}CfE5?kHl*F zj1iBOlfw58f!)>rc{!nC9nC|<`X-+mfl1iNzuy;n-`nqXocy(IEo^m$cjhO)2Yi70 zHtp2U=PhlHhu8md1l@H*lO}eS=}}s7CSecd2W4Qn=IJUluAFAJa14cW`S@dvT!oC! z6uY{vWLuJ}HG12N%s=?oGZp37FuSq$-cZ*4FN^d!2}Zda^_%t zn`%iMbE`tkej$6tYA)FKNi{;X#u;aZw!zz2xld>9~j#-ivu-Y2WnA$C`^~H-DcnSQpb}Q!!HH+39#p zmYTf|*nD3S;thX2sXQF7|1hBcL*6RikBqA5pU2`eH#*rHbXPAzC)1{fyABw3M|Zsp z`td+g7D9}~W}V(F^ys9?c|KJtwj7_#`TPKsqKLh(XqV@ef~vE#HC)*?9lv*?w3`ioF$cq9p`U`Cn^S?%CtW3q(5FzF~I}yGD8gvo{*~r zoOJ9KqIa8>c`SEP*v<=!=N{Sa?Q1Uiu-|Th9||!vr4n`#hy~#?-{l2PV+W(Qb#6Y= zRevlgx3kQ-J8fSw_WPYB28qVZ_c&3raK2uxXJO)=mdJSwZZ3_;@W1mUU>Six*}_q8 zucF`6I_VJINS%%Cd>d94d^Tw48QGmOx(MuxJaTSF-_i&ywXvJp5wW{nhw&RWUm>Xtp@y6`zeXI`i?Y`T0se{olJ9C#vMn4woCeY^JfbBNryg zKx?w45igrBZkC5L?hWYSsYK!Q&?!7R(-Ja*NFduccNTguV8=>Ob!@uvr(+kO24H3>?qU#QetV*`q48uh)u&>1u zAZ&CHqWB^Gw=nS}g?u-NLNo^yQz>Eh>z|Uwi;9wpVr`seKJ|fJUhy8phd@T@T-|Aj@r`{$;5U9erbe68ewI^-$ferh480J7En~H+hFDL!( zhBqUb=!gK7jWbk;eHe4^@wU|I{FnDEqw0=*4!?YC+CKe(qymU5ba0uGaqX=eA-{rlevV?G#Ppk$D4~KW7R=F|Eu}cjMxB=mV9> zKH^H7VNVh7^VvofFCyRL_=qw(SOhugTWnF(Kgtk3cx~Sh}r6E;U0pf!a>? zR6Th7m>e&6`UuUdfBkcDzu=BFeKOFo2CZUrP0n#Si|hM!#dS$6&6sXl$7wXJ$i5}A zaxG+|qpw16x@a`5;iI$s--%zT^AkOpU;Ro08-mEh`uH~>eO`~?$E|U?l(l4~Qt6MZ zF&^+NRwFSp)bmOo{eus;+b_Mw_f}bV^ZBMlup3!>nwv2hFqAsB+*%?}bOOP=caFR# z4`coJH3yHCXdGIkth3_lx{fVP`}H~m36D3XGfbb97&FQa;|haoB+E4 zsWS~F7q>OzQLMEAE}MP%hhnLLLIJy;?7iThgTYQ})PbD;UUCUbz-XxSEZXV4VW`wm z@KVeQYLpV99B1{($p>>t%pCcln+VmOcMX)*X^UMshQ<@<1w2~tv)N9rnEY#LO)W! z@{OAAW~cq?RqDb9?k5#CASUqkg{V^ShE*85lb<)bZ!cUQ;l5?bGOT%GV3ab>{cHfh9h^om^2A`V_={P!E z@~%ir^}aP*saL#7rs<4{M%zeM;*Q%WG*QB|9NR-e6M^rFII*q@#%xLAc4J6-C#uC_E_XZsd1B%Qvxis#=-@u67r z^n78=#V%fy9kj8d_@;}aLHeMw?ufPuUtfFmy%T9BY?;=YXjF|#Ul&F1FYL;B5ZGPm z{ZsQeaC|T=5p?Wt(}%|g-ywc>qMdsieaBM*N0N$TUW1iDz3+`?$poZysEqV-zV)tyRIPsSHJwvB_2>Qg)LN3XdI}pF6VAigVIu=f6D&f z1-2*z%6`Z^xrI>~zPWd4fC``Yjr;-!sdSSJ>+I}9dTa5{qrb~)ey2$(C%n1lEguxq^~2r);2hKZ{HrX z^gXRYtuqB*`DT(Fj}@INYafr$i9KF>sx>9urq#Fh)ZFfp{=ltw9JblCWfh_t-h3^{ zL9a}*ysb0%@QvNUO<7HPnGOG*ac`WtH)A+ko474`Pyd13qWudcql@qP#rOU5+@Ur1 zbBc$6?7mz#xvWN}rdD$~BIeY{TeN330_@4QrNVEj{qo+zIi%LdCHinea$Ve6~K2!Q4HM;(6CyVFB{ z(1)Jyc|7gZS~R6-*%6eWVVxJRvt|{vTza%!bJ1l%*!6#3<7$$*cJtrYJ--Rn&Zf>M zF}9b#^sjDBM$v-9TLtB13OU^&Xyvg~(+jxkK z`f{Iy38$=mbE^j0W<@TSz%%pzZzmZ9N^ec)`}EJ-boKwGwX^?ATKv!3n#3S+PXD^* z^|iais^CgzDn{f`_;^Ns}sNVudeww{afxob|w}Dzt7j2U;W%_#BePW z!*Re32t^YgF)>`9aQakU%f_#lB&tNES8CtZIGuUV?AN5<^KGGKmF4_9zGBw1wd_|v vXQwi(x!iQ>%&AveuQ$|cPp_OZx9r#dm*plKo=JY0#sCDKu6{1-oD!M<%#K&b From 79660f3f6fe44b0f33ec617361199de719611104 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 29 May 2016 23:39:50 +0200 Subject: [PATCH 194/322] Made hasCapability not call getCapability. Supposedly closes #97 --- .../mod/tile/TileEntityInventoryBase.java | 8 ++++++-- .../mod/tile/TileEntityPhantomItemface.java | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 1f2c8190d..884deb7c9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -223,13 +223,13 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public boolean hasCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ - return this.getCapability(capability, facing) != null; + return this.canHandleCapability(capability) || super.hasCapability(capability, facing); } @Nonnull @Override public T getCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ - if(this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ + if(this.canHandleCapability(capability)){ return (T)this.invWrappers[facing.ordinal()]; } else{ @@ -237,6 +237,10 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } + private boolean canHandleCapability(Capability capability){ + return this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; + } + public boolean hasInvWrapperCapabilities(){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 39b1e38b4..640885e50 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -122,6 +122,11 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ return this.isBoundThingInRange() && (this.getSided() == null || this.getSided().canExtractItem(slot, stack, side)); } + @Override + public boolean hasCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ + return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).hasCapability(capability, facing) : super.hasCapability(capability, facing); + } + @Nonnull @Override public T getCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ From 4e0082ed7df81f51f5a770f23946418100d32e6c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 29 May 2016 23:49:35 +0200 Subject: [PATCH 195/322] Remove all uses of @Nonnull because it's stupid anyways. ACTUALLY closes #97. --- .../mod/blocks/BlockAtomicReconstructor.java | 10 +++---- .../mod/blocks/BlockBookletStand.java | 6 ++-- .../mod/blocks/BlockBreaker.java | 6 ++-- .../mod/blocks/BlockCanolaPress.java | 6 ++-- .../mod/blocks/BlockCoalGenerator.java | 6 ++-- .../mod/blocks/BlockCoffeeMachine.java | 8 ++--- .../mod/blocks/BlockColoredLamp.java | 10 +++---- .../mod/blocks/BlockCompost.java | 10 +++---- .../mod/blocks/BlockCrystal.java | 2 +- .../mod/blocks/BlockDirectionalBreaker.java | 6 ++-- .../mod/blocks/BlockDropper.java | 6 ++-- .../mod/blocks/BlockEnergizer.java | 6 ++-- .../mod/blocks/BlockFeeder.java | 6 ++-- .../mod/blocks/BlockFermentingBarrel.java | 6 ++-- .../mod/blocks/BlockFireworkBox.java | 6 ++-- .../mod/blocks/BlockFishingNet.java | 6 ++-- .../mod/blocks/BlockFluidCollector.java | 6 ++-- .../mod/blocks/BlockFurnaceDouble.java | 8 ++--- .../mod/blocks/BlockFurnaceSolar.java | 6 ++-- .../mod/blocks/BlockGiantChest.java | 10 +++---- .../mod/blocks/BlockGreenhouseGlass.java | 8 ++--- .../mod/blocks/BlockGrinder.java | 8 ++--- .../mod/blocks/BlockHeatCollector.java | 4 +-- .../mod/blocks/BlockInputter.java | 12 ++++---- .../mod/blocks/BlockItemRepairer.java | 8 ++--- .../mod/blocks/BlockItemViewer.java | 4 +-- .../mod/blocks/BlockLaserRelay.java | 6 ++-- .../blocks/BlockLavaFactoryController.java | 4 +-- .../mod/blocks/BlockLeafGenerator.java | 6 ++-- .../mod/blocks/BlockMiner.java | 6 ++-- .../mod/blocks/BlockMisc.java | 2 +- .../mod/blocks/BlockOilGenerator.java | 6 ++-- .../mod/blocks/BlockPhantom.java | 6 ++-- .../mod/blocks/BlockPhantomBooster.java | 6 ++-- .../mod/blocks/BlockRangedCollector.java | 6 ++-- .../mod/blocks/BlockSlabs.java | 12 ++++---- .../mod/blocks/BlockSmileyCloud.java | 6 ++-- .../mod/blocks/BlockTreasureChest.java | 2 +- .../mod/blocks/BlockWallAA.java | 16 +++++----- .../mod/blocks/BlockWildPlant.java | 12 ++++---- .../mod/blocks/BlockXPSolidifier.java | 6 ++-- .../mod/blocks/base/BlockBase.java | 4 +-- .../mod/blocks/base/BlockBushBase.java | 4 +-- .../mod/blocks/base/BlockContainerBase.java | 10 +++---- .../mod/blocks/base/BlockPlant.java | 10 +++---- .../mod/blocks/base/ItemBlockBase.java | 4 +-- .../mod/blocks/render/RenderCompost.java | 2 +- .../render/RenderReconstructorLens.java | 2 +- .../mod/blocks/render/RenderSmileyCloud.java | 2 +- .../mod/booklet/GuiBooklet.java | 2 +- .../mod/booklet/GuiBookletStand.java | 2 +- .../mod/booklet/button/BookmarkButton.java | 2 +- .../mod/booklet/button/IndexButton.java | 2 +- .../mod/booklet/button/TexturedButton.java | 2 +- .../mod/creative/CreativeTab.java | 6 ++-- .../gen/VillageComponentCustomCropField.java | 2 +- .../mod/gen/VillageComponentJamHouse.java | 2 +- .../mod/gen/WorldGenLushCaves.java | 2 +- .../mod/inventory/ContainerBreaker.java | 2 +- .../mod/inventory/ContainerCanolaPress.java | 2 +- .../mod/inventory/ContainerCoalGenerator.java | 2 +- .../mod/inventory/ContainerCoffeeMachine.java | 2 +- .../mod/inventory/ContainerCrafter.java | 2 +- .../ContainerDirectionalBreaker.java | 2 +- .../mod/inventory/ContainerDrill.java | 14 ++++----- .../mod/inventory/ContainerDropper.java | 2 +- .../mod/inventory/ContainerEnergizer.java | 2 +- .../mod/inventory/ContainerEnervator.java | 2 +- .../mod/inventory/ContainerFeeder.java | 2 +- .../inventory/ContainerFermentingBarrel.java | 2 +- .../inventory/ContainerFluidCollector.java | 2 +- .../mod/inventory/ContainerFurnaceDouble.java | 2 +- .../mod/inventory/ContainerGiantChest.java | 2 +- .../mod/inventory/ContainerGrinder.java | 2 +- .../mod/inventory/ContainerInputter.java | 2 +- .../ContainerLaserRelayItemWhitelist.java | 2 +- .../mod/inventory/ContainerMiner.java | 2 +- .../mod/inventory/ContainerOilGenerator.java | 2 +- .../mod/inventory/ContainerPhantomPlacer.java | 2 +- .../inventory/ContainerRangedCollector.java | 2 +- .../mod/inventory/ContainerRepairer.java | 2 +- .../mod/inventory/ContainerSmileyCloud.java | 2 +- .../mod/inventory/ContainerXPSolidifier.java | 2 +- .../mod/inventory/gui/GuiInputter.java | 4 +-- .../mod/inventory/slot/SlotImmovable.java | 2 +- .../mod/items/ItemAllToolAA.java | 10 +++---- .../mod/items/ItemAxeAA.java | 2 +- .../mod/items/ItemBattery.java | 2 +- .../mod/items/ItemBooklet.java | 8 ++--- .../mod/items/ItemChestToCrateUpgrade.java | 4 +-- .../mod/items/ItemCoffee.java | 6 ++-- .../mod/items/ItemCoffeeBean.java | 2 +- .../mod/items/ItemCrafterOnAStick.java | 6 ++-- .../mod/items/ItemCrystal.java | 4 +-- .../mod/items/ItemDrill.java | 20 ++++++------- .../mod/items/ItemDrillUpgrade.java | 4 +-- .../actuallyadditions/mod/items/ItemDust.java | 6 ++-- .../mod/items/ItemFertilizer.java | 4 +-- .../mod/items/ItemFoods.java | 8 ++--- .../mod/items/ItemGeneric.java | 2 +- .../mod/items/ItemGrowthRing.java | 2 +- .../mod/items/ItemHairyBall.java | 6 ++-- .../actuallyadditions/mod/items/ItemJams.java | 8 ++--- .../mod/items/ItemKnife.java | 10 +++---- .../mod/items/ItemLaserWrench.java | 4 +-- .../mod/items/ItemLeafBlower.java | 8 ++--- .../mod/items/ItemMagnetRing.java | 2 +- .../actuallyadditions/mod/items/ItemMisc.java | 4 +-- .../mod/items/ItemPhantomConnector.java | 4 +-- .../mod/items/ItemPickaxeAA.java | 2 +- .../mod/items/ItemPotionRing.java | 10 +++---- .../items/ItemRarmorModuleReconstructor.java | 2 +- .../mod/items/ItemResonantRice.java | 6 ++-- .../mod/items/ItemShovelAA.java | 2 +- .../mod/items/ItemSolidifiedExperience.java | 6 ++-- .../mod/items/ItemSpawnerChanger.java | 2 +- .../mod/items/ItemTeleStaff.java | 6 ++-- .../mod/items/ItemWaterRemovalRing.java | 2 +- .../mod/items/ItemWingsOfTheBats.java | 2 +- .../mod/items/base/ItemArmorAA.java | 2 +- .../mod/items/base/ItemEnergy.java | 2 +- .../mod/items/base/ItemHoeAA.java | 2 +- .../mod/items/base/ItemSeed.java | 4 +-- .../mod/items/base/ItemSwordAA.java | 4 +-- .../mod/items/base/ItemToolAA.java | 4 +-- .../mod/items/lens/ItemLens.java | 2 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 4 +-- .../mod/jei/RecipeWrapperWithButton.java | 2 +- .../jei/booklet/BookletRecipeCategory.java | 12 ++++---- .../mod/jei/booklet/BookletRecipeHandler.java | 10 +++---- .../mod/jei/booklet/BookletRecipeWrapper.java | 6 ++-- .../coffee/CoffeeMachineRecipeCategory.java | 12 ++++---- .../coffee/CoffeeMachineRecipeHandler.java | 10 +++---- .../coffee/CoffeeMachineRecipeWrapper.java | 6 ++-- .../jei/crusher/CrusherRecipeCategory.java | 12 ++++---- .../mod/jei/crusher/CrusherRecipeHandler.java | 10 +++---- .../mod/jei/crusher/CrusherRecipeWrapper.java | 6 ++-- .../ReconstructorRecipeCategory.java | 12 ++++---- .../ReconstructorRecipeHandler.java | 10 +++---- .../ReconstructorRecipeWrapper.java | 6 ++-- .../mod/misc/DamageSources.java | 2 +- .../mod/misc/DispenserHandlerFertilize.java | 2 +- .../actuallyadditions/mod/misc/WorldData.java | 6 ++-- .../mod/proxy/ClientProxy.java | 2 +- .../tile/TileEntityAtomicReconstructor.java | 6 ++-- .../mod/tile/TileEntityBase.java | 6 ++-- .../mod/tile/TileEntityBreaker.java | 6 ++-- .../mod/tile/TileEntityCanolaPress.java | 6 ++-- .../mod/tile/TileEntityCoalGenerator.java | 6 ++-- .../mod/tile/TileEntityCoffeeMachine.java | 6 ++-- .../mod/tile/TileEntityCompost.java | 6 ++-- .../tile/TileEntityDirectionalBreaker.java | 6 ++-- .../mod/tile/TileEntityDropper.java | 6 ++-- .../mod/tile/TileEntityEnergizer.java | 6 ++-- .../mod/tile/TileEntityEnervator.java | 6 ++-- .../mod/tile/TileEntityFeeder.java | 6 ++-- .../mod/tile/TileEntityFurnaceDouble.java | 6 ++-- .../mod/tile/TileEntityGiantChest.java | 6 ++-- .../mod/tile/TileEntityGrinder.java | 6 ++-- .../mod/tile/TileEntityInputter.java | 6 ++-- .../mod/tile/TileEntityInventoryBase.java | 30 ++++++++----------- .../mod/tile/TileEntityItemRepairer.java | 6 ++-- .../mod/tile/TileEntityItemViewer.java | 8 ++--- .../mod/tile/TileEntityLaserRelay.java | 2 +- .../TileEntityLaserRelayItemWhitelist.java | 12 ++++---- .../mod/tile/TileEntityMiner.java | 6 ++-- .../mod/tile/TileEntityPhantomItemface.java | 16 +++++----- .../mod/tile/TileEntityPhantomPlacer.java | 6 ++-- .../mod/tile/TileEntityPhantomface.java | 6 ++-- .../mod/tile/TileEntityRangedCollector.java | 6 ++-- .../mod/tile/TileEntityXPSolidifier.java | 6 ++-- .../mod/util/FluidStateMapper.java | 8 ++--- 172 files changed, 470 insertions(+), 474 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index fe8b8abf0..28582ae4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -97,14 +97,14 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud return true; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int i){ + public TileEntity createNewTileEntity(World world, int i){ return new TileEntityAtomicReconstructor(); } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } @@ -163,7 +163,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud this.setMaxDamage(0); } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -175,7 +175,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud } @Override - public void addInformation(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull List list, boolean bool){ + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ long sysTime = System.currentTimeMillis(); if(this.lastSysTime+3000 < sysTime){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java index ea52adbb7..a59e8c76b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java @@ -64,7 +64,7 @@ public class BlockBookletStand extends BlockContainerBase implements IHudDisplay } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ int meta = this.getMetaFromState(state); @@ -133,9 +133,9 @@ public class BlockBookletStand extends BlockContainerBase implements IHudDisplay super.onBlockPlacedBy(world, pos, state, player, stack); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityBookletStand(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index 072a50315..f425a036a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -48,9 +48,9 @@ public class BlockBreaker extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return this.isPlacer ? new TileEntityPlacer() : new TileEntityBreaker(); } @@ -88,7 +88,7 @@ public class BlockBreaker extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 96fdadc62..2614a7432 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -38,9 +38,9 @@ public class BlockCanolaPress extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityCanolaPress(); } @@ -64,7 +64,7 @@ public class BlockCanolaPress extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index d9c14ff0b..5d0b6888e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -49,9 +49,9 @@ public class BlockCoalGenerator extends BlockContainerBase{ this.setTickRandomly(true); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityCoalGenerator(); } @@ -90,7 +90,7 @@ public class BlockCoalGenerator extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 1cc9f8d0b..7cf0671da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -49,7 +49,7 @@ public class BlockCoffeeMachine extends BlockContainerBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; @@ -81,14 +81,14 @@ public class BlockCoffeeMachine extends BlockContainerBase{ return true; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int meta){ + public TileEntity createNewTileEntity(World world, int meta){ return new TileEntityCoffeeMachine(); } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 103204861..45eb885ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -101,7 +101,7 @@ public class BlockColoredLamp extends BlockBase{ } @Override - public ItemStack createStackedBlock(@Nonnull IBlockState state){ + public ItemStack createStackedBlock(IBlockState state){ return new ItemStack(InitBlocks.blockColoredLamp, 1, this.getMetaFromState(state)); } @@ -114,7 +114,7 @@ public class BlockColoredLamp extends BlockBase{ } @Override - public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ return this.isOn ? 15 : 0; } @@ -148,16 +148,16 @@ public class BlockColoredLamp extends BlockBase{ this.setMaxDamage(0); } - @Nonnull + @Override - public String getItemStackDisplayName(@Nonnull ItemStack stack){ + public String getItemStackDisplayName(ItemStack stack){ if(stack.getItemDamage() >= allLampTypes.length){ return StringUtil.BUGGED_ITEM_NAME; } return StringUtil.localize(this.getUnlocalizedName(stack)+".name")+(((BlockColoredLamp)this.block).isOn ? " ("+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".onSuffix.desc")+")" : ""); } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return InitBlocks.blockColoredLamp.getUnlocalizedName()+allLampTypes[stack.getItemDamage()].name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 9ed630b50..77924b729 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -58,7 +58,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; @@ -66,7 +66,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ @SuppressWarnings("deprecation") @Override - public void addCollisionBoxToList(IBlockState state, @Nonnull World worldIn, @Nonnull BlockPos pos, @Nonnull AxisAlignedBB entityBox, @Nonnull List collidingBoxes, Entity entityIn){ + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn){ addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_LEGS); addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_WEST); addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_NORTH); @@ -144,14 +144,14 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ return false; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int meta){ + public TileEntity createNewTileEntity(World world, int meta){ return new TileEntityCompost(); } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index 9572745d7..22909b0f5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -85,7 +85,7 @@ public class BlockCrystal extends BlockBase{ this.setMaxDamage(0); } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allCrystals.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allCrystals[stack.getItemDamage()].name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index b7fc191d3..9718183c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -45,9 +45,9 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityDirectionalBreaker(); } @@ -85,7 +85,7 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index aae3d739b..56b8e97d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -44,9 +44,9 @@ public class BlockDropper extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityDropper(); } @@ -84,7 +84,7 @@ public class BlockDropper extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java index 337333a5c..86da9415c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java @@ -42,9 +42,9 @@ public class BlockEnergizer extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return this.isEnergizer ? new TileEntityEnergizer() : new TileEntityEnervator(); } @@ -74,7 +74,7 @@ public class BlockEnergizer extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index 80d2d63ef..98b46ca3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -38,9 +38,9 @@ public class BlockFeeder extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityFeeder(); } @@ -62,7 +62,7 @@ public class BlockFeeder extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index b6a6e8910..8adeba061 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -38,14 +38,14 @@ public class BlockFermentingBarrel extends BlockContainerBase{ this.setSoundType(SoundType.WOOD); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityFermentingBarrel(); } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java index b8471edb9..16c75b664 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java @@ -37,9 +37,9 @@ public class BlockFireworkBox extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityFireworkBox(); } @@ -54,7 +54,7 @@ public class BlockFireworkBox extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index eafef688f..e265ecb17 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -38,15 +38,15 @@ public class BlockFishingNet extends BlockContainerBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityFishingNet(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index dbecd1b7b..297478819 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -49,9 +49,9 @@ public class BlockFluidCollector extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return this.isPlacer ? new TileEntityFluidPlacer() : new TileEntityFluidCollector(); } @@ -91,7 +91,7 @@ public class BlockFluidCollector extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index 638c4061e..bedd187d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -51,9 +51,9 @@ public class BlockFurnaceDouble extends BlockContainerBase{ this.setTickRandomly(true); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityFurnaceDouble(); } @@ -105,7 +105,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ } @Override - public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ return PosUtil.getMetadata(state) > 3 ? 12 : 0; } @@ -140,7 +140,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index 92cfac5f8..6b60b59a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -38,15 +38,15 @@ public class BlockFurnaceSolar extends BlockContainerBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityFurnaceSolar(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index d27503e1e..0af027460 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -45,9 +45,9 @@ public class BlockGiantChest extends BlockContainerBase{ this.setSoundType(SoundType.WOOD); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityGiantChest(); } @@ -85,9 +85,9 @@ public class BlockGiantChest extends BlockContainerBase{ super.onBlockPlacedBy(world, pos, state, entity, stack); } - @Nonnull + @Override - public ArrayList getDrops(IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune){ + public ArrayList getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ ArrayList drops = super.getDrops(world, pos, state, fortune); TileEntity tile = world.getTileEntity(pos); @@ -121,7 +121,7 @@ public class BlockGiantChest extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityGiantChest){ if(!ItemUtil.contains(((TileEntityGiantChest)tile).slots, new ItemStack(InitItems.itemCrateKeeper), false)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index e3018a2bc..9b5943d13 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -48,7 +48,7 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ @SuppressWarnings("deprecation") @Override @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockState state, @Nonnull IBlockAccess worldIn, @Nonnull BlockPos pos, EnumFacing side){ + public boolean shouldSideBeRendered(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side){ Block block = state.getBlock(); return worldIn.getBlockState(pos.offset(side.getOpposite())) != state || block != this && block != this && super.shouldSideBeRendered(state, worldIn, pos, side); @@ -60,7 +60,7 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ return false; } - @Nonnull + @Override @SideOnly(Side.CLIENT) public BlockRenderLayer getBlockLayer(){ @@ -72,9 +72,9 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ return EnumRarity.EPIC; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityGreenhouseGlass(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index 3f0a01a51..4a9f78bfa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -52,9 +52,9 @@ public class BlockGrinder extends BlockContainerBase{ this.setTickRandomly(true); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return this.isDouble ? new TileEntityGrinderDouble() : new TileEntityGrinder(); } @@ -86,7 +86,7 @@ public class BlockGrinder extends BlockContainerBase{ } @Override - public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; } @@ -101,7 +101,7 @@ public class BlockGrinder extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java index 9bf8b2f9f..2127f5939 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java @@ -31,9 +31,9 @@ public class BlockHeatCollector extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityHeatCollector(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index 9a9631089..c52559bec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -52,9 +52,9 @@ public class BlockInputter extends BlockContainerBase{ this.isAdvanced = isAdvanced; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return this.isAdvanced ? new TileEntityInputterAdvanced() : new TileEntityInputter(); } @@ -71,7 +71,7 @@ public class BlockInputter extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ if(!world.isRemote){ TileEntity aTile = world.getTileEntity(pos); if(aTile instanceof TileEntityInventoryBase){ @@ -103,7 +103,7 @@ public class BlockInputter extends BlockContainerBase{ this.setMaxDamage(0); } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -114,9 +114,9 @@ public class BlockInputter extends BlockContainerBase{ return damage; } - @Nonnull + @Override - public String getItemStackDisplayName(@Nonnull ItemStack stack){ + public String getItemStackDisplayName(ItemStack stack){ long sysTime = System.currentTimeMillis(); if(this.lastSysTime+5000 < sysTime){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index cf4573ea9..dc1684794 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -42,9 +42,9 @@ public class BlockItemRepairer extends BlockContainerBase{ this.setTickRandomly(true); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityItemRepairer(); } @@ -61,7 +61,7 @@ public class BlockItemRepairer extends BlockContainerBase{ } @Override - public int getLightValue(@Nonnull IBlockState state, IBlockAccess world, @Nonnull BlockPos pos){ + public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; } @@ -71,7 +71,7 @@ public class BlockItemRepairer extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index d732577a6..988362dbb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -31,9 +31,9 @@ public class BlockItemViewer extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World worldIn, int meta){ + public TileEntity createNewTileEntity(World worldIn, int meta){ return new TileEntityItemViewer(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 66ba5c923..388ec7a1d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -60,7 +60,7 @@ public class BlockLaserRelay extends BlockContainerBase{ return false; } - @Nonnull + @Override public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, int meta, EntityLivingBase base){ return this.getStateFromMeta(side.ordinal()); @@ -90,9 +90,9 @@ public class BlockLaserRelay extends BlockContainerBase{ return false; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int i){ + public TileEntity createNewTileEntity(World world, int i){ switch(this.type){ case ITEM: return new TileEntityLaserRelayItem(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java index 51f851185..af0c323f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java @@ -40,9 +40,9 @@ public class BlockLavaFactoryController extends BlockContainerBase implements IH this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityLavaFactoryController(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java index d788ea5ef..dd10226b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java @@ -33,9 +33,9 @@ public class BlockLeafGenerator extends BlockContainerBase{ this.setSoundType(SoundType.METAL); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityLeafGenerator(); } @@ -45,7 +45,7 @@ public class BlockLeafGenerator extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index a6f4921a6..5d478f291 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -68,14 +68,14 @@ public class BlockMiner extends BlockContainerBase implements IHudDisplay{ return EnumRarity.RARE; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int i){ + public TileEntity createNewTileEntity(World world, int i){ return new TileEntityMiner(); } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index f8f803efb..0fc517d3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -85,7 +85,7 @@ public class BlockMisc extends BlockBase{ this.setMaxDamage(0); } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= ALL_MISC_BLOCKS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_MISC_BLOCKS[stack.getItemDamage()].name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index e2fb09a1c..2f5792001 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -49,9 +49,9 @@ public class BlockOilGenerator extends BlockContainerBase{ this.setTickRandomly(true); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityOilGenerator(); } @@ -90,7 +90,7 @@ public class BlockOilGenerator extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index e3840ba91..b38bf8de2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -85,16 +85,16 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ if(this.type == Type.PLACER || this.type == Type.BREAKER){ this.dropInventory(world, pos); } super.breakBlock(world, pos, state); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ switch(this.type){ case PLACER: return new TileEntityPhantomPlacer(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index 99c925a60..6b235fa5d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -38,7 +38,7 @@ public class BlockPhantomBooster extends BlockContainerBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; @@ -61,9 +61,9 @@ public class BlockPhantomBooster extends BlockContainerBase{ return EnumRarity.EPIC; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int i){ + public TileEntity createNewTileEntity(World world, int i){ return new TileEntityPhantomBooster(); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java index b616b5416..f576249d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java @@ -38,9 +38,9 @@ public class BlockRangedCollector extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityRangedCollector(); } @@ -62,7 +62,7 @@ public class BlockRangedCollector extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ if(!world.isRemote){ TileEntity aTile = world.getTileEntity(pos); if(aTile instanceof TileEntityRangedCollector){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index 43ed42f91..3a54d6830 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -80,7 +80,7 @@ public class BlockSlabs extends BlockBase{ return false; } - @Nonnull + @Override public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer){ if(facing.ordinal() == 1){ @@ -93,7 +93,7 @@ public class BlockSlabs extends BlockBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return state.getValue(META) == 1 ? AABB_TOP_HALF : AABB_BOTTOM_HALF; @@ -123,9 +123,9 @@ public class BlockSlabs extends BlockBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override - public EnumActionResult onItemUse(ItemStack stack, @Nonnull EntityPlayer playerIn, World worldIn, @Nonnull BlockPos pos, EnumHand hand, @Nonnull EnumFacing facing, float hitX, float hitY, float hitZ){ + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ if(stack.stackSize != 0 && playerIn.canPlayerEdit(pos.offset(facing), facing, stack)){ IBlockState state = worldIn.getBlockState(pos); @@ -154,7 +154,7 @@ public class BlockSlabs extends BlockBase{ @Override @SideOnly(Side.CLIENT) - public boolean canPlaceBlockOnSide(World worldIn, @Nonnull BlockPos pos, @Nonnull EnumFacing side, EntityPlayer player, @Nonnull ItemStack stack){ + public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack){ IBlockState state = worldIn.getBlockState(pos); if(state.getBlock() == this.block){ @@ -187,7 +187,7 @@ public class BlockSlabs extends BlockBase{ return false; } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 5e3dd1f74..c8c287201 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -89,14 +89,14 @@ public class BlockSmileyCloud extends BlockContainerBase{ return true; } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int meta){ + public TileEntity createNewTileEntity(World world, int meta){ return new TileEntitySmileyCloud(); } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); super.breakBlock(world, pos, state); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index f3b9f64f9..038876caf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -98,7 +98,7 @@ public class BlockTreasureChest extends BlockBase{ } @Override - public boolean canSilkHarvest(World world, BlockPos pos, @Nonnull IBlockState state, EntityPlayer player){ + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 04b95d5a6..07150301c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -80,9 +80,9 @@ public class BlockWallAA extends BlockBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override - public IBlockState getActualState(@Nonnull IBlockState state, IBlockAccess worldIn, BlockPos pos){ + public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos){ boolean flag = this.canConnectTo(worldIn, pos.north()); boolean flag1 = this.canConnectTo(worldIn, pos.east()); boolean flag2 = this.canConnectTo(worldIn, pos.south()); @@ -105,12 +105,12 @@ public class BlockWallAA extends BlockBase{ @SuppressWarnings("deprecation") @Override @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockState blockState, @Nonnull IBlockAccess blockAccess, @Nonnull BlockPos pos, EnumFacing side){ + public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side){ return side != EnumFacing.DOWN || super.shouldSideBeRendered(blockState, blockAccess, pos, side); } @SuppressWarnings("deprecation") - @Nonnull + @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ state = this.getActualState(state, source, pos); @@ -119,7 +119,7 @@ public class BlockWallAA extends BlockBase{ @SuppressWarnings("deprecation") @Override - public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, @Nonnull World worldIn, @Nonnull BlockPos pos){ + public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ blockState = this.getActualState(blockState, worldIn, pos); return CLIP_AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(blockState)]; } @@ -138,7 +138,7 @@ public class BlockWallAA extends BlockBase{ @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) - public void getSubBlocks(@Nonnull Item item, CreativeTabs tab, List list){ + public void getSubBlocks(Item item, CreativeTabs tab, List list){ list.add(new ItemStack(item, 1, 0)); } @@ -149,7 +149,7 @@ public class BlockWallAA extends BlockBase{ return block != Blocks.BARRIER && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial(state).isOpaque() && block.isFullCube(state)) && block.getMaterial(state) != Material.GOURD)); } - @Nonnull + @Override public IBlockState getStateFromMeta(int meta){ return this.getDefaultState(); @@ -160,7 +160,7 @@ public class BlockWallAA extends BlockBase{ return 0; } - @Nonnull + @Override protected BlockStateContainer createBlockState(){ return new BlockStateContainer(this, BlockWall.UP, BlockWall.NORTH, BlockWall.EAST, BlockWall.WEST, BlockWall.SOUTH); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 9cd7d369b..64f34b1e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -56,10 +56,10 @@ public class BlockWildPlant extends BlockBushBase{ return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.WATER : PosUtil.getBlock(offset, world).canSustainPlant(world.getBlockState(offset), world, offset, EnumFacing.UP, this); } - @Nonnull + @Override @SideOnly(Side.CLIENT) - public ItemStack getPickBlock(@Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player){ + public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player){ int metadata = PosUtil.getMetadata(pos, world); return metadata >= allWildPlants.length ? null : new ItemStack(((BlockPlant)allWildPlants[metadata].wildVersionOf).seedItem); } @@ -73,15 +73,15 @@ public class BlockWildPlant extends BlockBushBase{ } @SuppressWarnings("deprecation") - @Nonnull + @Override - public List getDrops(IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune){ + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ int metadata = PosUtil.getMetadata(state); return metadata >= allWildPlants.length ? null : allWildPlants[metadata].wildVersionOf.getDrops(world, pos, allWildPlants[metadata].wildVersionOf.getStateFromMeta(7), fortune); } @Override - public boolean canSilkHarvest(World world, BlockPos pos, @Nonnull IBlockState state, EntityPlayer player){ + public boolean canSilkHarvest(World world, BlockPos pos, IBlockState state, EntityPlayer player){ return false; } @@ -120,7 +120,7 @@ public class BlockWildPlant extends BlockBushBase{ this.setMaxDamage(0); } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allWildPlants.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allWildPlants[stack.getItemDamage()].name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index 4dc6b850b..010d76add 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -48,9 +48,9 @@ public class BlockXPSolidifier extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @Nonnull + @Override - public TileEntity createNewTileEntity(@Nonnull World world, int par2){ + public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityXPSolidifier(); } @@ -97,7 +97,7 @@ public class BlockXPSolidifier extends BlockContainerBase{ } @Override - public void breakBlock(World world, @Nonnull BlockPos pos, @Nonnull IBlockState state){ + public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityXPSolidifier){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 81d30e727..9cc617dca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -61,7 +61,7 @@ public class BlockBase extends Block{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); @@ -72,7 +72,7 @@ public class BlockBase extends Block{ return this.getMetaProperty() == null ? super.getMetaFromState(state) : state.getValue(this.getMetaProperty()); } - @Nonnull + @Override protected BlockStateContainer createBlockState(){ return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index 0fb821ef4..ba55ea587 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -61,7 +61,7 @@ public class BlockBushBase extends BlockBush{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); @@ -72,7 +72,7 @@ public class BlockBushBase extends BlockBush{ return this.getMetaProperty() == null ? super.getMetaFromState(state) : state.getValue(this.getMetaProperty()); } - @Nonnull + @Override protected BlockStateContainer createBlockState(){ return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index ae63288b4..19d84e0fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -130,7 +130,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } @SuppressWarnings("deprecation") - @Nonnull + @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); @@ -241,15 +241,15 @@ public abstract class BlockContainerBase extends BlockContainer{ return 0; } - @Nonnull + @Override protected BlockStateContainer createBlockState(){ return this.getMetaProperty() == null ? super.createBlockState() : new BlockStateContainer(this, this.getMetaProperty()); } - @Nonnull + @Override - public ArrayList getDrops(IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune){ + public ArrayList getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ ArrayList drops = new ArrayList(); TileEntity tile = world.getTileEntity(pos); @@ -295,7 +295,7 @@ public abstract class BlockContainerBase extends BlockContainer{ return null; } - @Nonnull + @Override public EnumBlockRenderType getRenderType(IBlockState state){ return EnumBlockRenderType.MODEL; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 10df827ff..9ab300ebe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -73,7 +73,7 @@ public class BlockPlant extends BlockCrops{ return EnumRarity.RARE; } - @Nonnull + @Override public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos){ return EnumPlantType.Crop; @@ -112,18 +112,18 @@ public class BlockPlant extends BlockCrops{ return false; } - @Nonnull + @Override public Item getSeed(){ return this.seedItem; } @Override - public int quantityDropped(IBlockState state, int fortune, @Nonnull Random random){ + public int quantityDropped(IBlockState state, int fortune, Random random){ return this.getMetaFromState(state) >= 7 ? random.nextInt(this.addDropAmount)+this.minDropAmount : super.quantityDropped(state, fortune, random); } - @Nonnull + @Override public Item getCrop(){ return this.returnItem; @@ -131,7 +131,7 @@ public class BlockPlant extends BlockCrops{ @Override - public Item getItemDropped(@Nonnull IBlockState state, Random rand, int par3){ + public Item getItemDropped(IBlockState state, Random rand, int par3){ return this.getMetaFromState(state) >= 7 ? this.getCrop() : this.getSeed(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index 6f28797d5..924a1aebc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -26,7 +26,7 @@ public class ItemBlockBase extends ItemBlock{ this.setMaxDamage(0); } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -37,7 +37,7 @@ public class ItemBlockBase extends ItemBlock{ return damage; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ if(this.block instanceof BlockBase){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index ade2f73fb..e54d4494c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -26,7 +26,7 @@ import javax.annotation.Nonnull; public class RenderCompost extends TileEntitySpecialRenderer{ @Override - public void renderTileEntityAt(@Nonnull TileEntity te, double x, double y, double z, float partialTicks, int destroyStage){ + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks, int destroyStage){ if(te instanceof TileEntityCompost){ TileEntityCompost compost = (TileEntityCompost)te; ItemStack slot = compost.getStackInSlot(0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index 70b76ec27..fa5217cfe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -25,7 +25,7 @@ import javax.annotation.Nonnull; public class RenderReconstructorLens extends TileEntitySpecialRenderer{ @Override - public void renderTileEntityAt(@Nonnull TileEntity tile, double x, double y, double z, float par5, int par6){ + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int par6){ if(!(tile instanceof TileEntityAtomicReconstructor)){ return; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index da67629aa..79f79cae7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -27,7 +27,7 @@ import java.util.Locale; public class RenderSmileyCloud extends TileEntitySpecialRenderer{ @Override - public void renderTileEntityAt(@Nonnull TileEntity tile, double x, double y, double z, float par5, int partial){ + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int partial){ if(tile instanceof TileEntitySmileyCloud){ TileEntitySmileyCloud theCloud = (TileEntitySmileyCloud)tile; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 12464f28f..50da85c4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -200,7 +200,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ } @Override - public void drawHoveringText(@Nonnull List list, int x, int y){ + public void drawHoveringText(List list, int x, int y){ super.drawHoveringText(list, x, y); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java index 186621476..ef9d5718d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java @@ -54,7 +54,7 @@ public class GuiBookletStand extends GuiBooklet{ this.buttonSetPage = new GuiButton(-100, this.guiLeft+this.xSize+10, this.guiTop+10, 100, 20, "Set Page"){ @Override - public void drawButton(@Nonnull Minecraft mc, int x, int y){ + public void drawButton(Minecraft mc, int x, int y){ boolean unicodeBefore = mc.fontRendererObj.getUnicodeFlag(); mc.fontRendererObj.setUnicodeFlag(false); super.drawButton(mc, x, y); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 658f5dd65..7f1ea9d80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -54,7 +54,7 @@ public class BookmarkButton extends GuiButton{ } @Override - public void drawButton(@Nonnull Minecraft minecraft, int x, int y){ + public void drawButton(Minecraft minecraft, int x, int y){ if(this.visible){ minecraft.getTextureManager().bindTexture(GuiBooklet.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 5228f43b4..2ec0a145e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -34,7 +34,7 @@ public class IndexButton extends GuiButton{ } @Override - public void drawButton(@Nonnull Minecraft minecraft, int mouseX, int mouseY){ + public void drawButton(Minecraft minecraft, int mouseX, int mouseY){ if(this.visible){ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.hovered = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition+this.width && mouseY < this.yPosition+this.height; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index 9f1eb03a0..e034c1476 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -44,7 +44,7 @@ public class TexturedButton extends GuiButton{ } @Override - public void drawButton(@Nonnull Minecraft minecraft, int x, int y){ + public void drawButton(Minecraft minecraft, int x, int y){ if(this.visible){ minecraft.getTextureManager().bindTexture(GuiBooklet.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 46cb04a13..94d0be0a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -37,13 +37,13 @@ public class CreativeTab extends CreativeTabs{ super(ModUtil.MOD_ID); } - @Nonnull + @Override public ItemStack getIconItemStack(){ return new ItemStack(this.getTabIconItem()); } - @Nonnull + @Override public Item getTabIconItem(){ return InitItems.itemBooklet; @@ -51,7 +51,7 @@ public class CreativeTab extends CreativeTabs{ @Override @SideOnly(Side.CLIENT) - public void displayAllRelevantItems(@Nonnull List list){ + public void displayAllRelevantItems(List list){ this.list = list; this.add(InitItems.itemBooklet); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index 573a65249..9a1c4174f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -49,7 +49,7 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous } @Override - public boolean addComponentParts(@Nonnull World world, @Nonnull Random rand, @Nonnull StructureBoundingBox sbb){ + public boolean addComponentParts(World world, Random rand, StructureBoundingBox sbb){ if(this.averageGroundLevel < 0){ this.averageGroundLevel = this.getAverageGroundLevel(world, sbb); if(this.averageGroundLevel < 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index d114b9d26..258fa93fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -47,7 +47,7 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ } @Override - public boolean addComponentParts(@Nonnull World world, @Nonnull Random rand, @Nonnull StructureBoundingBox sbb){ + public boolean addComponentParts(World world, Random rand, StructureBoundingBox sbb){ if(this.averageGroundLevel < 0){ this.averageGroundLevel = this.getAverageGroundLevel(world, sbb); if(this.averageGroundLevel < 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java index 81b53e59f..2d49feace 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java @@ -29,7 +29,7 @@ import java.util.Random; public class WorldGenLushCaves extends WorldGenerator{ @Override - public boolean generate(@Nonnull World world, @Nonnull Random rand, @Nonnull BlockPos position){ + public boolean generate(World world, Random rand, BlockPos position){ this.generateCave(world, position, rand); return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index ec94a585f..43edacc2d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -94,7 +94,7 @@ public class ContainerBreaker extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.breaker.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index d0020e9fb..99c35e162 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -97,7 +97,7 @@ public class ContainerCanolaPress extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.press.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index 596638fd0..c59aff1f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -96,7 +96,7 @@ public class ContainerCoalGenerator extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.generator.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index 235f4b4b4..2809d25f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -124,7 +124,7 @@ public class ContainerCoffeeMachine extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.machine.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index e6b37aef7..27f216f4b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -112,7 +112,7 @@ public class ContainerCrafter extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return true; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index 1faf5652c..37591b74e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -95,7 +95,7 @@ public class ContainerDirectionalBreaker extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.breaker.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index 1304dab0b..c5deef69d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -145,7 +145,7 @@ public class ContainerDrill extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.drillInventory.isUseableByPlayer(player); } @@ -153,7 +153,7 @@ public class ContainerDrill extends Container{ public ItemStack[] slots = new ItemStack[SLOT_AMOUNT]; - @Nonnull + @Override public String getName(){ return "drill"; @@ -170,22 +170,22 @@ public class ContainerDrill extends Container{ } @Override - public boolean isUseableByPlayer(@Nonnull EntityPlayer player){ + public boolean isUseableByPlayer(EntityPlayer player){ return true; } @Override - public void openInventory(@Nonnull EntityPlayer player){ + public void openInventory(EntityPlayer player){ } @Override - public void closeInventory(@Nonnull EntityPlayer player){ + public void closeInventory(EntityPlayer player){ } @Override - public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int index, ItemStack stack){ return true; } @@ -263,7 +263,7 @@ public class ContainerDrill extends Container{ return false; } - @Nonnull + @Override public ITextComponent getDisplayName(){ return new TextComponentTranslation(this.getName()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index ab732dce6..b530768a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -95,7 +95,7 @@ public class ContainerDropper extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.dropper.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 875f78e28..f4148b48d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -132,7 +132,7 @@ public class ContainerEnergizer extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.energizer.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 7587010ef..cffd8b22c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -131,7 +131,7 @@ public class ContainerEnervator extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.enervator.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index 6f610228d..8fbcc5c3e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -90,7 +90,7 @@ public class ContainerFeeder extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.tileFeeder.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index 6b56d6a9e..71f5e1d09 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -85,7 +85,7 @@ public class ContainerFermentingBarrel extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.barrel.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 38197a535..174b4224e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -92,7 +92,7 @@ public class ContainerFluidCollector extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.collector.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index ea521c6ac..56571fe9b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -109,7 +109,7 @@ public class ContainerFurnaceDouble extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.tileFurnace.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index e0af7f20c..6885814f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -93,7 +93,7 @@ public class ContainerGiantChest extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.tileChest.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index fac800ed5..c08de37d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -120,7 +120,7 @@ public class ContainerGrinder extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.tileGrinder.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 40fbea503..887bdafef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -118,7 +118,7 @@ public class ContainerInputter extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.tileInputter.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 51989f663..9125fbdcc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -106,7 +106,7 @@ public class ContainerLaserRelayItemWhitelist extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.tile.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 5f8b29ba8..2d5bc6634 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -95,7 +95,7 @@ public class ContainerMiner extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.miner.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 316bf28f2..4d0114ae0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -83,7 +83,7 @@ public class ContainerOilGenerator extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.generator.canPlayerUse(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index a794e235f..6d5d2165f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -95,7 +95,7 @@ public class ContainerPhantomPlacer extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.placer.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 9da06b3be..39c1505e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -113,7 +113,7 @@ public class ContainerRangedCollector extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.collector.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index f3acb4d93..654a96c2d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -97,7 +97,7 @@ public class ContainerRepairer extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.tileRepairer.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java index 6feb5dbfd..98c6e2f44 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java @@ -24,7 +24,7 @@ public class ContainerSmileyCloud extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return true; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index 636407cd3..136bc51aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -88,7 +88,7 @@ public class ContainerXPSolidifier extends Container{ } @Override - public boolean canInteractWith(@Nonnull EntityPlayer player){ + public boolean canInteractWith(EntityPlayer player){ return this.solidifier.isUseableByPlayer(player); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 9dbd61e46..2948b7383 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -279,7 +279,7 @@ public class GuiInputter extends GuiContainer{ } @Override - public void drawButton(@Nonnull Minecraft mc, int x, int y){ + public void drawButton(Minecraft mc, int x, int y){ if(this.visible){ mc.getTextureManager().bindTexture(this.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); @@ -316,7 +316,7 @@ public class GuiInputter extends GuiContainer{ } @Override - public void drawButton(@Nonnull Minecraft mc, int x, int y){ + public void drawButton(Minecraft mc, int x, int y){ if(this.visible){ mc.getTextureManager().bindTexture(this.resLoc); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java index fe79dbde8..8cac76c9a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java @@ -33,7 +33,7 @@ public class SlotImmovable extends Slot{ } - @Nonnull + @Override public ItemStack decrStackSize(int i){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index f05193bf0..680bce855 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -59,7 +59,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(resLoc, "inventory")); } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); @@ -67,7 +67,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ @SuppressWarnings("deprecation") @Override - public boolean canHarvestBlock(@Nonnull IBlockState state, ItemStack stack){ + public boolean canHarvestBlock(IBlockState state, ItemStack stack){ return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getMaterial(state).isToolNotRequired() || (state.getBlock() == Blocks.SNOW_LAYER || state.getBlock() == Blocks.SNOW || (state.getBlock() == Blocks.OBSIDIAN ? this.toolMaterial.getHarvestLevel() >= 3 : (state.getBlock() != Blocks.DIAMOND_BLOCK && state.getBlock() != Blocks.DIAMOND_ORE ? (state.getBlock() != Blocks.EMERALD_ORE && state.getBlock() != Blocks.EMERALD_BLOCK ? (state.getBlock() != Blocks.GOLD_BLOCK && state.getBlock() != Blocks.GOLD_ORE ? (state.getBlock() != Blocks.IRON_BLOCK && state.getBlock() != Blocks.IRON_ORE ? (state.getBlock() != Blocks.LAPIS_BLOCK && state.getBlock() != Blocks.LAPIS_ORE ? (state.getBlock() != Blocks.REDSTONE_ORE && state.getBlock() != Blocks.LIT_REDSTONE_ORE ? (state.getBlock().getMaterial(state) == Material.ROCK || (state.getBlock().getMaterial(state) == Material.IRON || state.getBlock().getMaterial(state) == Material.ANVIL)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2))); } @@ -84,7 +84,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ return false; } - @Nonnull + @Override public Set getToolClasses(ItemStack stack){ HashSet hashSet = new HashSet(); @@ -95,7 +95,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ } @Override - public float getStrVsBlock(@Nonnull ItemStack stack, IBlockState state){ + public float getStrVsBlock(ItemStack stack, IBlockState state){ return this.hasExtraWhitelist(state.getBlock()) || state.getBlock().getHarvestTool(state) == null || state.getBlock().getHarvestTool(state).isEmpty() || this.getToolClasses(stack).contains(state.getBlock().getHarvestTool(state)) ? this.efficiencyOnProperMaterial : 1.0F; } @@ -104,7 +104,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(@Nonnull ItemStack stack, int pass){ + public int getColorFromItemstack(ItemStack stack, int pass){ return pass > 0 ? ItemAllToolAA.this.color : 0xFFFFFF; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index a97265193..e5aa57222 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -36,7 +36,7 @@ public class ItemAxeAA extends ItemToolAA{ } @Override - public float getStrVsBlock(@Nonnull ItemStack stack, IBlockState state){ + public float getStrVsBlock(ItemStack stack, IBlockState state){ Material material = state.getMaterial(); return material != Material.WOOD && material != Material.PLANTS && material != Material.VINE ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java index 88ae14cbc..480287f51 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java @@ -23,7 +23,7 @@ public class ItemBattery extends ItemEnergy{ this.setMaxStackSize(1); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index f55f9aafc..011f6eaa8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -56,7 +56,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ this.setMaxDamage(0); } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing face, float hitX, float hitY, float hitZ){ if(player.isSneaking()){ @@ -74,9 +74,9 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ return EnumActionResult.FAIL; } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.BOOK.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); if(!world.isRemote){ @@ -91,7 +91,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+"."+this.getBaseName()+".desc")); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index c638ce7d5..6acc0af22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -36,7 +36,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ super(name); } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack heldStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float par8, float par9, float par10){ if(player.isSneaking()){ @@ -86,7 +86,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ return super.onItemUse(heldStack, player, world, pos, hand, facing, par8, par9, par10); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index 4d9534e5f..48340c230 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -83,7 +83,7 @@ public class ItemCoffee extends ItemFoodBase{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, @Nonnull World world, EntityLivingBase player){ + public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack theStack = stack.copy(); super.onItemUseFinish(stack, world, player); applyPotionEffectsFromStack(stack, player); @@ -96,7 +96,7 @@ public class ItemCoffee extends ItemFoodBase{ } } - @Nonnull + @Override public EnumAction getItemUseAction(ItemStack stack){ return EnumAction.DRINK; @@ -126,7 +126,7 @@ public class ItemCoffee extends ItemFoodBase{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java index 12a2e8f30..1076ab477 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java @@ -23,7 +23,7 @@ public class ItemCoffeeBean extends ItemFoodBase{ this.setMaxDamage(0); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java index 96bf818ad..ad1c4898d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java @@ -30,16 +30,16 @@ public class ItemCrafterOnAStick extends ItemBase{ this.setMaxStackSize(1); } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CRAFTER.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } return new ActionResult(EnumActionResult.SUCCESS, stack); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 5532a481b..c6b6b6393 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -38,13 +38,13 @@ public class ItemCrystal extends ItemBase{ return damage; } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+BlockCrystal.allCrystals[stack.getItemDamage()].name; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? EnumRarity.COMMON : BlockCrystal.allCrystals[stack.getItemDamage()].rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index f80a7e323..a0615544d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -76,7 +76,7 @@ public class ItemDrill extends ItemEnergy{ this.setHarvestLevel("pickaxe", HARVEST_LEVEL); } - @Nonnull + @Override //Places Blocks if the Placing Upgrade is installed public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ){ @@ -159,9 +159,9 @@ public class ItemDrill extends ItemEnergy{ return slots; } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote && player.isSneaking()){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.DRILL.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); } @@ -204,15 +204,15 @@ public class ItemDrill extends ItemEnergy{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; } - @Nonnull + @Override - public Multimap getAttributeModifiers(@Nonnull EntityEquipmentSlot slot, ItemStack stack){ + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); if(slot == EntityEquipmentSlot.MAINHAND){ @@ -265,13 +265,13 @@ public class ItemDrill extends ItemEnergy{ @SuppressWarnings("deprecation") @Override - public boolean canHarvestBlock(@Nonnull IBlockState state, ItemStack stack){ + public boolean canHarvestBlock(IBlockState state, ItemStack stack){ int harvestLevel = this.getHarvestLevel(stack, ""); Block block = state.getBlock(); return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? harvestLevel >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); } - @Nonnull + @Override public Set getToolClasses(ItemStack stack){ HashSet hashSet = new HashSet(); @@ -281,7 +281,7 @@ public class ItemDrill extends ItemEnergy{ } @Override - public int getHarvestLevel(ItemStack stack, @Nonnull String toolClass){ + public int getHarvestLevel(ItemStack stack, String toolClass){ return HARVEST_LEVEL; } @@ -351,7 +351,7 @@ public class ItemDrill extends ItemEnergy{ @Override @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) - public void getSubItems(@Nonnull Item item, CreativeTabs tabs, List list){ + public void getSubItems(Item item, CreativeTabs tabs, List list){ for(int i = 0; i < 16; i++){ this.addDrillStack(list, i); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java index 4cfd8d04b..99f747e32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java @@ -39,9 +39,9 @@ public class ItemDrillUpgrade extends ItemBase{ return -1; } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote && this.type == UpgradeType.PLACER){ this.setSlotToPlaceFrom(stack, player.inventory.currentItem); return new ActionResult(EnumActionResult.SUCCESS, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index ca7b5c4aa..38fcbdcae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -41,13 +41,13 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ return damage; } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allDusts.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allDusts[stack.getItemDamage()].name; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allDusts.length ? EnumRarity.COMMON : allDusts[stack.getItemDamage()].rarity; @@ -73,7 +73,7 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(@Nonnull ItemStack stack, int pass){ + public int getColorFromItemstack(ItemStack stack, int pass){ return stack.getItemDamage() >= allDusts.length ? 0xFFFFFF : allDusts[stack.getItemDamage()].color; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index b6fee157a..2a2df1dd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -33,7 +33,7 @@ public class ItemFertilizer extends ItemBase{ BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject(this, new DispenserHandlerFertilize()); } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float par8, float par9, float par10){ if(ItemDye.applyBonemeal(stack, world, pos, player)){ @@ -45,7 +45,7 @@ public class ItemFertilizer extends ItemBase{ return super.onItemUse(stack, player, world, pos, hand, side, par8, par9, par10); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 9cbee76c7..8769c1ded 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -42,7 +42,7 @@ public class ItemFoods extends ItemFoodBase{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, @Nonnull World world, EntityLivingBase player){ + public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); ItemStack returnItem = stack.getItemDamage() >= allFoods.length ? null : allFoods[stack.getItemDamage()].returnItem; if(returnItem != null && player instanceof EntityPlayer){ @@ -62,7 +62,7 @@ public class ItemFoods extends ItemFoodBase{ return stack.getItemDamage() >= allFoods.length ? 0 : allFoods[stack.getItemDamage()].useDuration; } - @Nonnull + @Override public EnumAction getItemUseAction(ItemStack stack){ return stack.getItemDamage() >= allFoods.length ? EnumAction.EAT : (allFoods[stack.getItemDamage()].getsDrunken ? EnumAction.DRINK : EnumAction.EAT); @@ -83,13 +83,13 @@ public class ItemFoods extends ItemFoodBase{ return damage; } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allFoods.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allFoods[stack.getItemDamage()].name; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allFoods.length ? EnumRarity.COMMON : allFoods[stack.getItemDamage()].rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java index a3f45c0b9..08188b743 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java @@ -23,7 +23,7 @@ public class ItemGeneric extends ItemBase{ this.setMaxDamage(0); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.UNCOMMON; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index f171bf602..d862772a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -93,7 +93,7 @@ public class ItemGrowthRing extends ItemEnergy{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index 2ddc3edd9..1ad25d0a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -29,9 +29,9 @@ public class ItemHairyBall extends ItemBase{ super(name); } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ ItemStack returnItem = this.getRandomReturnItem(); if(!player.inventory.addItemStackToInventory(returnItem)){ @@ -50,7 +50,7 @@ public class ItemHairyBall extends ItemBase{ return WeightedRandom.getRandomItem(Util.RANDOM, ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS).returnItem.copy(); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 6c9f2732b..de74ae6ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -50,13 +50,13 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ return damage; } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allJams.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allJams[stack.getItemDamage()].name; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allJams.length ? EnumRarity.COMMON : allJams[stack.getItemDamage()].rarity; @@ -71,7 +71,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ } @Override - public ItemStack onItemUseFinish(ItemStack stack, @Nonnull World world, EntityLivingBase player){ + public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); if(player instanceof EntityPlayer && !world.isRemote && stack.getItemDamage() < allJams.length){ @@ -113,7 +113,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(@Nonnull ItemStack stack, int pass){ + public int getColorFromItemstack(ItemStack stack, int pass){ return pass > 0 ? (stack.getItemDamage() >= allJams.length ? 0xFFFFFF : allJams[stack.getItemDamage()].color) : 0xFFFFFF; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index d4567c059..15e57af53 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -35,16 +35,16 @@ public class ItemKnife extends ItemBase{ return true; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; } - @Nonnull + @SuppressWarnings("unchecked") @Override - public Multimap getAttributeModifiers(@Nonnull EntityEquipmentSlot slot, ItemStack stack){ + public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); if(slot == EntityEquipmentSlot.MAINHAND){ map.put(SharedMonsterAttributes.ATTACK_DAMAGE.getAttributeUnlocalizedName(), new AttributeModifier(ATTACK_DAMAGE_MODIFIER, "Knife Modifier", 3, 0)); @@ -52,9 +52,9 @@ public class ItemKnife extends ItemBase{ return map; } - @Nonnull + @Override - public ItemStack getContainerItem(@Nonnull ItemStack stack){ + public ItemStack getContainerItem(ItemStack stack){ ItemStack theStack = stack.copy(); theStack.setItemDamage(theStack.getItemDamage()+1); theStack.stackSize = 1; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 8044a357d..372020353 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -41,7 +41,7 @@ public class ItemLaserWrench extends ItemBase{ this.setMaxStackSize(1); } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing par7, float par8, float par9, float par10){ if(!world.isRemote){ @@ -101,7 +101,7 @@ public class ItemLaserWrench extends ItemBase{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index d9c29a587..182498435 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -44,14 +44,14 @@ public class ItemLeafBlower extends ItemBase{ this.setMaxStackSize(1); } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ player.setActiveHand(hand); return new ActionResult(EnumActionResult.SUCCESS, stack); } - @Nonnull + @Override public EnumAction getItemUseAction(ItemStack stack){ return EnumAction.BOW; @@ -63,7 +63,7 @@ public class ItemLeafBlower extends ItemBase{ return Integer.MAX_VALUE; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return this.isAdvanced ? EnumRarity.EPIC : EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index eac4fd8e8..74a9947e3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -65,7 +65,7 @@ public class ItemMagnetRing extends ItemEnergy{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index a6fa6f604..0467df77c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -39,13 +39,13 @@ public class ItemMisc extends ItemBase{ return damage; } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allMiscItems.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allMiscItems[stack.getItemDamage()].name; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allMiscItems.length ? EnumRarity.COMMON : allMiscItems[stack.getItemDamage()].rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 487dcf517..31535f4f0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -82,7 +82,7 @@ public class ItemPhantomConnector extends ItemBase{ stack.setTagCompound(tag); } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing par7, float par8, float par9, float par10){ if(!world.isRemote){ @@ -149,7 +149,7 @@ public class ItemPhantomConnector extends ItemBase{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index 0e0d0d9b6..5e0aebc53 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -77,7 +77,7 @@ public class ItemPickaxeAA extends ItemToolAA{ } @Override - public float getStrVsBlock(@Nonnull ItemStack stack, IBlockState state){ + public float getStrVsBlock(ItemStack stack, IBlockState state){ Material material = state.getMaterial(); return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(stack, state) : this.efficiencyOnProperMaterial; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 231b968ad..709d53785 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -50,7 +50,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ return damage; } - @Nonnull + @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allRings.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allRings[stack.getItemDamage()].name; @@ -82,9 +82,9 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ } } - @Nonnull + @Override - public String getItemStackDisplayName(@Nonnull ItemStack stack){ + public String getItemStackDisplayName(ItemStack stack){ String standardName = StringUtil.localize(this.getUnlocalizedName()+".name"); if(stack.getItemDamage() < allRings.length){ String effect = StringUtil.localize(allRings[stack.getItemDamage()].name); @@ -93,7 +93,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ return standardName; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return stack.getItemDamage() >= allRings.length ? EnumRarity.COMMON : allRings[stack.getItemDamage()].rarity; @@ -119,7 +119,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ public IItemColor getColor(){ return new IItemColor(){ @Override - public int getColorFromItemstack(@Nonnull ItemStack stack, int tintIndex){ + public int getColorFromItemstack(ItemStack stack, int tintIndex){ return stack.getItemDamage() >= allRings.length ? 0xFFFFFF : allRings[stack.getItemDamage()].color; } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index 8088ac7a7..244487342 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -48,7 +48,7 @@ public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorMo return this.getRegistryName().toString(); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 68a78938b..1be420914 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -27,9 +27,9 @@ public class ItemResonantRice extends ItemBase{ super(name); } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ stack.stackSize--; world.createExplosion(null, player.posX, player.posY, player.posZ, 0.5F, true); @@ -37,7 +37,7 @@ public class ItemResonantRice extends ItemBase{ return new ActionResult(EnumActionResult.SUCCESS, stack); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index c47d7a5b0..8dbe59b21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -47,7 +47,7 @@ public class ItemShovelAA extends ItemToolAA{ return block == Blocks.SNOW_LAYER || block == Blocks.SNOW; } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index 09e8ec70e..f862c6a07 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -30,9 +30,9 @@ public class ItemSolidifiedExperience extends ItemBase{ super(name); } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ if(!player.isSneaking()){ world.spawnEntityInWorld(new EntityXPOrb(world, player.posX+0.5, player.posY+0.5, player.posZ+0.5, SOLID_XP_AMOUNT)); @@ -50,7 +50,7 @@ public class ItemSolidifiedExperience extends ItemBase{ return new ActionResult(EnumActionResult.SUCCESS, stack); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.UNCOMMON; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index b87452aec..4e11dcf13 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -42,7 +42,7 @@ public class ItemSpawnerChanger extends ItemBase{ this.setMaxStackSize(1); } - @Nonnull + @Override public EnumActionResult onItemUse(ItemStack aStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ if(!world.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index cb5c304c7..1dc818b6f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -35,9 +35,9 @@ public class ItemTeleStaff extends ItemEnergy{ super(500000, 10000, name); } - @Nonnull + @Override - public ActionResult onItemRightClick(@Nonnull ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote){ if(this.getWaitTime(stack) <= 0){ RayTraceResult pos = WorldUtil.getNearestPositionWithAir(world, player, 100); @@ -75,7 +75,7 @@ public class ItemTeleStaff extends ItemEnergy{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index d8595e27f..e4c6718f5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -76,7 +76,7 @@ public class ItemWaterRemovalRing extends ItemEnergy{ } } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index 179be6801..ebf855e1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -88,7 +88,7 @@ public class ItemWingsOfTheBats extends ItemBase{ return null; } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index a263a9d81..0825e854c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -57,7 +57,7 @@ public class ItemArmorAA extends ItemArmor{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 52c421c00..23c997f5a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -82,7 +82,7 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ @Override @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) - public void getSubItems(@Nonnull Item item, CreativeTabs tabs, List list){ + public void getSubItems(Item item, CreativeTabs tabs, List list){ ItemStack stackFull = new ItemStack(this); this.setEnergy(stackFull, this.getMaxEnergyStored(stackFull)); list.add(stackFull); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index 7ef31d5a6..040e02d11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -54,7 +54,7 @@ public class ItemHoeAA extends ItemHoe{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index b1e72b4e9..34ae47a20 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -65,13 +65,13 @@ public class ItemSeed extends ItemSeeds{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; } - @Nonnull + @Override public IBlockState getPlant(IBlockAccess world, BlockPos pos){ return this.plant.getDefaultState(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index 8f6232fd4..f3ba6768e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -59,11 +59,11 @@ public class ItemSwordAA extends ItemSword{ } @Override - public boolean getIsRepairable(ItemStack itemToRepair, @Nonnull ItemStack stack){ + public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ return ItemUtil.areItemsEqual(this.repairItem, stack, false); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index efbc0d478..91f82f34b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -62,14 +62,14 @@ public class ItemToolAA extends ItemTool{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; } @Override - public boolean getIsRepairable(ItemStack itemToRepair, @Nonnull ItemStack stack){ + public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ if(this.repairItem != null){ return ItemUtil.areItemsEqual(this.repairItem, stack, false); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java index 2ee39211e..32b001858 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java @@ -29,7 +29,7 @@ public class ItemLens extends ItemBase implements ILensItem{ this.setMaxStackSize(1); } - @Nonnull + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.UNCOMMON; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index e7acc24df..f0f6accb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -40,7 +40,7 @@ import javax.annotation.Nonnull; public class JEIActuallyAdditionsPlugin implements IModPlugin{ @Override - public void register(@Nonnull IModRegistry registry){ + public void register(IModRegistry registry){ IJeiHelpers helpers = registry.getJeiHelpers(); registry.addRecipeCategories( @@ -100,7 +100,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ } @Override - public void onRuntimeAvailable(@Nonnull IJeiRuntime jeiRuntime){ + public void onRuntimeAvailable(IJeiRuntime jeiRuntime){ } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java index 3b52ca52b..5573aa920 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java @@ -28,7 +28,7 @@ public abstract class RecipeWrapperWithButton{ public RecipeWrapperWithButton(){ this.theButton = new TexturedButton(23782, this.getButtonX(), this.getButtonY(), 146, 154, 20, 20){ @Override - public void drawButton(@Nonnull Minecraft minecraft, int x, int y){ + public void drawButton(Minecraft minecraft, int x, int y){ super.drawButton(minecraft, x, y); if(this.visible && this.hovered){ String text = StringUtil.localize("booklet."+ModUtil.MOD_ID+".clickToSeeRecipe"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index 467e9c4bb..e23905a16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -30,36 +30,36 @@ public class BookletRecipeCategory implements IRecipeCategory{ this.background = helper.createBlankDrawable(160, 100); } - @Nonnull + @Override public String getUid(){ return NEIBookletRecipe.NAME; } - @Nonnull + @Override public String getTitle(){ return StringUtil.localize("container.nei."+NEIBookletRecipe.NAME+".name"); } - @Nonnull + @Override public IDrawable getBackground(){ return this.background; } @Override - public void drawExtras(@Nonnull Minecraft minecraft){ + public void drawExtras(Minecraft minecraft){ } @Override - public void drawAnimations(@Nonnull Minecraft minecraft){ + public void drawAnimations(Minecraft minecraft){ } @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper){ + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper){ if(recipeWrapper instanceof BookletRecipeWrapper){ BookletRecipeWrapper wrapper = (BookletRecipeWrapper)recipeWrapper; recipeLayout.getItemStacks().init(0, true, 70, -4); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java index a61b1ff7d..f2153130b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java @@ -19,26 +19,26 @@ import javax.annotation.Nonnull; public class BookletRecipeHandler implements IRecipeHandler{ - @Nonnull + @Override public Class getRecipeClass(){ return BookletPage.class; } - @Nonnull + @Override public String getRecipeCategoryUid(){ return NEIBookletRecipe.NAME; } - @Nonnull + @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull BookletPage recipe){ + public IRecipeWrapper getRecipeWrapper(BookletPage recipe){ return new BookletRecipeWrapper(recipe); } @Override - public boolean isRecipeValid(@Nonnull BookletPage recipe){ + public boolean isRecipeValid(BookletPage recipe){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index 41ec53f08..87f6897cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -56,7 +56,7 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe } @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ + public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ List header = minecraft.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".booklet.header").replaceAll("", TextFormatting.BLUE+"").replaceAll("", TextFormatting.BLACK+""), 150); for(int i = 0; i < header.size(); i++){ minecraft.fontRendererObj.drawString((String)header.get(i), 0, 17+i*(minecraft.fontRendererObj.FONT_HEIGHT+1), 0, false); @@ -76,7 +76,7 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe } @Override - public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ + public void drawAnimations(Minecraft minecraft, int recipeWidth, int recipeHeight){ } @@ -87,7 +87,7 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe } @Override - public boolean handleClick(@Nonnull Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ + public boolean handleClick(Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ return this.handleClick(minecraft, mouseX, mouseY); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java index bdfae76f7..8336b0e0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java @@ -30,36 +30,36 @@ public class CoffeeMachineRecipeCategory implements IRecipeCategory{ this.background = helper.createDrawable(AssetUtil.getGuiLocation("guiNEICoffeeMachine"), 0, 0, 126, 88); } - @Nonnull + @Override public String getUid(){ return NEICoffeeMachineRecipe.NAME; } - @Nonnull + @Override public String getTitle(){ return StringUtil.localize("container.nei."+NEICoffeeMachineRecipe.NAME+".name"); } - @Nonnull + @Override public IDrawable getBackground(){ return this.background; } @Override - public void drawExtras(@Nonnull Minecraft minecraft){ + public void drawExtras(Minecraft minecraft){ } @Override - public void drawAnimations(@Nonnull Minecraft minecraft){ + public void drawAnimations(Minecraft minecraft){ } @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper){ + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper){ if(recipeWrapper instanceof CoffeeMachineRecipeWrapper){ CoffeeMachineRecipeWrapper wrapper = (CoffeeMachineRecipeWrapper)recipeWrapper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java index fe575fc22..6a94c9d04 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java @@ -19,26 +19,26 @@ import javax.annotation.Nonnull; public class CoffeeMachineRecipeHandler implements IRecipeHandler{ - @Nonnull + @Override public Class getRecipeClass(){ return CoffeeIngredient.class; } - @Nonnull + @Override public String getRecipeCategoryUid(){ return NEICoffeeMachineRecipe.NAME; } - @Nonnull + @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull CoffeeIngredient recipe){ + public IRecipeWrapper getRecipeWrapper(CoffeeIngredient recipe){ return new CoffeeMachineRecipeWrapper(recipe); } @Override - public boolean isRecipeValid(@Nonnull CoffeeIngredient recipe){ + public boolean isRecipeValid(CoffeeIngredient recipe){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index 3a08622ec..7f34bed5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -70,7 +70,7 @@ public class CoffeeMachineRecipeWrapper extends RecipeWrapperWithButton implemen } @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ + public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ this.updateButton(minecraft, mouseX, mouseY); if(this.theIngredient.getExtraText() != null){ @@ -84,7 +84,7 @@ public class CoffeeMachineRecipeWrapper extends RecipeWrapperWithButton implemen } @Override - public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ + public void drawAnimations(Minecraft minecraft, int recipeWidth, int recipeHeight){ } @@ -95,7 +95,7 @@ public class CoffeeMachineRecipeWrapper extends RecipeWrapperWithButton implemen } @Override - public boolean handleClick(@Nonnull Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ + public boolean handleClick(Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ return this.handleClick(minecraft, mouseX, mouseY); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java index 6476d5a39..0705474c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java @@ -33,36 +33,36 @@ public class CrusherRecipeCategory implements IRecipeCategory{ this.background = helper.createDrawable(AssetUtil.getGuiLocation("guiGrinder"), 60, 13, 56, 79); } - @Nonnull + @Override public String getUid(){ return NAME; } - @Nonnull + @Override public String getTitle(){ return StringUtil.localize("container.nei."+NAME+".name"); } - @Nonnull + @Override public IDrawable getBackground(){ return this.background; } @Override - public void drawExtras(@Nonnull Minecraft minecraft){ + public void drawExtras(Minecraft minecraft){ } @Override - public void drawAnimations(@Nonnull Minecraft minecraft){ + public void drawAnimations(Minecraft minecraft){ } @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper){ + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper){ if(recipeWrapper instanceof CrusherRecipeWrapper){ CrusherRecipeWrapper wrapper = (CrusherRecipeWrapper)recipeWrapper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java index 690024479..f5a6a385e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java @@ -18,26 +18,26 @@ import javax.annotation.Nonnull; public class CrusherRecipeHandler implements IRecipeHandler{ - @Nonnull + @Override public Class getRecipeClass(){ return CrusherRecipe.class; } - @Nonnull + @Override public String getRecipeCategoryUid(){ return CrusherRecipeCategory.NAME; } - @Nonnull + @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull CrusherRecipe recipe){ + public IRecipeWrapper getRecipeWrapper(CrusherRecipe recipe){ return new CrusherRecipeWrapper(recipe); } @Override - public boolean isRecipeValid(@Nonnull CrusherRecipe recipe){ + public boolean isRecipeValid(CrusherRecipe recipe){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java index 16d92fe1e..1178cd431 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java @@ -63,7 +63,7 @@ public class CrusherRecipeWrapper extends RecipeWrapperWithButton implements IRe } @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ + public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ this.updateButton(minecraft, mouseX, mouseY); List outputTwos = this.theRecipe.getRecipeOutputTwos(); @@ -73,7 +73,7 @@ public class CrusherRecipeWrapper extends RecipeWrapperWithButton implements IRe } @Override - public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ + public void drawAnimations(Minecraft minecraft, int recipeWidth, int recipeHeight){ } @@ -84,7 +84,7 @@ public class CrusherRecipeWrapper extends RecipeWrapperWithButton implements IRe } @Override - public boolean handleClick(@Nonnull Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ + public boolean handleClick(Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ return this.handleClick(minecraft, mouseX, mouseY); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java index 88e48b9c2..0f36a237a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java @@ -33,36 +33,36 @@ public class ReconstructorRecipeCategory implements IRecipeCategory{ this.background = helper.createDrawable(AssetUtil.getGuiLocation("guiNEIAtomicReconstructor"), 0, 0, 96, 60); } - @Nonnull + @Override public String getUid(){ return NEIReconstructorRecipe.NAME; } - @Nonnull + @Override public String getTitle(){ return StringUtil.localize("container.nei."+NEIReconstructorRecipe.NAME+".name"); } - @Nonnull + @Override public IDrawable getBackground(){ return this.background; } @Override - public void drawExtras(@Nonnull Minecraft minecraft){ + public void drawExtras(Minecraft minecraft){ AssetUtil.renderStackToGui(RECONSTRUCTOR, 34, 19, 1.0F); } @Override - public void drawAnimations(@Nonnull Minecraft minecraft){ + public void drawAnimations(Minecraft minecraft){ } @Override - public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper){ + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper){ if(recipeWrapper instanceof ReconstructorRecipeWrapper){ ReconstructorRecipeWrapper wrapper = (ReconstructorRecipeWrapper)recipeWrapper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java index fb6ed5630..7f586f6c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java @@ -19,26 +19,26 @@ import javax.annotation.Nonnull; public class ReconstructorRecipeHandler implements IRecipeHandler{ - @Nonnull + @Override public Class getRecipeClass(){ return LensConversionRecipe.class; } - @Nonnull + @Override public String getRecipeCategoryUid(){ return NEIReconstructorRecipe.NAME; } - @Nonnull + @Override - public IRecipeWrapper getRecipeWrapper(@Nonnull LensConversionRecipe recipe){ + public IRecipeWrapper getRecipeWrapper(LensConversionRecipe recipe){ return new ReconstructorRecipeWrapper(recipe); } @Override - public boolean isRecipeValid(@Nonnull LensConversionRecipe recipe){ + public boolean isRecipeValid(LensConversionRecipe recipe){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java index 7e396da08..738d10057 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java @@ -54,12 +54,12 @@ public class ReconstructorRecipeWrapper extends RecipeWrapperWithButton implemen } @Override - public void drawInfo(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ + public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY){ this.updateButton(minecraft, mouseX, mouseY); } @Override - public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight){ + public void drawAnimations(Minecraft minecraft, int recipeWidth, int recipeHeight){ } @@ -70,7 +70,7 @@ public class ReconstructorRecipeWrapper extends RecipeWrapperWithButton implemen } @Override - public boolean handleClick(@Nonnull Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ + public boolean handleClick(Minecraft minecraft, int mouseX, int mouseY, int mouseButton){ return this.handleClick(minecraft, mouseX, mouseY); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 076da6eaa..52a6a46a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -32,7 +32,7 @@ public class DamageSources extends DamageSource{ this.messageCount = messageCount; } - @Nonnull + @Override public ITextComponent getDeathMessage(EntityLivingBase entity){ String locTag = "death."+ModUtil.MOD_ID+"."+this.damageType+"."+(Util.RANDOM.nextInt(this.messageCount)+1); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index a8ad69a67..630c74608 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -23,7 +23,7 @@ import javax.annotation.Nonnull; public class DispenserHandlerFertilize extends BehaviorDefaultDispenseItem{ - @Nonnull + @Override public ItemStack dispenseStack(IBlockSource source, ItemStack stack){ EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index f188da725..d20e1ca67 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -72,7 +72,7 @@ public class WorldData extends WorldSavedData{ } @Override - public void readFromNBT(@Nonnull NBTTagCompound compound){ + public void readFromNBT(NBTTagCompound compound){ //Laser World Data NBTTagList networkList = compound.getTagList("Networks", 10); for(int i = 0; i < networkList.tagCount(); i++){ @@ -88,9 +88,9 @@ public class WorldData extends WorldSavedData{ } } - @Nonnull + @Override - public NBTTagCompound writeToNBT(@Nonnull NBTTagCompound compound){ + public NBTTagCompound writeToNBT(NBTTagCompound compound){ //Laser World Data NBTTagList networkList = new NBTTagList(); for(LaserRelayConnectionHandler.Network network : LaserRelayConnectionHandler.getInstance().networks){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index ffd5df5d3..9ceaa0fac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -134,7 +134,7 @@ public class ClientProxy implements IProxy{ if(manager instanceof IReloadableResourceManager){ ((IReloadableResourceManager)manager).registerReloadListener(new IResourceManagerReloadListener(){ @Override - public void onResourceManagerReload(@Nonnull IResourceManager resourceManager){ + public void onResourceManagerReload(IResourceManager resourceManager){ countBookletWords(); } }); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 18382eb31..239297de9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -158,7 +158,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return stack != null && stack.getItem() instanceof ILensItem; } @@ -189,12 +189,12 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index da328faed..992c47aa9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -96,7 +96,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.readSyncableNBT(compound, false); } - @Nonnull + @Override public NBTTagCompound writeToNBT(NBTTagCompound compound){ compound = super.writeToNBT(compound); @@ -123,7 +123,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } @Override - public boolean shouldRefresh(World world, BlockPos pos, @Nonnull IBlockState oldState, @Nonnull IBlockState newState){ + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState){ return !(oldState.getBlock().isAssociatedBlock(newState.getBlock())); } @@ -131,7 +131,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.readSyncableNBT(compound, true); } - @Nonnull + @Override public NBTTagCompound getUpdateTag(){ NBTTagCompound tag = super.getUpdateTag(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 58c697949..852d08be7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -74,7 +74,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return this.isPlacer; } @@ -110,12 +110,12 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 39985ff11..c397cebad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -118,7 +118,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return (i == 0 && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CANOLA.ordinal()); } @@ -127,12 +127,12 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 4eea61833..83234e197 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -112,17 +112,17 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return TileEntityFurnace.getItemBurnTime(stack) > 0; } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 5f2b573d2..f0c3010bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -112,7 +112,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return (i >= 3 && ItemCoffee.getIngredientFromStack(stack) != null) || (i == SLOT_COFFEE_BEANS && stack.getItem() == InitItems.itemCoffeeBean) || (i == SLOT_INPUT && stack.getItem() == InitItems.itemMisc && stack.getItemDamage() == TheMiscItems.CUP.ordinal()); } @@ -172,12 +172,12 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == SLOT_OUTPUT || (slot >= 3 && slot < this.slots.length-2 && ItemCoffee.getIngredientFromStack(stack) == null); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index 328b889ae..2f0da7452 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -71,7 +71,7 @@ public class TileEntityCompost extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return getRecipeForInput(stack) != null; } @@ -82,12 +82,12 @@ public class TileEntityCompost extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return getRecipeForInput(stack) == null; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 3721c8497..176cb9177 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -108,7 +108,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return false; } @@ -118,12 +118,12 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 7612f7722..9e18d5741 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -59,7 +59,7 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return true; } @@ -88,12 +88,12 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index 835419b2e..cd30443f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -68,17 +68,17 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return i == 0 && stack.getItem() instanceof IEnergyContainerItem; } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == 1; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 605f8edb8..8c1d4a5f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -73,7 +73,7 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return i == 0 && stack.getItem() instanceof IEnergyContainerItem; } @@ -103,12 +103,12 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == 1; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index 3babe3ee3..123a2a8b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -111,7 +111,7 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return true; } @@ -126,12 +126,12 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return false; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index d16b15409..89d1e7349 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -117,7 +117,7 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && FurnaceRecipes.instance().getSmeltingResult(stack) != null; } @@ -166,12 +166,12 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == SLOT_OUTPUT_1 || slot == SLOT_OUTPUT_2; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index df76e72a7..733922d66 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -23,17 +23,17 @@ public class TileEntityGiantChest extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return true; } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 1cc9564cb..f0c869be1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -167,7 +167,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && CrusherRecipeRegistry.getRecipeFromInput(stack) != null; } @@ -256,12 +256,12 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == SLOT_OUTPUT_1_1 || slot == SLOT_OUTPUT_1_2 || slot == SLOT_OUTPUT_2_1 || slot == SLOT_OUTPUT_2_2; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index ea4371936..027f703f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -427,17 +427,17 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return i == 0; } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == 0; } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 884deb7c9..99a8afc90 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -95,9 +95,9 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } - @Nonnull + @Override - public int[] getSlotsForFace(@Nonnull EnumFacing side){ + public int[] getSlotsForFace(EnumFacing side){ int invSize = this.getSizeInventory(); if(invSize > 0){ int[] theInt = new int[invSize]; @@ -117,22 +117,22 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } @Override - public boolean isUseableByPlayer(@Nonnull EntityPlayer player){ + public boolean isUseableByPlayer(EntityPlayer player){ return this.canPlayerUse(player); } @Override - public void openInventory(@Nonnull EntityPlayer player){ + public void openInventory(EntityPlayer player){ } @Override - public void closeInventory(@Nonnull EntityPlayer player){ + public void closeInventory(EntityPlayer player){ } @Override - public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int index, ItemStack stack){ return false; } @@ -204,7 +204,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return stack; } - @Nonnull + @Override public String getName(){ return this.name; @@ -215,21 +215,21 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return false; } - @Nonnull + @Override public ITextComponent getDisplayName(){ return new TextComponentTranslation(this.getName()); } @Override - public boolean hasCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ - return this.canHandleCapability(capability) || super.hasCapability(capability, facing); + public boolean hasCapability(Capability capability, EnumFacing facing){ + return this.getCapability(capability, facing) != null; } - @Nonnull + @Override - public T getCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ - if(this.canHandleCapability(capability)){ + public T getCapability(Capability capability, EnumFacing facing){ + if(this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ return (T)this.invWrappers[facing.ordinal()]; } else{ @@ -237,10 +237,6 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } } - private boolean canHandleCapability(Capability capability){ - return this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY; - } - public boolean hasInvWrapperCapabilities(){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index a55ce3bb2..8a2cc4005 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -104,7 +104,7 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return i == SLOT_INPUT; } @@ -122,12 +122,12 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == SLOT_OUTPUT; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index b4b17aae9..dc8b26896 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -84,12 +84,12 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } @Override - public boolean canInsertItem(int index, @Nonnull ItemStack stack, @Nonnull EnumFacing direction){ + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction){ return this.isItemValidForSlot(index, stack); } @Override - public boolean canExtractItem(int index, @Nonnull ItemStack stack, @Nonnull EnumFacing direction){ + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ if(this.isWhitelisted(handler, stack)){ @@ -114,7 +114,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } @Override - public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int index, ItemStack stack){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ if(this.isWhitelisted(handler, stack)){ @@ -236,7 +236,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } @Override - public int compareTo(@Nonnull GenericItemHandlerInfo other){ + public int compareTo(GenericItemHandlerInfo other){ boolean thisWhitelist = this.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; boolean otherWhitelist = other.relayInQuestion instanceof TileEntityLaserRelayItemWhitelist; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index d83eccabb..924c88a00 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -55,7 +55,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ super.receiveSyncCompound(compound); } - @Nonnull + @Override public NBTTagCompound getUpdateTag(){ NBTTagCompound compound = super.getUpdateTag(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index ecdd6b98f..074994d1b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -46,7 +46,7 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem return this; } - @Nonnull + @Override public String getName(){ return this.tile.name; @@ -63,17 +63,17 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem } @Override - public boolean isUseableByPlayer(@Nonnull EntityPlayer player){ + public boolean isUseableByPlayer(EntityPlayer player){ return this.tile.canPlayerUse(player); } @Override - public void openInventory(@Nonnull EntityPlayer player){ + public void openInventory(EntityPlayer player){ } @Override - public void closeInventory(@Nonnull EntityPlayer player){ + public void closeInventory(EntityPlayer player){ } @@ -151,14 +151,14 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem return false; } - @Nonnull + @Override public ITextComponent getDisplayName(){ return new TextComponentTranslation(this.getName()); } @Override - public boolean isItemValidForSlot(int index, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int index, ItemStack stack){ return false; } }.setTile(this); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 5ae1537b7..db51b3faf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -181,7 +181,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } @Override - public boolean isItemValidForSlot(int slot, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int slot, ItemStack stack){ return false; } @@ -206,12 +206,12 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 640885e50..bfc25ab8a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -27,9 +27,9 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ this.type = BlockPhantom.Type.FACE; } - @Nonnull + @Override - public int[] getSlotsForFace(@Nonnull EnumFacing side){ + public int[] getSlotsForFace(EnumFacing side){ if(this.isBoundThingInRange()){ if(this.getSided() != null){ return this.getSided().getSlotsForFace(side); @@ -103,7 +103,7 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return this.isBoundThingInRange() && this.getInventory().isItemValidForSlot(i, stack); } @@ -113,23 +113,23 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isBoundThingInRange() && (this.getSided() == null || this.getSided().canInsertItem(slot, stack, side)); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return this.isBoundThingInRange() && (this.getSided() == null || this.getSided().canExtractItem(slot, stack, side)); } @Override - public boolean hasCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ + public boolean hasCapability(Capability capability, EnumFacing facing){ return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).hasCapability(capability, facing) : super.hasCapability(capability, facing); } - @Nonnull + @Override - public T getCapability(@Nonnull Capability capability, @Nonnull EnumFacing facing){ + public T getCapability(Capability capability, EnumFacing facing){ return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).getCapability(capability, facing) : super.getCapability(capability, facing); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 9fc282b62..25a796790 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -194,17 +194,17 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return !this.isBreaker; } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return this.isBreaker; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index abd92bfbd..039248b12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -118,7 +118,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } @Override - public boolean isItemValidForSlot(int slot, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int slot, ItemStack stack){ return false; } @@ -179,12 +179,12 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return false; } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index 1b9e893fd..ab71037c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -87,17 +87,17 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return false; } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot < WHITELIST_START; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 7b04ab089..56131a83a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -68,17 +68,17 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I } @Override - public boolean isItemValidForSlot(int i, @Nonnull ItemStack stack){ + public boolean isItemValidForSlot(int i, ItemStack stack){ return false; } @Override - public boolean canInsertItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); } @Override - public boolean canExtractItem(int slot, @Nonnull ItemStack stack, @Nonnull EnumFacing side){ + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index b1f9fef3e..8e0041fc5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -37,15 +37,15 @@ public class FluidStateMapper extends StateMapperBase implements ItemMeshDefinit this.location = new ModelResourceLocation(new ResourceLocation(ModUtil.MOD_ID, "fluids"), fluid.getName()); } - @Nonnull + @Override - protected ModelResourceLocation getModelResourceLocation(@Nonnull IBlockState state){ + protected ModelResourceLocation getModelResourceLocation(IBlockState state){ return this.location; } - @Nonnull + @Override - public ModelResourceLocation getModelLocation(@Nonnull ItemStack stack){ + public ModelResourceLocation getModelLocation(ItemStack stack){ return this.location; } } From 3f20378f1a7b17b7a98510c1150c69ba37bfbb51 Mon Sep 17 00:00:00 2001 From: sokratis12GR Date: Mon, 30 May 2016 22:44:59 +0300 Subject: [PATCH 196/322] Fixed ArmorMaterial They change how it works //new int[]{boots, leggings, chestplate, helmet} --- .../mod/material/InitArmorMaterials.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index fd9566658..1788d3549 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -35,16 +35,16 @@ public class InitArmorMaterials{ public static void init(){ ModUtil.LOGGER.info("Initializing Armor Materials..."); - armorMaterialEmerald = addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID+":armorEmerald", 50, new int[]{5, 9, 8, 5}, 15, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialObsidian = addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID+":armorObsidian", 120, new int[]{3, 4, 3, 1}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialQuartz = addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID+":armorQuartz", 20, new int[]{3, 6, 5, 3}, 8, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialEmerald = addArmorMaterial("armorMaterialEmerald", ModUtil.MOD_ID+":armorEmerald", 50, new int[]{5, 8, 9, 5}, 15, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialObsidian = addArmorMaterial("armorMaterialObsidian", ModUtil.MOD_ID+":armorObsidian", 120, new int[]{1, 3, 4, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialQuartz = addArmorMaterial("armorMaterialQuartz", ModUtil.MOD_ID+":armorQuartz", 20, new int[]{3, 5, 6, 3}, 8, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalRed = addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID+":armorCrystalRed", 18, new int[]{3, 7, 6, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalBlue = addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID+":armorCrystalBlue", 18, new int[]{3, 7, 6, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalLightBlue = addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID+":armorCrystalLightBlue", 35, new int[]{7, 9, 7, 5}, 12, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalBlack = addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armorCrystalBlack", 12, new int[]{1, 4, 3, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalGreen = addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armorCrystalGreen", 60, new int[]{7, 10, 9, 6}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); - armorMaterialCrystalWhite = addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armorCrystalWhite", 18, new int[]{4, 7, 6, 4}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalRed = addArmorMaterial("armorMaterialCrystalRed", ModUtil.MOD_ID+":armorCrystalRed", 18, new int[]{3, 6, 7, 3}, 9, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlue = addArmorMaterial("armorMaterialCrystalBlue", ModUtil.MOD_ID+":armorCrystalBlue", 18, new int[]{3, 6, 7, 3}, 10, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalLightBlue = addArmorMaterial("armorMaterialCrystalLightBlue", ModUtil.MOD_ID+":armorCrystalLightBlue", 35, new int[]{5, 7, 9, 7}, 12, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalBlack = addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armorCrystalBlack", 12, new int[]{1, 3, 4, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalGreen = addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armorCrystalGreen", 60, new int[]{6, 9, 10, 7}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + armorMaterialCrystalWhite = addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armorCrystalWhite", 18, new int[]{4, 6, 7, 4}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); } private static ArmorMaterial addArmorMaterial(String name, String textureName, int durability, int[] reductionAmounts, int enchantability, SoundEvent soundOnEquip){ From 4f69a026984098eeef3df028f3257432d796bb96 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 30 May 2016 23:55:16 +0200 Subject: [PATCH 197/322] Update forge and fix addArmorMaterial. Closes #101 --- build.gradle | 2 +- .../mod/material/InitArmorMaterials.java | 6 +++--- .../ellpeck/actuallyadditions/mod/util/Util.java | 14 +++++++------- .../entity/shield/additionalbanners_apple.png | Bin 0 -> 3000 bytes 4 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 src/main/resources/assets/minecraft/textures/entity/shield/additionalbanners_apple.png diff --git a/build.gradle b/build.gradle index fe799456b..dad62d983 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.9.4-12.17.0.1909-1.9.4" + version = "1.9.4-12.17.0.1936-1.9.4" runDir = "idea" mappings = "snapshot_20160519" diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index d297251bc..97ca8781d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -16,6 +16,8 @@ import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraft.util.SoundEvent; import net.minecraftforge.common.util.EnumHelper; +import java.util.Locale; + public class InitArmorMaterials{ public static ArmorMaterial armorMaterialEmerald; @@ -45,8 +47,6 @@ public class InitArmorMaterials{ } private static ArmorMaterial addArmorMaterial(String name, String textureName, int durability, int[] reductionAmounts, int enchantability, SoundEvent soundOnEquip){ - //TODO Fuck forge because this broke - //return EnumHelper.addArmorMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), textureName, durability, reductionAmounts, enchantability, soundOnEquip); - return EnumHelper.addEnum(ArmorMaterial.class, name, new Class[]{String.class, int.class, int[].class, int.class, SoundEvent.class, float.class}, textureName, durability, reductionAmounts, enchantability, soundOnEquip, 0F); + return EnumHelper.addArmorMaterial((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), textureName, durability, reductionAmounts, enchantability, soundOnEquip, 0F); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index fef3fd90e..34698494b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -28,14 +28,14 @@ public class Util{ @SuppressWarnings("deprecation") public static final int BUCKET = FluidContainerRegistry.BUCKET_VOLUME; - public static final EnumRarity CRYSTAL_RED_RARITY = addRarity(ModUtil.MOD_ID+"crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); - public static final EnumRarity CRYSTAL_BLUE_RARITY = addRarity(ModUtil.MOD_ID+"crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); - public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = addRarity(ModUtil.MOD_ID+"crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); - public static final EnumRarity CRYSTAL_BLACK_RARITY = addRarity(ModUtil.MOD_ID+"crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); - public static final EnumRarity CRYSTAL_GREEN_RARITY = addRarity(ModUtil.MOD_ID+"crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); - public static final EnumRarity CRYSTAL_WHITE_RARITY = addRarity(ModUtil.MOD_ID+"crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); + public static final EnumRarity CRYSTAL_RED_RARITY = addRarity("crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); + public static final EnumRarity CRYSTAL_BLUE_RARITY = addRarity("crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); + public static final EnumRarity CRYSTAL_LIGHT_BLUE_RARITY = addRarity("crystalLightBlue", TextFormatting.BLUE, ModUtil.NAME+" Light Blue Crystal"); + public static final EnumRarity CRYSTAL_BLACK_RARITY = addRarity("crystalBlack", TextFormatting.DARK_GRAY, ModUtil.NAME+" Black Crystal"); + public static final EnumRarity CRYSTAL_GREEN_RARITY = addRarity("crystalGreen", TextFormatting.DARK_GREEN, ModUtil.NAME+" Green Crystal"); + public static final EnumRarity CRYSTAL_WHITE_RARITY = addRarity("crystalWhite", TextFormatting.GRAY, ModUtil.NAME+" White Crystal"); - public static final EnumRarity FALLBACK_RARITY = EnumHelper.addRarity(ModUtil.MOD_ID+".fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); + public static final EnumRarity FALLBACK_RARITY = addRarity("fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); public static void registerEvent(Object o){ MinecraftForge.EVENT_BUS.register(o); diff --git a/src/main/resources/assets/minecraft/textures/entity/shield/additionalbanners_apple.png b/src/main/resources/assets/minecraft/textures/entity/shield/additionalbanners_apple.png new file mode 100644 index 0000000000000000000000000000000000000000..0700393800a84567736fcc18f6c409271e9d29f2 GIT binary patch literal 3000 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 bWHKdKbM1A**hZblMF30;EcI(4ZcqLP+QWTQ literal 0 HcmV?d00001 From c2c33412bf668ac4577648438aaeed7ac6bfe6f8 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 30 May 2016 23:57:02 +0200 Subject: [PATCH 198/322] Where did that even come from..? --- .../entity/shield/additionalbanners_apple.png | Bin 3000 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/assets/minecraft/textures/entity/shield/additionalbanners_apple.png diff --git a/src/main/resources/assets/minecraft/textures/entity/shield/additionalbanners_apple.png b/src/main/resources/assets/minecraft/textures/entity/shield/additionalbanners_apple.png deleted file mode 100644 index 0700393800a84567736fcc18f6c409271e9d29f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3000 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 bWHKdKbM1A**hZblMF30;EcI(4ZcqLP+QWTQ From 2ebe4989b75da68286f6a9f207841bcbde7d4d30 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 1 Jun 2016 00:37:28 +0200 Subject: [PATCH 199/322] Removed ModelResourceLocation on server. Closes #103 --- .../actuallyadditions/mod/blocks/BlockColoredLamp.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java | 2 +- .../de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java | 2 +- .../ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java | 2 +- .../actuallyadditions/mod/blocks/base/BlockBushBase.java | 2 +- .../mod/blocks/base/BlockContainerBase.java | 2 +- .../actuallyadditions/mod/blocks/base/BlockPlant.java | 2 +- .../actuallyadditions/mod/blocks/base/BlockStair.java | 2 +- .../actuallyadditions/mod/event/EntityLivingEvents.java | 2 +- .../ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java | 3 ++- .../de/ellpeck/actuallyadditions/mod/items/ItemDrill.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemDust.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemFoods.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemJams.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemMisc.java | 3 ++- .../ellpeck/actuallyadditions/mod/items/ItemPotionRing.java | 2 +- .../actuallyadditions/mod/items/base/ItemArmorAA.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemBase.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java | 2 +- .../actuallyadditions/mod/items/base/ItemFoodBase.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemSeed.java | 2 +- .../actuallyadditions/mod/items/base/ItemSwordAA.java | 2 +- .../ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java | 2 +- .../de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 5 +++-- .../java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java | 3 ++- .../de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java | 3 ++- 29 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 45eb885ed..b4b3587ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -126,7 +126,7 @@ public class BlockColoredLamp extends BlockBase{ @Override protected void registerRendering(){ for(int i = 0; i < allLampTypes.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), META.getName()+"="+i); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index 22909b0f5..e83ab34c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -63,7 +63,7 @@ public class BlockCrystal extends BlockBase{ @Override protected void registerRendering(){ for(int i = 0; i < allCrystals.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), META.getName()+"="+i); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index 0fc517d3e..031323c2b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -63,7 +63,7 @@ public class BlockMisc extends BlockBase{ @Override protected void registerRendering(){ for(int i = 0; i < ALL_MISC_BLOCKS.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), META.getName()+"="+i); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 64f34b1e4..d835a9d17 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -98,7 +98,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override protected void registerRendering(){ for(int i = 0; i < allWildPlants.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), META.getName()+"="+i)); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), META.getName()+"="+i); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 9cc617dca..e1ef732f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -53,7 +53,7 @@ public class BlockBase extends Block{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index ba55ea587..f8b093a12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -53,7 +53,7 @@ public class BlockBushBase extends BlockBush{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 19d84e0fb..20eb46a2c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -74,7 +74,7 @@ public abstract class BlockContainerBase extends BlockContainer{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 9ab300ebe..15f122322 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -66,7 +66,7 @@ public class BlockPlant extends BlockCrops{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index d46379b3f..11840555c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -55,7 +55,7 @@ public class BlockStair extends BlockStairs{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } public EnumRarity getRarity(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index f24326d96..5a405685f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -81,7 +81,7 @@ public class EntityLivingEvents{ data.setTag("Deaths", deaths); - player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); + //player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); WorldData.makeDirty(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 680bce855..dd8fdfacc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -56,7 +56,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ @Override protected void registerRendering(){ ResourceLocation resLoc = new ResourceLocation(ModUtil.MOD_ID, "itemPaxel"); - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(resLoc, "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), resLoc, "inventory"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index c6b6b6393..45e981256 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -19,6 +19,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -62,7 +63,7 @@ public class ItemCrystal extends ItemBase{ protected void registerRendering(){ for(int i = 0; i < BlockCrystal.allCrystals.length; i++){ String name = this.getRegistryName()+BlockCrystal.allCrystals[i].name; - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(name), "inventory"); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index a0615544d..3dab8e6ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -344,7 +344,7 @@ public class ItemDrill extends ItemEnergy{ protected void registerRendering(){ for(int i = 0; i < 16; i++){ String name = this.getRegistryName()+TheColoredLampColors.values()[i].name; - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(name), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 38fcbdcae..7fb4d4bdc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -64,7 +64,7 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allDusts.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 8769c1ded..55c84882d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -107,7 +107,7 @@ public class ItemFoods extends ItemFoodBase{ protected void registerRendering(){ for(int i = 0; i < allFoods.length; i++){ String name = this.getRegistryName()+allFoods[i].name; - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name), "inventory"); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index de74ae6ed..38deace56 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -104,7 +104,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allJams.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 0467df77c..c0af9f8cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -19,6 +19,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -63,7 +64,7 @@ public class ItemMisc extends ItemBase{ protected void registerRendering(){ for(int i = 0; i < allMiscItems.length; i++){ String name = this.getRegistryName()+allMiscItems[i].name; - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name, "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(name), "inventory"); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 709d53785..bb9f1acfc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -110,7 +110,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ @Override protected void registerRendering(){ for(int i = 0; i < allRings.length; i++){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 0825e854c..574a022a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -54,7 +54,7 @@ public class ItemArmorAA extends ItemArmor{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index daffed792..9562bd5c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -42,6 +42,6 @@ public class ItemBase extends Item{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 23c997f5a..bf1a32e4b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -54,7 +54,7 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index e7cf046be..0aa8e3034 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -43,6 +43,6 @@ public class ItemFoodBase extends ItemFood{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index 040e02d11..debedac23 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -51,7 +51,7 @@ public class ItemHoeAA extends ItemHoe{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 34ae47a20..b3e902c82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -62,7 +62,7 @@ public class ItemSeed extends ItemSeeds{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index f3ba6768e..774c89e7d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -51,7 +51,7 @@ public class ItemSwordAA extends ItemSword{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } protected Class getItemBlock(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index 91f82f34b..b55ee6227 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -59,7 +59,7 @@ public class ItemToolAA extends ItemTool{ } protected void registerRendering(){ - ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), new ModelResourceLocation(this.getRegistryName(), "inventory")); + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 9ceaa0fac..af0ede67d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -37,6 +37,7 @@ import net.minecraft.client.resources.IResourceManager; import net.minecraft.client.resources.IResourceManagerReloadListener; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fluids.Fluid; @@ -181,8 +182,8 @@ public class ClientProxy implements IProxy{ } @Override - public void addRenderRegister(ItemStack stack, ModelResourceLocation location){ - MODEL_LOCATIONS_FOR_REGISTERING.put(stack, location); + public void addRenderRegister(ItemStack stack, ResourceLocation location, String variant){ + MODEL_LOCATIONS_FOR_REGISTERING.put(stack, new ModelResourceLocation(location, variant)); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index a9d687aca..c4a13eea5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.proxy; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @@ -25,7 +26,7 @@ public interface IProxy{ void postInit(FMLPostInitializationEvent event); - void addRenderRegister(ItemStack stack, ModelResourceLocation location); + void addRenderRegister(ItemStack stack, ResourceLocation location, String variant); void addColoredItem(Item item); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index 1bb5dd3ca..103f126d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @@ -37,7 +38,7 @@ public class ServerProxy implements IProxy{ } @Override - public void addRenderRegister(ItemStack stack, ModelResourceLocation location){ + public void addRenderRegister(ItemStack stack, ResourceLocation location, String variant){ } From 707a115708ea64e0aa4ba9af81b2432b53f5b7e6 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 1 Jun 2016 00:39:35 +0200 Subject: [PATCH 200/322] Cleanup --- .../api/ActuallyAdditionsAPI.java | 22 ++--- .../api/lens/LensConversion.java | 2 +- .../mod/ActuallyAdditions.java | 1 - .../mod/achievement/InitAchievements.java | 2 +- .../mod/blocks/BlockAtomicReconstructor.java | 1 - .../mod/blocks/BlockBookletStand.java | 2 - .../mod/blocks/BlockBreaker.java | 2 - .../mod/blocks/BlockCanolaPress.java | 2 - .../mod/blocks/BlockCoalGenerator.java | 1 - .../mod/blocks/BlockCoffeeMachine.java | 2 - .../mod/blocks/BlockColoredLamp.java | 2 - .../mod/blocks/BlockCompost.java | 3 +- .../mod/blocks/BlockCrystal.java | 2 - .../mod/blocks/BlockDirectionalBreaker.java | 2 - .../mod/blocks/BlockDropper.java | 2 - .../mod/blocks/BlockEnergizer.java | 2 - .../mod/blocks/BlockFeeder.java | 2 - .../mod/blocks/BlockFermentingBarrel.java | 2 - .../mod/blocks/BlockFireworkBox.java | 2 - .../mod/blocks/BlockFishingNet.java | 2 - .../mod/blocks/BlockFluidCollector.java | 2 - .../mod/blocks/BlockFurnaceDouble.java | 1 - .../mod/blocks/BlockFurnaceSolar.java | 2 - .../mod/blocks/BlockGiantChest.java | 1 - .../mod/blocks/BlockGreenhouseGlass.java | 2 - .../mod/blocks/BlockGrinder.java | 1 - .../mod/blocks/BlockHeatCollector.java | 2 - .../mod/blocks/BlockInputter.java | 2 - .../mod/blocks/BlockItemRepairer.java | 2 - .../mod/blocks/BlockItemViewer.java | 2 - .../mod/blocks/BlockLaserRelay.java | 2 - .../blocks/BlockLavaFactoryController.java | 2 - .../mod/blocks/BlockLeafGenerator.java | 2 - .../mod/blocks/BlockMiner.java | 2 - .../mod/blocks/BlockMisc.java | 2 - .../mod/blocks/BlockOilGenerator.java | 1 - .../mod/blocks/BlockPhantom.java | 2 - .../mod/blocks/BlockPhantomBooster.java | 2 - .../mod/blocks/BlockRangedCollector.java | 2 - .../mod/blocks/BlockSlabs.java | 2 - .../mod/blocks/BlockSmileyCloud.java | 1 - .../mod/blocks/BlockTreasureChest.java | 1 - .../mod/blocks/BlockWallAA.java | 1 - .../mod/blocks/BlockWildPlant.java | 2 - .../mod/blocks/BlockXPSolidifier.java | 2 - .../mod/blocks/InitBlocks.java | 1 - .../mod/blocks/base/BlockBase.java | 3 - .../mod/blocks/base/BlockBushBase.java | 3 - .../mod/blocks/base/BlockContainerBase.java | 2 - .../mod/blocks/base/BlockPlant.java | 8 +- .../mod/blocks/base/BlockStair.java | 1 - .../mod/blocks/base/ItemBlockBase.java | 2 - .../metalists/TheColoredLampColors.java | 2 - .../mod/blocks/render/RenderCompost.java | 2 - .../render/RenderReconstructorLens.java | 2 - .../mod/blocks/render/RenderSmileyCloud.java | 3 - .../mod/booklet/GuiBooklet.java | 15 ++-- .../mod/booklet/GuiBookletStand.java | 2 - .../mod/booklet/button/BookmarkButton.java | 6 +- .../mod/booklet/button/IndexButton.java | 4 +- .../mod/booklet/button/TexturedButton.java | 4 +- .../mod/crafting/BlockCrafting.java | 2 +- .../mod/crafting/CrusherCrafting.java | 5 +- .../mod/crafting/ItemCrafting.java | 6 +- .../mod/creative/CreativeTab.java | 2 - .../mod/event/EntityLivingEvents.java | 5 -- .../gen/VillageComponentCustomCropField.java | 1 - .../mod/gen/VillageComponentJamHouse.java | 1 - .../mod/gen/WorldGenLushCaves.java | 1 - .../mod/inventory/ContainerBreaker.java | 2 - .../mod/inventory/ContainerCanolaPress.java | 3 - .../mod/inventory/ContainerCoalGenerator.java | 3 - .../mod/inventory/ContainerCoffeeMachine.java | 3 - .../mod/inventory/ContainerCrafter.java | 2 - .../ContainerDirectionalBreaker.java | 3 - .../mod/inventory/ContainerDrill.java | 5 -- .../mod/inventory/ContainerDropper.java | 3 - .../mod/inventory/ContainerEnergizer.java | 3 - .../mod/inventory/ContainerEnervator.java | 3 - .../mod/inventory/ContainerFeeder.java | 3 - .../inventory/ContainerFermentingBarrel.java | 3 - .../inventory/ContainerFluidCollector.java | 3 - .../mod/inventory/ContainerFurnaceDouble.java | 3 - .../mod/inventory/ContainerGiantChest.java | 2 - .../mod/inventory/ContainerGrinder.java | 3 - .../mod/inventory/ContainerInputter.java | 3 - .../ContainerLaserRelayItemWhitelist.java | 3 - .../mod/inventory/ContainerMiner.java | 3 - .../mod/inventory/ContainerOilGenerator.java | 2 - .../mod/inventory/ContainerPhantomPlacer.java | 3 - .../inventory/ContainerRangedCollector.java | 3 - .../mod/inventory/ContainerRepairer.java | 3 - .../mod/inventory/ContainerSmileyCloud.java | 2 - .../mod/inventory/ContainerXPSolidifier.java | 3 - .../mod/inventory/gui/GuiInputter.java | 3 +- .../mod/inventory/gui/GuiRangedCollector.java | 4 +- .../mod/inventory/gui/GuiSmileyCloud.java | 4 +- .../mod/inventory/slot/SlotImmovable.java | 2 - .../mod/items/InitForeignPaxels.java | 4 +- .../mod/items/InitItems.java | 5 +- .../mod/items/ItemAllToolAA.java | 2 - .../mod/items/ItemAxeAA.java | 1 - .../mod/items/ItemBattery.java | 2 - .../mod/items/ItemBooklet.java | 3 +- .../mod/items/ItemChestToCrateUpgrade.java | 2 - .../mod/items/ItemCoffee.java | 1 - .../mod/items/ItemCoffeeBean.java | 2 - .../mod/items/ItemCrafterOnAStick.java | 2 - .../mod/items/ItemCrystal.java | 2 - .../mod/items/ItemDrill.java | 2 - .../mod/items/ItemDrillUpgrade.java | 2 - .../actuallyadditions/mod/items/ItemDust.java | 2 - .../mod/items/ItemFertilizer.java | 2 - .../mod/items/ItemFoods.java | 1 - .../mod/items/ItemGeneric.java | 2 - .../mod/items/ItemGrowthRing.java | 1 - .../mod/items/ItemHairyBall.java | 2 - .../actuallyadditions/mod/items/ItemJams.java | 2 - .../mod/items/ItemKnife.java | 2 - .../mod/items/ItemLaserWrench.java | 2 - .../mod/items/ItemLeafBlower.java | 1 - .../mod/items/ItemMagnetRing.java | 1 - .../actuallyadditions/mod/items/ItemMisc.java | 2 - .../mod/items/ItemPhantomConnector.java | 2 - .../mod/items/ItemPickaxeAA.java | 1 - .../mod/items/ItemPotionRing.java | 2 - .../items/ItemRarmorModuleReconstructor.java | 1 - .../mod/items/ItemResonantRice.java | 2 - .../mod/items/ItemShovelAA.java | 1 - .../mod/items/ItemSolidifiedExperience.java | 2 - .../mod/items/ItemSpawnerChanger.java | 1 - .../mod/items/ItemTeleStaff.java | 2 - .../mod/items/ItemWaterRemovalRing.java | 2 - .../mod/items/ItemWingsOfTheBats.java | 1 - .../mod/items/base/ItemArmorAA.java | 3 - .../mod/items/base/ItemBase.java | 1 - .../mod/items/base/ItemEnergy.java | 2 - .../mod/items/base/ItemFoodBase.java | 1 - .../mod/items/base/ItemHoeAA.java | 3 - .../mod/items/base/ItemSeed.java | 3 - .../mod/items/base/ItemSwordAA.java | 3 - .../mod/items/base/ItemToolAA.java | 2 - .../mod/items/lens/ItemLens.java | 2 - .../mod/jei/JEIActuallyAdditionsPlugin.java | 2 - .../mod/jei/RecipeWrapperWithButton.java | 2 - .../jei/booklet/BookletRecipeCategory.java | 1 - .../mod/jei/booklet/BookletRecipeHandler.java | 2 - .../mod/jei/booklet/BookletRecipeWrapper.java | 1 - .../coffee/CoffeeMachineRecipeCategory.java | 2 - .../coffee/CoffeeMachineRecipeHandler.java | 2 - .../coffee/CoffeeMachineRecipeWrapper.java | 1 - .../jei/crusher/CrusherRecipeCategory.java | 1 - .../mod/jei/crusher/CrusherRecipeHandler.java | 2 - .../mod/jei/crusher/CrusherRecipeWrapper.java | 1 - .../ReconstructorRecipeCategory.java | 2 - .../ReconstructorRecipeHandler.java | 2 - .../ReconstructorRecipeWrapper.java | 1 - .../mod/misc/BannerHelper.java | 4 +- .../mod/misc/DamageSources.java | 4 - .../mod/misc/DispenserHandlerFertilize.java | 2 - .../actuallyadditions/mod/misc/WorldData.java | 2 - .../mod/misc/special/SpecialRenderInit.java | 1 - .../mod/network/PacketBookletStandButton.java | 1 - .../mod/proxy/ClientProxy.java | 6 +- .../actuallyadditions/mod/proxy/IProxy.java | 1 - .../mod/proxy/ServerProxy.java | 1 - .../tile/TileEntityAtomicReconstructor.java | 2 - .../mod/tile/TileEntityBase.java | 4 +- .../mod/tile/TileEntityBreaker.java | 1 - .../mod/tile/TileEntityCanolaPress.java | 2 - .../mod/tile/TileEntityCoalGenerator.java | 2 - .../mod/tile/TileEntityCoffeeMachine.java | 2 - .../mod/tile/TileEntityCompost.java | 24 +++--- .../tile/TileEntityDirectionalBreaker.java | 1 - .../mod/tile/TileEntityDropper.java | 2 - .../mod/tile/TileEntityEnergizer.java | 2 - .../mod/tile/TileEntityEnervator.java | 2 - .../mod/tile/TileEntityFeeder.java | 1 - .../mod/tile/TileEntityFireworkBox.java | 82 +++++++++---------- .../mod/tile/TileEntityFurnaceDouble.java | 2 - .../mod/tile/TileEntityGiantChest.java | 2 - .../mod/tile/TileEntityGrinder.java | 1 - .../mod/tile/TileEntityInputter.java | 2 - .../mod/tile/TileEntityInventoryBase.java | 6 +- .../mod/tile/TileEntityItemRepairer.java | 2 - .../mod/tile/TileEntityItemViewer.java | 1 - .../mod/tile/TileEntityLaserRelay.java | 5 +- .../TileEntityLaserRelayItemWhitelist.java | 3 - .../mod/tile/TileEntityMiner.java | 1 - .../mod/tile/TileEntityPhantomItemface.java | 2 - .../mod/tile/TileEntityPhantomPlacer.java | 1 - .../mod/tile/TileEntityPhantomface.java | 2 - .../mod/tile/TileEntityRangedCollector.java | 1 - .../mod/tile/TileEntityXPSolidifier.java | 4 +- .../mod/util/FluidStateMapper.java | 2 - .../actuallyadditions/mod/util/ModUtil.java | 4 +- .../mod/util/playerdata/ExtraClientData.java | 2 +- 197 files changed, 104 insertions(+), 466 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index d69dc8068..ee19c33d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -31,14 +31,6 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; public static final String API_VERSION = "15"; - - /** - * Use this to handle things that aren't based in the API itself - * DO NOT CHANGE/OVERRIDE THIS!! - * This is getting initialized in Actually Additions' PreInit phase - */ - public static IMethodHandler methodHandler; - public static final List CRUSHER_RECIPES = new ArrayList(); public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); public static final List TREASURE_CHEST_LOOT = new ArrayList(); @@ -46,10 +38,14 @@ public class ActuallyAdditionsAPI{ public static final Map RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap(); public static final List COFFEE_MACHINE_INGREDIENTS = new ArrayList(); public static final List COMPOST_RECIPES = new ArrayList(); - public static final List BOOKLET_ENTRIES = new ArrayList(); public static final List BOOKLET_PAGES_WITH_ITEM_DATA = new ArrayList(); - + /** + * Use this to handle things that aren't based in the API itself + * DO NOT CHANGE/OVERRIDE THIS!! + * This is getting initialized in Actually Additions' PreInit phase + */ + public static IMethodHandler methodHandler; //These are getting initialized in Actually Additions' PreInit phase //DO NOT CHANGE/OVERRIDE THESE!! public static IBookletEntry entryGettingStarted; @@ -140,9 +136,9 @@ public class ActuallyAdditionsAPI{ * Adds a new conversion recipe to the compost. * StackSize is regarded on both input and output and they can be different. * - * @param input The itemstack to be input into the compost - * @param inputDisplay The block to display when there is input in the compost - * @param output The itemstack to be output from the compost once conversion finishes + * @param input The itemstack to be input into the compost + * @param inputDisplay The block to display when there is input in the compost + * @param output The itemstack to be output from the compost once conversion finishes * @param outputDisplay The block to display when there is output in the compost */ public static void addCompostRecipe(ItemStack input, Block inputDisplay, ItemStack output, Block outputDisplay){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java index 4d31fd789..186210036 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/lens/LensConversion.java @@ -19,7 +19,7 @@ import net.minecraft.util.math.BlockPos; /** * This is the base class for a Reconstructor Lens Type that converts two items * via the ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES list. - * + *

* If you want to make a new type of conversion, just use your type in the recipe * If you want to use the default type of conversion, use ActuallyAdditionsAPI.lensDefaultConversion. */ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 1f5e05e9c..6902745dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.booklet.InitBooklet; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.crafting.CrusherCrafting; import de.ellpeck.actuallyadditions.mod.crafting.InitCrafting; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java index 808822e58..010958d5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java @@ -19,9 +19,9 @@ import java.util.ArrayList; public class InitAchievements{ + public static final ArrayList achievementList = new ArrayList(); public static int pageNumber; public static AchievementPage theAchievementPage; - public static final ArrayList achievementList = new ArrayList(); public static void init(){ ModUtil.LOGGER.info("Initializing Achievements..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 28582ae4f..b005fa7d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -40,7 +40,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class BlockAtomicReconstructor extends BlockContainerBase implements IHudDisplay{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java index a59e8c76b..3275c8d13 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java @@ -43,8 +43,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - @SuppressWarnings("deprecation") public class BlockBookletStand extends BlockContainerBase implements IHudDisplay{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index f425a036a..143f4150b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -32,8 +32,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockBreaker extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 2614a7432..8c69d00f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -26,8 +26,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockCanolaPress extends BlockContainerBase{ public BlockCanolaPress(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 5d0b6888e..02a1977df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -33,7 +33,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.Random; public class BlockCoalGenerator extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 7cf0671da..4e4937099 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -32,8 +32,6 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockCoffeeMachine extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(0.0625, 0, 0.0625, 1-0.0625, 1-0.0625*2, 1-0.0625); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index b4b3587ed..09f076885 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -22,7 +22,6 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -37,7 +36,6 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; -import javax.annotation.Nonnull; import java.util.List; import java.util.Random; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 77924b729..9779841e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -37,7 +37,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class BlockCompost extends BlockContainerBase implements IHudDisplay{ @@ -111,7 +110,7 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ ItemStack stackIn = slot.copy(); if(stackIn.stackSize < recipeHand.input.stackSize){ int sizeAdded = Math.min(maxAdd, recipeHand.input.stackSize-stackIn.stackSize); - stackIn.stackSize+=sizeAdded; + stackIn.stackSize += sizeAdded; compost.setInventorySlotContents(0, stackIn); player.inventory.decrStackSize(player.inventory.currentItem, sizeAdded); return true; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index e83ab34c3..ec7f704f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -19,7 +19,6 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -27,7 +26,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class BlockCrystal extends BlockBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index 9718183c5..54f672c3c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -31,8 +31,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockDirectionalBreaker extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index 56b8e97d0..5141a0759 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -30,8 +30,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockDropper extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java index 86da9415c..8be3a2da6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockEnergizer.java @@ -27,8 +27,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockEnergizer extends BlockContainerBase{ private final boolean isEnergizer; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java index 98b46ca3e..b1e5c1765 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFeeder.java @@ -26,8 +26,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockFeeder extends BlockContainerBase{ public BlockFeeder(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index 8adeba061..8aad2a9be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -26,8 +26,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockFermentingBarrel extends BlockContainerBase{ public BlockFermentingBarrel(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java index 16c75b664..240fac039 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFireworkBox.java @@ -25,8 +25,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockFireworkBox extends BlockContainerBase{ public BlockFireworkBox(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index e265ecb17..552528da6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -23,8 +23,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockFishingNet extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 0.0625, 1); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 297478819..24ab39ac6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -32,8 +32,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockFluidCollector extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index bedd187d3..d20a89525 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -35,7 +35,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.Random; public class BlockFurnaceDouble extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index 6b60b59a6..be1d10359 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -23,8 +23,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockFurnaceSolar extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 6*0.0625, 1); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 0af027460..4de68096f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -32,7 +32,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import javax.annotation.Nonnull; import java.util.ArrayList; public class BlockGiantChest extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index 9b5943d13..0831d9a51 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -27,8 +27,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class BlockGreenhouseGlass extends BlockContainerBase{ public BlockGreenhouseGlass(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index 4a9f78bfa..b947a5b70 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -34,7 +34,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.Random; public class BlockGrinder extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java index 2127f5939..348478f9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockHeatCollector.java @@ -19,8 +19,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockHeatCollector extends BlockContainerBase{ public BlockHeatCollector(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index c52559bec..ae4fb49ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -34,8 +34,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockInputter extends BlockContainerBase{ public static final int NAME_FLAVOR_AMOUNTS = 15; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index dc1684794..bb223860e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -29,8 +29,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockItemRepairer extends BlockContainerBase{ public BlockItemRepairer(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index 988362dbb..54a1abd6c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -19,8 +19,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockItemViewer extends BlockContainerBase{ public BlockItemViewer(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 388ec7a1d..f35fd68df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -31,8 +31,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockLaserRelay extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java index af0c323f9..ac9f4bb47 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLavaFactoryController.java @@ -28,8 +28,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class BlockLavaFactoryController extends BlockContainerBase implements IHudDisplay{ public BlockLavaFactoryController(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java index dd10226b1..ffe2ac44d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLeafGenerator.java @@ -21,8 +21,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockLeafGenerator extends BlockContainerBase{ public BlockLeafGenerator(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index 5d478f291..ddc3b1d55 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -34,8 +34,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class BlockMiner extends BlockContainerBase implements IHudDisplay{ public BlockMiner(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index 031323c2b..b7e7e7d87 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -19,7 +19,6 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -27,7 +26,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class BlockMisc extends BlockBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 2f5792001..2fccbe5b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -33,7 +33,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.Random; public class BlockOilGenerator extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index b38bf8de2..5beafafa6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -39,8 +39,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ public final Type type; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index 6b235fa5d..0b1f6ab03 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -23,8 +23,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockPhantomBooster extends BlockContainerBase{ private static final AxisAlignedBB AABB = new AxisAlignedBB(2*0.0625, 0, 2*0.0625, 1-2*0.0625, 1, 1-2*0.0625); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java index f576249d9..f8c58bcb4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockRangedCollector.java @@ -26,8 +26,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockRangedCollector extends BlockContainerBase{ public BlockRangedCollector(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index 3a54d6830..f0d1a244c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -31,8 +31,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class BlockSlabs extends BlockBase{ private static final AxisAlignedBB AABB_BOTTOM_HALF = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index c8c287201..5feafb6aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -36,7 +36,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.Random; public class BlockSmileyCloud extends BlockContainerBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 038876caf..8b0c2832e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -34,7 +34,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.Random; public class BlockTreasureChest extends BlockBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 07150301c..9f7ebac68 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -30,7 +30,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class BlockWallAA extends BlockBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index d835a9d17..66a17ce80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -23,7 +23,6 @@ import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -37,7 +36,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class BlockWildPlant extends BlockBushBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index 010d76add..bb7670c98 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -34,8 +34,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class BlockXPSolidifier extends BlockContainerBase{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 28dbfdd40..988f14133 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.util.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index e1ef732f9..5972d1455 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -17,12 +17,9 @@ import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class BlockBase extends Block{ private final String name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index f8b093a12..f5098f9c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -17,12 +17,9 @@ import net.minecraft.block.SoundType; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class BlockBushBase extends BlockBush{ private final String name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 20eb46a2c..e1d4b891b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -21,7 +21,6 @@ import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -40,7 +39,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidUtil; import net.minecraftforge.fluids.IFluidHandler; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Random; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 15f122322..548693e37 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import net.minecraft.block.BlockCrops; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -27,18 +26,17 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.EnumPlantType; -import javax.annotation.Nonnull; import java.util.List; import java.util.Random; public class BlockPlant extends BlockCrops{ - public Item seedItem; - public Item returnItem; - public int returnMeta; private final String name; private final int minDropAmount; private final int addDropAmount; + public Item seedItem; + public Item returnItem; + public int returnMeta; public BlockPlant(String name, int minDropAmount, int addDropAmount){ this.name = name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index 11840555c..57416e9ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockStairs; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index 924a1aebc..a3f7137cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -16,8 +16,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemBlockBase extends ItemBlock{ public ItemBlockBase(Block block){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java index c9b0821fc..cf8e39efa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/metalists/TheColoredLampColors.java @@ -10,8 +10,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.metalists; -import java.util.Locale; - public enum TheColoredLampColors{ WHITE("White"), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java index e54d4494c..a28362341 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderCompost.java @@ -21,8 +21,6 @@ import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import javax.annotation.Nonnull; - public class RenderCompost extends TileEntitySpecialRenderer{ @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index fa5217cfe..24d749c32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -20,8 +20,6 @@ import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import javax.annotation.Nonnull; - public class RenderReconstructorLens extends TileEntitySpecialRenderer{ @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 79f79cae7..6b286cd35 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -21,9 +21,6 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -import javax.annotation.Nonnull; -import java.util.Locale; - public class RenderSmileyCloud extends TileEntitySpecialRenderer{ @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 50da85c4f..1f9e81c63 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -13,8 +13,8 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; -import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; +import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton; import de.ellpeck.actuallyadditions.mod.booklet.button.IndexButton; import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; @@ -46,7 +46,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; -import javax.annotation.Nonnull; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -65,9 +64,14 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ private static final int[] AND_HIS_NAME_IS = new int[]{Keyboard.KEY_C, Keyboard.KEY_E, Keyboard.KEY_N, Keyboard.KEY_A}; public final int xSize; public final int ySize; + public final IEntrySet currentEntrySet = new EntrySet(null); + public final GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT]; + public final GuiButton[] bookmarkButtons = new GuiButton[8]; + public final GuiScreen parentScreen; + private final boolean tryOpenMainPage; + private final boolean saveOnClose; public int guiLeft; public int guiTop; - public final IEntrySet currentEntrySet = new EntrySet(null); public int indexPageAmount; public GuiButton buttonForward; public GuiButton buttonBackward; @@ -80,14 +84,9 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public GuiButton buttonWebsite; public GuiButton buttonPatreon; public GuiButton buttonViewOnline; - public final GuiButton[] chapterButtons = new GuiButton[CHAPTER_BUTTONS_AMOUNT]; - public final GuiButton[] bookmarkButtons = new GuiButton[8]; public GuiTextField searchField; - public final GuiScreen parentScreen; private int ticksElapsed; private boolean mousePressed; - private final boolean tryOpenMainPage; - private final boolean saveOnClose; private int hisNameIsAt; public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java index ef9d5718d..b7fc142c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java @@ -20,8 +20,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - @SideOnly(Side.CLIENT) public class GuiBookletStand extends GuiBooklet{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 7f1ea9d80..78c4d5e97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -10,9 +10,9 @@ package de.ellpeck.actuallyadditions.mod.booklet.button; -import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import net.minecraft.client.Minecraft; @@ -22,14 +22,12 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; -import javax.annotation.Nonnull; import java.util.ArrayList; public class BookmarkButton extends GuiButton{ - public EntrySet assignedEntry = new EntrySet(null); - private final GuiBooklet booklet; + public EntrySet assignedEntry = new EntrySet(null); public BookmarkButton(int id, int x, int y, GuiBooklet booklet){ super(id, x, y, 16, 16, ""); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 2ec0a145e..355f90d3b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -21,12 +21,10 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.text.TextFormatting; -import javax.annotation.Nonnull; - public class IndexButton extends GuiButton{ - public IBookletChapter chap; private final GuiBooklet gui; + public IBookletChapter chap; public IndexButton(int id, int x, int y, int width, int height, String text, GuiBooklet gui){ super(id, x, y, width, height, text); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index e034c1476..4a57984d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -15,17 +15,15 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; public class TexturedButton extends GuiButton{ + public final List textList = new ArrayList(); public int texturePosX; public int texturePosY; - public final List textList = new ArrayList(); - public TexturedButton(int id, int x, int y, int texturePosX, int texturePosY, int width, int height){ this(id, x, y, texturePosX, texturePosY, width, height, new ArrayList()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 1844454f9..8f571bfe9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -29,6 +29,7 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; public class BlockCrafting{ + public static final IRecipe[] recipesLamps = new IRecipe[BlockColoredLamp.allLampTypes.length]; public static IRecipe recipeSmileyCloud; public static IRecipe recipePhantomface; public static IRecipe recipeLiquiface; @@ -71,7 +72,6 @@ public class BlockCrafting{ public static IRecipe recipeCrate; public static IRecipe recipeFermentingBarrel; public static IRecipe recipeCanolaPress; - public static final IRecipe[] recipesLamps = new IRecipe[BlockColoredLamp.allLampTypes.length]; public static IRecipe recipePowerer; public static IRecipe recipeLeafGen; public static IRecipe recipeDirectionalBreaker; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index b7213fa53..36d3c8b81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -12,11 +12,8 @@ package de.ellpeck.actuallyadditions.mod.crafting; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; -import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -29,10 +26,10 @@ import java.util.ArrayList; public class CrusherCrafting{ + public static final ArrayList miscRecipes = new ArrayList(); public static CrusherRecipe recipeIronHorseArmor; public static CrusherRecipe recipeGoldHorseArmor; public static CrusherRecipe recipeDiamondHorseArmor; - public static final ArrayList miscRecipes = new ArrayList(); public static void init(){ ModUtil.LOGGER.info("Initializing Crusher Recipes..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 96aa5213d..f34fbdec2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -38,15 +38,16 @@ import java.util.ArrayList; public class ItemCrafting{ + public static final ArrayList recipesMashedFood = new ArrayList(); + public static final ArrayList recipesDrillColoring = new ArrayList(); + public static final ArrayList recipesPotionRings = new ArrayList(); public static IRecipe recipePhantomConnector; public static IRecipe recipeCoil; public static IRecipe recipeCoilAdvanced; public static IRecipe recipeBook; public static IRecipe recipeTinyCoal; public static IRecipe recipeTinyChar; - public static final ArrayList recipesMashedFood = new ArrayList(); public static IRecipe recipeDrill; - public static final ArrayList recipesDrillColoring = new ArrayList(); public static IRecipe recipeDrillSpeedI; public static IRecipe recipeDrillSpeedII; public static IRecipe recipeDrillSpeedIII; @@ -75,7 +76,6 @@ public class ItemCrafting{ public static IRecipe recipeRiceDough; public static IRecipe recipeLeafBlower; public static IRecipe recipeLeafBlowerAdvanced; - public static final ArrayList recipesPotionRings = new ArrayList(); public static IRecipe recipeChestToCrateUpgrade; public static IRecipe recipeLaserWrench; public static IRecipe recipeDrillCore; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 94d0be0a6..e887eaa15 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.creative; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.items.InitForeignPaxels; import de.ellpeck.actuallyadditions.mod.items.InitItems; @@ -25,7 +24,6 @@ import net.minecraftforge.fluids.UniversalBucket; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class CreativeTab extends CreativeTabs{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index 5a405685f..09a4a739c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.misc.WorldData; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; import net.minecraft.entity.EntityCreature; @@ -29,10 +28,6 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.util.text.TextFormatting; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index 9a1c4174f..2e7cb0de7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -21,7 +21,6 @@ import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; -import javax.annotation.Nonnull; import java.util.List; import java.util.Random; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index 258fa93fa..f716cc712 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -19,7 +19,6 @@ import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; -import javax.annotation.Nonnull; import java.util.List; import java.util.Random; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java index 2d49feace..a92fed062 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java @@ -20,7 +20,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.gen.feature.*; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index 43edacc2d..858ca5d3c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -18,8 +18,6 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerBreaker extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index 99c35e162..eb980e3bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -14,15 +14,12 @@ import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCanolaPress; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerCanolaPress extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index c59aff1f2..60773bd2f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -20,8 +19,6 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityFurnace; -import javax.annotation.Nonnull; - public class ContainerCoalGenerator extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index 2809d25f3..f59711d48 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -16,15 +16,12 @@ import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoffeeMachine; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerCoffeeMachine extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index 27f216f4b..b15018967 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -18,8 +18,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ContainerCrafter extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index 37591b74e..fe7181a50 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -12,15 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDirectionalBreaker; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerDirectionalBreaker extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index c5deef69d..7f547b687 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -14,8 +14,6 @@ import cofh.api.energy.IEnergyContainerItem; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.items.ItemDrillUpgrade; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -24,11 +22,8 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; -import javax.annotation.Nonnull; - public class ContainerDrill extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index b530768a7..0143f19b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -12,15 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDropper; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerDropper extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index f4148b48d..97ed701d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -14,7 +14,6 @@ import cofh.api.energy.IEnergyContainerItem; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnergizer; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -25,8 +24,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class ContainerEnergizer extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index cffd8b22c..14a9186ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -14,7 +14,6 @@ import cofh.api.energy.IEnergyContainerItem; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnervator; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -25,8 +24,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class ContainerEnervator extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index 8fbcc5c3e..f2511306e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -12,15 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFeeder; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerFeeder extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index 71f5e1d09..2b5b55344 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -12,15 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFermentingBarrel; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerFermentingBarrel extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 174b4224e..7624a2e5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -12,15 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidCollector; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerFluidCollector extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index 56571fe9b..98a41acea 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFurnaceDouble; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -21,8 +20,6 @@ import net.minecraft.inventory.SlotFurnaceOutput; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; -import javax.annotation.Nonnull; - public class ContainerFurnaceDouble extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 6885814f9..c802de8d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -18,8 +18,6 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerGiantChest extends Container{ public final TileEntityGiantChest tileChest; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index c08de37d2..462f5c065 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -14,15 +14,12 @@ import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerGrinder extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 887bdafef..1a7eee3d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiInputter; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityInputter; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -22,8 +21,6 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerInputter extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 9125fbdcc..79a71cddb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -21,8 +20,6 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerLaserRelayItemWhitelist extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 2d5bc6634..707823c7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -12,15 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityMiner; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerMiner extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 4d0114ae0..c5b43019f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -18,8 +18,6 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerOilGenerator extends Container{ private final TileEntityOilGenerator generator; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index 6d5d2165f..69c980af0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -12,15 +12,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityPhantomPlacer; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerPhantomPlacer extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 39c1505e0..4742bc767 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityRangedCollector; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -21,8 +20,6 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerRangedCollector extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index 654a96c2d..765fb50e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -13,15 +13,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemRepairer; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerRepairer extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java index 98c6e2f44..7e32752a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerSmileyCloud.java @@ -14,8 +14,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerSmileyCloud extends Container{ @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index 136bc51aa..5dbbba39b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -13,15 +13,12 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityXPSolidifier; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ContainerXPSolidifier extends Container{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 2948b7383..e7cff237f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -32,7 +32,6 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; -import javax.annotation.Nonnull; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -56,13 +55,13 @@ public class GuiInputter extends GuiContainer{ private final int y; private final int z; private final World world; + private final boolean isAdvanced; private SmallerButton whitelistPut; private SmallerButton whitelistPull; private GuiTextField fieldPutStart; private GuiTextField fieldPutEnd; private GuiTextField fieldPullStart; private GuiTextField fieldPullEnd; - private final boolean isAdvanced; public GuiInputter(InventoryPlayer inventory, TileEntityBase tile, int x, int y, int z, World world, boolean isAdvanced){ super(new ContainerInputter(inventory, tile, isAdvanced)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index f2868e33a..a8e1a4fd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -35,13 +35,11 @@ public class GuiRangedCollector extends GuiContainer{ private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiRangedCollector"); private final TileEntityRangedCollector collector; - - private GuiInputter.SmallerButton whitelistButton; - private final int x; private final int y; private final int z; private final World world; + private GuiInputter.SmallerButton whitelistButton; public GuiRangedCollector(InventoryPlayer inventory, TileEntityBase tile, int x, int y, int z, World world){ super(new ContainerRangedCollector(inventory, tile)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index d4259da40..6d3abb1da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -40,10 +40,8 @@ public class GuiSmileyCloud extends GuiContainer{ private final int y; private final int z; private final World world; - - private GuiTextField nameField; - private final TileEntitySmileyCloud cloud; + private GuiTextField nameField; public GuiSmileyCloud(TileEntityBase tile, int x, int y, int z, World world){ super(new ContainerSmileyCloud()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java index 8cac76c9a..d4e95e199 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotImmovable.java @@ -15,8 +15,6 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class SlotImmovable extends Slot{ public SlotImmovable(IInventory inventory, int id, int x, int y){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java index e3cd62e73..c179ad18c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java @@ -30,6 +30,8 @@ public class InitForeignPaxels{ public static final String[] MT_NAMES = new String[]{"Obsidian", "LapisLazuli", "Osmium", "Bronze", "Glowstone", "Steel"}; public static final int[] TF_COLORS = new int[]{13332762, 5407943, 5407895, 5394789, 12960613, 12960653, 12410135, 2999795, 10143162}; public static final int[] SO_COLORS = new int[]{9409450, 2040021, 5714944, 526344, 545032}; + public static final Item[] tfPaxels = new Item[9]; + public static final Item[] soPaxels = new Item[5]; //MekanismTools private static final String MEKANISM_TOOLS = "MekanismTools"; private static final String[] MT_REPAIR_NAMES = new String[]{"ingotRefinedObsidian", "gemLapis", "ingotOsmium", "ingotBronze", "ingotRefinedGlowstone", "ingotSteel"}; @@ -40,8 +42,6 @@ public class InitForeignPaxels{ private static final String SIMPLE_ORES = "simpleores"; private static final String[] SO_NAMES = new String[]{"tin", "mythril", "copper", "onyx", "adamantium"}; private static final String[] SO_REPAIR_NAMES = new String[]{"ingotTin", "ingotMythril", "ingotCopper", "gemOnyx", "ingotAdamantium"}; - public static final Item[] tfPaxels = new Item[9]; - public static final Item[] soPaxels = new Item[5]; private static final Item[] mtPaxels = new Item[6]; public static void init(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index f88de705f..d1f8ab34b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -12,7 +12,10 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.items.base.*; +import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; +import de.ellpeck.actuallyadditions.mod.items.base.ItemHoeAA; +import de.ellpeck.actuallyadditions.mod.items.base.ItemSeed; +import de.ellpeck.actuallyadditions.mod.items.base.ItemSwordAA; import de.ellpeck.actuallyadditions.mod.items.lens.ItemLens; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index dd8fdfacc..bdabdc954 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -18,7 +18,6 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -34,7 +33,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.HashSet; import java.util.Set; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java index e5aa57222..0c31cf28a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAxeAA.java @@ -20,7 +20,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; import java.util.Set; public class ItemAxeAA extends ItemToolAA{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java index 480287f51..a1f0168e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java @@ -14,8 +14,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemBattery extends ItemEnergy{ public ItemBattery(String name, int capacity, int transfer){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 011f6eaa8..5b2727031 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -12,12 +12,12 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.blocks.IHudDisplay; import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -42,7 +42,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemBooklet extends ItemBase implements IHudDisplay{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index 6acc0af22..2752907ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -28,8 +28,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemChestToCrateUpgrade extends ItemBase{ public ItemChestToCrateUpgrade(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index 48340c230..ce9cb978f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -31,7 +31,6 @@ import net.minecraft.util.StringUtils; import net.minecraft.world.World; import net.minecraftforge.fml.common.Loader; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java index 1076ab477..3da5de4d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffeeBean.java @@ -14,8 +14,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemCoffeeBean extends ItemFoodBase{ public ItemCoffeeBean(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java index ad1c4898d..c83422dd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrafterOnAStick.java @@ -21,8 +21,6 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemCrafterOnAStick extends ItemBase{ public ItemCrafterOnAStick(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index 45e981256..ce0fbcb33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.BlockCrystal; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -23,7 +22,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemCrystal extends ItemBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 3dab8e6ad..15e39197c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -26,7 +26,6 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -50,7 +49,6 @@ import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.HashSet; import java.util.List; import java.util.Set; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java index 99f747e32..9be78d3b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrillUpgrade.java @@ -19,8 +19,6 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemDrillUpgrade extends ItemBase{ public final UpgradeType type; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 7fb4d4bdc..9fe7f1afc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheDusts; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; @@ -24,7 +23,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemDust extends ItemBase implements IColorProvidingItem{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index 2a2df1dd3..bf4335740 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -23,8 +23,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemFertilizer extends ItemBase{ public ItemFertilizer(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 55c84882d..e0f596d7a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -27,7 +27,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemFoods extends ItemFoodBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java index 08188b743..86238564e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGeneric.java @@ -14,8 +14,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemGeneric extends ItemBase{ public ItemGeneric(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index d862772a7..039f5eac6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -25,7 +25,6 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index 1ad25d0a2..bfc6310be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -21,8 +21,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.*; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemHairyBall extends ItemBase{ public ItemHairyBall(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 38deace56..4ede0af8c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemFoodBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheJams; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; @@ -31,7 +30,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index 15e57af53..25b2b71a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -18,8 +18,6 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemKnife extends ItemBase{ public ItemKnife(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 372020353..944c0cf56 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -24,14 +24,12 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemLaserWrench extends ItemBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 182498435..52b133e2c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -30,7 +30,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index 74a9947e3..894623e61 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -20,7 +20,6 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import javax.annotation.Nonnull; import java.util.ArrayList; public class ItemMagnetRing extends ItemEnergy{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index c0af9f8cb..79b42963f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -23,7 +22,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemMisc extends ItemBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 31535f4f0..0a0ebc8b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -25,7 +25,6 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; @@ -33,7 +32,6 @@ import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemPhantomConnector extends ItemBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java index 5e0aebc53..79019a955 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPickaxeAA.java @@ -20,7 +20,6 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; import java.util.Set; public class ItemPickaxeAA extends ItemToolAA{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index bb9f1acfc..0ddee98c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.ThePotionRings; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; @@ -29,7 +28,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java index 244487342..93c367859 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java @@ -30,7 +30,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraftforge.fml.common.Optional; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java index 1be420914..08e8ccce1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemResonantRice.java @@ -19,8 +19,6 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemResonantRice extends ItemBase{ public ItemResonantRice(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index 8dbe59b21..eea8f417b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -26,7 +26,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import javax.annotation.Nonnull; import java.util.Set; public class ItemShovelAA extends ItemToolAA{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index f862c6a07..7b89a3df3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -20,8 +20,6 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemSolidifiedExperience extends ItemBase{ public static final int SOLID_XP_AMOUNT = 8; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index 4e11dcf13..d5016cd81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -32,7 +32,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class ItemSpawnerChanger extends ItemBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java index 1dc818b6f..58e806e7c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemTeleStaff.java @@ -27,8 +27,6 @@ import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemTeleStaff extends ItemEnergy{ public ItemTeleStaff(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index e4c6718f5..5ab516fac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -23,8 +23,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; -import javax.annotation.Nonnull; - public class ItemWaterRemovalRing extends ItemEnergy{ public ItemWaterRemovalRing(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index ebf855e1a..4c1325210 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -15,7 +15,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; import java.util.ArrayList; public class ItemWingsOfTheBats extends ItemBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 574a022a2..9cc783e69 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -13,13 +13,10 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnergizer; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemArmorAA extends ItemArmor{ private final ItemStack repairItem; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java index 9562bd5c8..136b0fceb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemBase.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index bf1a32e4b..3446a8fbc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items.base; import cofh.api.energy.ItemEnergyContainer; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -23,7 +22,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public abstract class ItemEnergy extends ItemEnergyContainer{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java index 0aa8e3034..38db32413 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodBase.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index debedac23..a3e5fa8b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -12,14 +12,11 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemHoeAA extends ItemHoe{ private final String name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index b3e902c82..2dbf31f82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; @@ -24,8 +23,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; -import javax.annotation.Nonnull; - public class ItemSeed extends ItemSeeds{ public final Block plant; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index 774c89e7d..f0b2c0b9c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -13,13 +13,10 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; -import javax.annotation.Nonnull; - public class ItemSwordAA extends ItemSword{ private final String name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index b55ee6227..032e3f14a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -13,13 +13,11 @@ package de.ellpeck.actuallyadditions.mod.items.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import net.minecraft.block.Block; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; import net.minecraftforge.oredict.OreDictionary; -import javax.annotation.Nonnull; import java.util.Set; public class ItemToolAA extends ItemTool{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java index 32b001858..4c06fb290 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/ItemLens.java @@ -16,8 +16,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ItemLens extends ItemBase implements ILensItem{ private final Lens type; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index f0f6accb5..9a30b8483 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -34,8 +34,6 @@ import mezz.jei.api.recipe.VanillaRecipeCategoryUid; import mezz.jei.api.recipe.transfer.IRecipeTransferRegistry; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - @JEIPlugin public class JEIActuallyAdditionsPlugin implements IModPlugin{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java index 5573aa920..3cb451863 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/RecipeWrapperWithButton.java @@ -19,8 +19,6 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; -import javax.annotation.Nonnull; - public abstract class RecipeWrapperWithButton{ protected final TexturedButton theButton; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index e23905a16..5959295e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -19,7 +19,6 @@ import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; -import javax.annotation.Nonnull; import java.util.Arrays; public class BookletRecipeCategory implements IRecipeCategory{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java index f2153130b..02707e27f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java @@ -15,8 +15,6 @@ import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; -import javax.annotation.Nonnull; - public class BookletRecipeHandler implements IRecipeHandler{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index 87f6897cb..d92771ba8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -21,7 +21,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fluids.FluidStack; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java index 8336b0e0c..107ca8404 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java @@ -20,8 +20,6 @@ import mezz.jei.api.recipe.IRecipeCategory; import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; -import javax.annotation.Nonnull; - public class CoffeeMachineRecipeCategory implements IRecipeCategory{ private final IDrawable background; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java index 6a94c9d04..564afd5b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java @@ -15,8 +15,6 @@ import de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; -import javax.annotation.Nonnull; - public class CoffeeMachineRecipeHandler implements IRecipeHandler{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java index 7f34bed5e..ea9550d59 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeWrapper.java @@ -25,7 +25,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java index 0705474c8..b94999ecd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeCategory.java @@ -20,7 +20,6 @@ import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; import java.util.List; public class CrusherRecipeCategory implements IRecipeCategory{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java index f5a6a385e..734017a1c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeHandler.java @@ -14,8 +14,6 @@ import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; -import javax.annotation.Nonnull; - public class CrusherRecipeHandler implements IRecipeHandler{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java index 1178cd431..da896422a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/crusher/CrusherRecipeWrapper.java @@ -21,7 +21,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java index 0f36a237a..39fb14c95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeCategory.java @@ -22,8 +22,6 @@ import mezz.jei.api.recipe.IRecipeWrapper; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; -import javax.annotation.Nonnull; - public class ReconstructorRecipeCategory implements IRecipeCategory{ private static final ItemStack RECONSTRUCTOR = new ItemStack(InitBlocks.blockAtomicReconstructor); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java index 7f586f6c3..7082944b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java @@ -15,8 +15,6 @@ import de.ellpeck.actuallyadditions.mod.nei.NEIReconstructorRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; -import javax.annotation.Nonnull; - public class ReconstructorRecipeHandler implements IRecipeHandler{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java index 738d10057..2da33022c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeWrapper.java @@ -20,7 +20,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java index d7acbfb76..3b7692ce5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -29,7 +29,7 @@ public class BannerHelper{ /** * (Excerpted from Additional Banners by Darkhax with permission, thanks!) - * + *

* Adds a new banner pattern to the game. This banner pattern will be applied by using the * provided item in a crafting recipe with the banner. * @@ -37,7 +37,7 @@ public class BannerHelper{ * also converted into upper case and used for the enum entry. Given how this * system works, it's critical that this value is unique, consider adding the * mod id to the name. - * //@param id A small string used to represent the pattern without taking up much space. An + * //@param id A small string used to represent the pattern without taking up much space. An * example of this is "bri". Given how the system works, it is critical that * this is a unique value. please consider adding the mod id to the pattern id. * @param craftingStack An ItemStack which is used in the crafting recipe for this pattern. diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 52a6a46a9..6c4213b74 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -11,16 +11,12 @@ package de.ellpeck.actuallyadditions.mod.misc; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.DamageSource; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; -import javax.annotation.Nonnull; - public class DamageSources extends DamageSource{ public static final DamageSource DAMAGE_ATOMIC_RECONSTRUCTOR = new DamageSources("atomicReconstructor", 5).setDamageBypassesArmor(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index 630c74608..761e9448d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -19,8 +19,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import javax.annotation.Nonnull; - public class DispenserHandlerFertilize extends BehaviorDefaultDispenseItem{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index d20e1ca67..10ef6f7f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -18,8 +18,6 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; -import javax.annotation.Nonnull; - public class WorldData extends WorldSavedData{ public static final String DATA_TAG = ModUtil.MOD_ID+"worlddata"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index 887e65bf3..b48ed9ea6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -20,7 +20,6 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.HashMap; -import java.util.Locale; import java.util.Map; import java.util.Properties; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java index 546c0e182..e95d53aa1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.network; -import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IEntrySet; import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index af0ede67d..b7417e4e8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -46,7 +46,6 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import javax.annotation.Nonnull; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; @@ -54,15 +53,14 @@ import java.util.*; public class ClientProxy implements IProxy{ + private static final List COLOR_PRODIVIDING_ITEMS_FOR_REGISTERING = new ArrayList(); + private static final Map MODEL_LOCATIONS_FOR_REGISTERING = new HashMap(); public static boolean pumpkinBlurPumpkinBlur; public static boolean jingleAllTheWay; public static boolean bulletForMyValentine; public static int bookletWordCount; public static int bookletCharCount; - private static final List COLOR_PRODIVIDING_ITEMS_FOR_REGISTERING = new ArrayList(); - private static final Map MODEL_LOCATIONS_FOR_REGISTERING = new HashMap(); - private static void countBookletWords(){ bookletWordCount = 0; bookletCharCount = 0; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java index c4a13eea5..b82ad41a0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/IProxy.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.proxy; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index 103f126d8..c838979da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.proxy; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 239297de9..9a6aec1dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -32,8 +32,6 @@ import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityAtomicReconstructor extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle, IEnergyDisplay, IAtomicReconstructor{ public static final int ENERGY_USE = 1000; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 992c47aa9..d099e6ca9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -26,12 +26,10 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; -import javax.annotation.Nonnull; - public abstract class TileEntityBase extends TileEntity implements ITickable{ - public boolean isRedstonePowered; public final String name; + public boolean isRedstonePowered; protected int ticksElapsed; public TileEntityBase(String name){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 852d08be7..4d7457cfd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -24,7 +24,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.event.ForgeEventFactory; -import javax.annotation.Nonnull; import java.util.List; public class TileEntityBreaker extends TileEntityInventoryBase implements IRedstoneToggle{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index c397cebad..8b344dc72 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -24,8 +24,6 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IFluidHandler, IEnergySaver, IFluidSaver{ public static final int PRODUCE = 80; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 83234e197..89feafc00 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -21,8 +21,6 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityCoalGenerator extends TileEntityInventoryBase implements IEnergyProvider, IEnergySaver{ public static final int PRODUCE = 30; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index f0c3010bb..b3c4ef906 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -29,8 +29,6 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidSaver, IFluidHandler, IEnergySaver{ public static final int SLOT_COFFEE_BEANS = 0; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index 2f0da7452..c8a4298e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -16,8 +16,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import javax.annotation.Nonnull; - public class TileEntityCompost extends TileEntityInventoryBase{ public int conversionTime; @@ -26,6 +24,17 @@ public class TileEntityCompost extends TileEntityInventoryBase{ super(1, "compost"); } + public static CompostRecipe getRecipeForInput(ItemStack input){ + if(input != null){ + for(CompostRecipe recipe : ActuallyAdditionsAPI.COMPOST_RECIPES){ + if(input.isItemEqual(recipe.input)){ + return recipe; + } + } + } + return null; + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); @@ -90,15 +99,4 @@ public class TileEntityCompost extends TileEntityInventoryBase{ public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return getRecipeForInput(stack) == null; } - - public static CompostRecipe getRecipeForInput(ItemStack input){ - if(input != null){ - for(CompostRecipe recipe : ActuallyAdditionsAPI.COMPOST_RECIPES){ - if(input.isItemEqual(recipe.input)){ - return recipe; - } - } - } - return null; - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 176cb9177..d076d5161 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -26,7 +26,6 @@ import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 9e18d5741..7d7758543 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -16,8 +16,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import javax.annotation.Nonnull; - public class TileEntityDropper extends TileEntityInventoryBase implements IRedstoneToggle{ private int currentTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index cd30443f6..be8b561ce 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -19,8 +19,6 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityEnergizer extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ public final EnergyStorage storage = new EnergyStorage(500000); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 8c1d4a5f8..57d40e4ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -20,8 +20,6 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityEnervator extends TileEntityInventoryBase implements IEnergyProvider, IEnergySaver{ public final EnergyStorage storage = new EnergyStorage(500000); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index 123a2a8b5..5b14bebf4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -20,7 +20,6 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class TileEntityFeeder extends TileEntityInventoryBase{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index 51504807c..3158917d6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -37,47 +37,6 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece super("fireworkBox"); } - @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - this.storage.writeToNBT(compound); - } - - @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.storage.readFromNBT(compound); - } - - @Override - public void updateEntity(){ - if(!this.worldObj.isRemote){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ - if(this.timeUntilNextFirework > 0){ - this.timeUntilNextFirework--; - if(this.timeUntilNextFirework <= 0){ - this.doWork(); - } - } - else{ - this.timeUntilNextFirework = 100; - } - } - - if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ - this.oldEnergy = this.storage.getEnergyStored(); - } - } - } - - private void doWork(){ - if(this.storage.getEnergyStored() >= USE_PER_SHOT){ - spawnFireworks(this.worldObj, this.pos.getX(), this.pos.getY(), this.pos.getZ()); - - this.storage.extractEnergy(USE_PER_SHOT, false); - } - } - public static void spawnFireworks(World world, double x, double y, double z){ int range = 4; int amount = Util.RANDOM.nextInt(5)+1; @@ -134,6 +93,47 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece return compound; } + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ + super.writeSyncableNBT(compound, sync); + this.storage.writeToNBT(compound); + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, boolean sync){ + super.readSyncableNBT(compound, sync); + this.storage.readFromNBT(compound); + } + + @Override + public void updateEntity(){ + if(!this.worldObj.isRemote){ + if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(this.timeUntilNextFirework > 0){ + this.timeUntilNextFirework--; + if(this.timeUntilNextFirework <= 0){ + this.doWork(); + } + } + else{ + this.timeUntilNextFirework = 100; + } + } + + if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ + this.oldEnergy = this.storage.getEnergyStored(); + } + } + } + + private void doWork(){ + if(this.storage.getEnergyStored() >= USE_PER_SHOT){ + spawnFireworks(this.worldObj, this.pos.getX(), this.pos.getY(), this.pos.getZ()); + + this.storage.extractEnergy(USE_PER_SHOT, false); + } + } + @Override public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ return this.storage.receiveEnergy(maxReceive, simulate); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index 89d1e7349..77454997f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -20,8 +20,6 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ public static final int SLOT_INPUT_1 = 0; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index 733922d66..dc259ff9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -14,8 +14,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; -import javax.annotation.Nonnull; - public class TileEntityGiantChest extends TileEntityInventoryBase{ public TileEntityGiantChest(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index f0c869be1..df6689683 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -25,7 +25,6 @@ import net.minecraft.util.SoundCategory; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.List; public class TileEntityGrinder extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 027f703f2..fcd91c5b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -22,8 +22,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import javax.annotation.Nonnull; - public class TileEntityInputter extends TileEntityInventoryBase implements IButtonReactor, INumberReactor{ public static final int PUT_FILTER_START = 13; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 99a8afc90..8e5a95920 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -18,18 +17,15 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.wrapper.SidedInvWrapper; -import javax.annotation.Nonnull; - public abstract class TileEntityInventoryBase extends TileEntityBase implements ISidedInventory{ - public ItemStack slots[]; private final SidedInvWrapper[] invWrappers = new SidedInvWrapper[6]; + public ItemStack slots[]; public TileEntityInventoryBase(int slots, String name){ super(name); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index 8a2cc4005..323d20fbf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -20,8 +20,6 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityItemRepairer extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ public static final int SLOT_INPUT = 0; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index dc8b26896..3bc7bedb0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -18,7 +18,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 924c88a00..bca485f01 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -13,7 +13,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; -import de.ellpeck.actuallyadditions.mod.util.*; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -21,8 +22,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public abstract class TileEntityLaserRelay extends TileEntityBase{ public static final int MAX_DISTANCE = 15; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 074994d1b..324c62a8d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -12,17 +12,14 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.items.IItemHandler; -import javax.annotation.Nonnull; import java.util.List; public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index db51b3faf..f5d3614aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -34,7 +34,6 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; -import javax.annotation.Nonnull; import java.util.List; public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyReceiver, IButtonReactor, IEnergySaver, IEnergyDisplay{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index bfc25ab8a..2760acf80 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -18,8 +18,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; -import javax.annotation.Nonnull; - public class TileEntityPhantomItemface extends TileEntityPhantomface{ public TileEntityPhantomItemface(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 25a796790..19616d45d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -27,7 +27,6 @@ import net.minecraft.util.math.Vec3d; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; import java.util.ArrayList; public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements IPhantomTile, IRedstoneToggle{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 039248b12..3192446ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -26,8 +26,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - public class TileEntityPhantomface extends TileEntityInventoryBase implements IPhantomTile{ public static final int RANGE = 16; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index ab71037c1..7fe3f936b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -19,7 +19,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; -import javax.annotation.Nonnull; import java.util.ArrayList; public class TileEntityRangedCollector extends TileEntityInventoryBase implements IButtonReactor{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 56131a83a..864b2863d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -19,13 +19,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import javax.annotation.Nonnull; - public class TileEntityXPSolidifier extends TileEntityInventoryBase implements IButtonReactor{ + private final int[] buttonAmounts = new int[]{1, 5, 10, 20, 30, 40, 50, 64, -999}; public short amount; private short lastAmount; - private final int[] buttonAmounts = new int[]{1, 5, 10, 20, 30, 40, 50, 64, -999}; public TileEntityXPSolidifier(){ super(1, "xpSolidifier"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java index 8e0041fc5..1112b9373 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FluidStateMapper.java @@ -20,8 +20,6 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import javax.annotation.Nonnull; - /** * (Excerpted from Tinkers' Construct with permission, thanks guys!) */ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java index f8c42d172..a7fc537d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java @@ -20,10 +20,8 @@ public class ModUtil{ public static final String MOD_ID = ActuallyAdditionsAPI.MOD_ID; public static final String NAME = "Actually Additions"; - + public static final Logger LOGGER = LogManager.getLogger(NAME); private static final String PROXY_BASE = "de.ellpeck.actuallyadditions.mod.proxy."; public static final String PROXY_CLIENT = PROXY_BASE+"ClientProxy"; public static final String PROXY_SERVER = PROXY_BASE+"ServerProxy"; - - public static final Logger LOGGER = LogManager.getLogger(NAME); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java index a21aed15d..73ab775b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java @@ -10,10 +10,10 @@ package de.ellpeck.actuallyadditions.mod.util.playerdata; -import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompressedStreamTools; From 6f54b287d27b47b01ce1c373e3fb8fa77df27fd2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 1 Jun 2016 00:44:37 +0200 Subject: [PATCH 201/322] r36! --- build.gradle | 2 +- update/changelog.md | 8 ++++++++ update/updateVersions.properties | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index dad62d983..77a76530f 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' //I'm doing this because people made me do it. Even though it never worked properly when I tried it. Sigh. apply plugin: 'idea' -version = "1.9.4-r35" +version = "1.9.4-r36" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index e15e20596..f87d188fd 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,11 @@ +# 1.9.4-r36 +* Added a config option to print all of the booklet's text into a file on startup +* Made booklet words and characters not be more than they should be because everything was being done twice +* Added view online button to booklet +* Fixed a bug with some other mods causing NullPointerExceptions in ActAdd TileEntities +* Fixed ArmorMaterial (sokratis12GR) +* Removed ModelResourceLocation on server making servers not crash on startup anymore. + # 1.9.4-r35 * Added lush caves that spawn randomly in the overworld. Turn them off or change their spawn rate in the config if you don't like them. * Changed some world data mechanics. Might break some Laser Relay Networks. Sorry about that, just reconnect them. diff --git a/update/updateVersions.properties b/update/updateVersions.properties index dd497df40..4de9b3222 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=35 \ No newline at end of file +1.9.4=36 \ No newline at end of file From 08f141939f1c3f1f8245e1168d0898a9c6a680ab Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 1 Jun 2016 15:03:20 +0200 Subject: [PATCH 202/322] Fixed rendering bug with Greenhouse Glass --- .../mod/blocks/BlockGreenhouseGlass.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index 0831d9a51..eba6ee25b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -16,6 +16,7 @@ import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -46,9 +47,11 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ @SuppressWarnings("deprecation") @Override @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockState state, IBlockAccess worldIn, BlockPos pos, EnumFacing side){ - Block block = state.getBlock(); - return worldIn.getBlockState(pos.offset(side.getOpposite())) != state || block != this && block != this && super.shouldSideBeRendered(state, worldIn, pos, side); + public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ + IBlockState otherState = world.getBlockState(pos.offset(side)); + Block block = otherState.getBlock(); + + return state != otherState || block != this && super.shouldSideBeRendered(state, world, pos, side); } @@ -58,7 +61,6 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ return false; } - @Override @SideOnly(Side.CLIENT) public BlockRenderLayer getBlockLayer(){ @@ -70,7 +72,6 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ return EnumRarity.EPIC; } - @Override public TileEntity createNewTileEntity(World world, int par2){ return new TileEntityGreenhouseGlass(); From a4c751b47fe94f16e7f61e03104f3461bacf18b5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 1 Jun 2016 15:22:30 +0200 Subject: [PATCH 203/322] Removed unfinished-tags in booklet and also made buttons client-side only --- .../actuallyadditions/mod/booklet/BookletUtils.java | 3 --- .../actuallyadditions/mod/booklet/InitBooklet.java | 4 ++-- .../mod/booklet/button/BookmarkButton.java | 3 +++ .../mod/booklet/button/IndexButton.java | 9 +++------ .../mod/booklet/button/TexturedButton.java | 3 +++ .../mod/booklet/chapter/BookletChapter.java | 6 ------ .../actuallyadditions/mod/inventory/gui/GuiInputter.java | 2 ++ 7 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 00a8d8af2..ac2ff24be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -199,9 +199,6 @@ public class BookletUtils{ else if(button instanceof TexturedButton){ booklet.drawHoveringText(((TexturedButton)button).textList, mouseX, mouseY); } - else if(button instanceof IndexButton){ - ((IndexButton)button).drawHover(mouseX, mouseY); - } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 80665ee9a..0c51820c4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -98,7 +98,7 @@ public class InitBooklet{ new BookletChapter("phantomRedstoneface", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomRedstoneface), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipePhantomRedstoneface).setNoText()); new BookletChapter("phantomBreaker", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomBreaker), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomPlacer.RANGE), new PageCrafting(2, BlockCrafting.recipePhantomPlacer).setNoText(), new PageCrafting(3, BlockCrafting.recipePhantomBreaker).setNoText()); new BookletChapter("esd", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockInputterAdvanced), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeESD).setNoText(), new PageCrafting(3, BlockCrafting.recipeAdvancedESD).setNoText()).setSpecial(); - new BookletChapter("xpSolidifier", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockXPSolidifier), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemSolidifiedExperience)), new PageCrafting(2, BlockCrafting.recipeSolidifier).setNoText()).setSpecial().setIncomplete(); + new BookletChapter("xpSolidifier", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockXPSolidifier), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemSolidifiedExperience)), new PageCrafting(2, BlockCrafting.recipeSolidifier).setNoText()).setSpecial(); new BookletChapter("greenhouseGlass", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGreenhouseGlass), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeGlass)); new BookletChapter("fishingNet", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFishingNet), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFisher).setNoText()); new BookletChapter("feeder", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFeeder), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFeeder).setNoText()); @@ -135,7 +135,7 @@ public class InitBooklet{ } new BookletChapter("aiots", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.emeraldPaxel), aiotPages.toArray(new BookletPage[aiotPages.size()])).setImportant(); - new BookletChapter("jams", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemJams), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemJams, 1, Util.WILDCARD)), new PagePicture(2, "pageJamHouse", 150), new PageTextOnly(3)).setIncomplete(); + new BookletChapter("jams", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemJams), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemJams, 1, Util.WILDCARD)), new PagePicture(2, "pageJamHouse", 150), new PageTextOnly(3)); ArrayList potionRingPages = new ArrayList(); potionRingPages.add(new PageTextOnly(potionRingPages.size()+1)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 78c4d5e97..da0891eb5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -21,9 +21,12 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; +@SideOnly(Side.CLIENT) public class BookmarkButton extends GuiButton{ private final GuiBooklet booklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 355f90d3b..913d47502 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -20,7 +20,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +@SideOnly(Side.CLIENT) public class IndexButton extends GuiButton{ private final GuiBooklet gui; @@ -60,10 +63,4 @@ public class IndexButton extends GuiButton{ this.gui.getFontRenderer().drawString(this.displayString, this.xPosition+textOffsetX, this.yPosition+(this.height-8)/2, 0); } } - - public void drawHover(int mouseX, int mouseY){ - if(this.chap instanceof BookletChapter && ((BookletChapter)this.chap).isIncomplete){ - this.gui.drawHoveringText(this.gui.getFontRenderer().listFormattedStringToWidth(TextFormatting.RED+StringUtil.localize("booklet."+ModUtil.MOD_ID+".unavailable"), 250), mouseX, mouseY); - } - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index 4a57984d3..85ec24e59 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -14,10 +14,13 @@ import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.List; +@SideOnly(Side.CLIENT) public class TexturedButton extends GuiButton{ public final List textList = new ArrayList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index eabe46a6a..a784e0745 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -27,8 +27,6 @@ public class BookletChapter implements IBookletChapter{ private final String unlocalizedName; public TextFormatting color; - public boolean isIncomplete; - public BookletChapter(String unlocalizedName, IBookletEntry entry, ItemStack displayStack, BookletPage... pages){ this.pages = pages.clone(); @@ -75,10 +73,6 @@ public class BookletChapter implements IBookletChapter{ return this.displayStack; } - public void setIncomplete(){ - this.isIncomplete = true; - } - public void setImportant(){ this.color = TextFormatting.DARK_GREEN; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index e7cff237f..5f6d2fc92 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -269,6 +269,7 @@ public class GuiInputter extends GuiContainer{ } } + @SideOnly(Side.CLIENT) public static class SmallerButton extends GuiButton{ public final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiInputter"); @@ -306,6 +307,7 @@ public class GuiInputter extends GuiContainer{ } } + @SideOnly(Side.CLIENT) public static class TinyButton extends GuiButton{ public final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiInputter"); From c53ea724045be3315f84b004effeb9ee8e41f9ef Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 2 Jun 2016 19:28:51 +0200 Subject: [PATCH 204/322] Added water bowl --- .../mod/creative/CreativeTab.java | 1 + .../mod/event/EntityLivingEvents.java | 42 ++++++++ .../mod/items/InitItems.java | 3 + .../mod/items/ItemWaterBowl.java | 101 ++++++++++++++++++ .../actuallyadditions/mod/util/WorldUtil.java | 6 +- .../assets/actuallyadditions/lang/en_US.lang | 1 + .../models/item/itemWaterBowl.json | 6 ++ .../textures/items/itemWaterBowl.png | Bin 0 -> 300 bytes 8 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemWaterBowl.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemWaterBowl.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index e887eaa15..c0437ddf0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -139,6 +139,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemCrateKeeper); this.add(InitItems.itemChestToCrateUpgrade); this.add(InitItems.itemSpawnerChanger); + this.add(InitItems.itemWaterBowl); this.add(InitItems.itemDrill); this.add(InitItems.itemDrillUpgradeSpeed); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index 09a4a739c..693ad7436 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -16,7 +16,11 @@ import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.misc.WorldData; import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; +import net.minecraft.block.BlockLiquid; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -25,12 +29,18 @@ import net.minecraft.entity.passive.EntityBat; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ActionResult; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.UUID; @@ -81,6 +91,38 @@ public class EntityLivingEvents{ } } + @SubscribeEvent + public void onPlayerInteractEvent(PlayerInteractEvent event){ + if(event.getWorld() != null){ + if(event.getItemStack() != null && event.getItemStack().getItem() == Items.BOWL){ + RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(event.getWorld(), event.getEntityPlayer(), true, false, false); + ActionResult result = ForgeEventFactory.onBucketUse(event.getEntityPlayer(), event.getWorld(), event.getItemStack(), trace); + if(result == null && trace != null && trace.getBlockPos() != null){ + if(event.getEntityPlayer().canPlayerEdit(trace.getBlockPos().offset(trace.sideHit), trace.sideHit, event.getItemStack())){ + IBlockState state = event.getWorld().getBlockState(trace.getBlockPos()); + Material material = state.getMaterial(); + + if(material == Material.WATER && state.getValue(BlockLiquid.LEVEL) == 0){ + event.getEntityPlayer().playSound(SoundEvents.ITEM_BUCKET_FILL, 1.0F, 1.0F); + + if(!event.getWorld().isRemote){ + event.getWorld().setBlockState(trace.getBlockPos(), Blocks.AIR.getDefaultState(), 11); + event.getItemStack().stackSize--; + + ItemStack bowl = new ItemStack(InitItems.itemWaterBowl); + if(!event.getEntityPlayer().inventory.addItemStackToInventory(bowl.copy())){ + EntityItem entityItem = new EntityItem(event.getWorld(), event.getEntityPlayer().posX, event.getEntityPlayer().posY, event.getEntityPlayer().posZ, bowl.copy()); + entityItem.setPickupDelay(0); + event.getWorld().spawnEntityInWorld(entityItem); + } + } + } + } + } + } + } + } + @SubscribeEvent public void onEntityDropEvent(LivingDropsEvent event){ if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index d1f8ab34b..29ee5d294 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -207,11 +207,14 @@ public class InitItems{ public static Item itemBootsCrystalWhite; public static Item itemPaxelCrystalWhite; + public static Item itemWaterBowl; + public static Item itemRarmorModuleReconstructor; public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemWaterBowl = new ItemWaterBowl("itemWaterBowl"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); itemCrateKeeper = new ItemGeneric("itemCrateKeeper"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java new file mode 100644 index 000000000..731f2f201 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java @@ -0,0 +1,101 @@ +/* + * This file ("ItemWaterBowl.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; +import net.minecraftforge.event.ForgeEventFactory; + +public class ItemWaterBowl extends ItemBase{ + + public ItemWaterBowl(String name){ + super(name); + this.setMaxStackSize(1); + } + + @Override + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(world, player); + ActionResult result = ForgeEventFactory.onBucketUse(player, world, stack, trace); + if(result != null){ + return result; + } + + if(trace == null){ + return new ActionResult(EnumActionResult.PASS, stack); + } + else if(trace.typeOfHit != RayTraceResult.Type.BLOCK){ + return new ActionResult(EnumActionResult.PASS, stack); + } + else{ + BlockPos pos = trace.getBlockPos(); + + if(!world.isBlockModifiable(player, pos)){ + return new ActionResult(EnumActionResult.FAIL, stack); + } + else{ + BlockPos pos1 = PosUtil.getBlock(pos, world).isReplaceable(world, pos) && trace.sideHit == EnumFacing.UP ? pos : pos.offset(trace.sideHit); + + if(!player.canPlayerEdit(pos1, trace.sideHit, stack)){ + return new ActionResult(EnumActionResult.FAIL, stack); + } + else if(this.tryPlaceContainedLiquid(player, world, pos1)){ + return !player.capabilities.isCreativeMode ? new ActionResult(EnumActionResult.SUCCESS, new ItemStack(Items.BOWL)) : new ActionResult(EnumActionResult.SUCCESS, stack); + } + else{ + return new ActionResult(EnumActionResult.FAIL, stack); + } + } + } + } + + public boolean tryPlaceContainedLiquid(EntityPlayer player, World world, BlockPos pos){ + IBlockState state = world.getBlockState(pos); + Material material = state.getMaterial(); + boolean nonSolid = !material.isSolid(); + boolean replaceable = state.getBlock().isReplaceable(world, pos); + + if(!world.isAirBlock(pos) && !nonSolid && !replaceable){ + return false; + } + else{ + if(world.provider.doesWaterVaporize()){ + world.playSound(player, pos, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F+(world.rand.nextFloat()-world.rand.nextFloat())*0.8F); + + for(int k = 0; k < 8; k++){ + world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, (double)pos.getX()+Math.random(), (double)pos.getY()+Math.random(), (double)pos.getZ()+Math.random(), 0.0D, 0.0D, 0.0D); + } + } + else{ + if(!world.isRemote && (nonSolid || replaceable) && !material.isLiquid()){ + world.destroyBlock(pos, true); + } + + world.playSound(player, pos, SoundEvents.ITEM_BUCKET_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F); + world.setBlockState(pos, Blocks.FLOWING_WATER.getDefaultState(), 3); + } + + return true; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 9d6d8827c..eac6d6834 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -295,7 +295,11 @@ public class WorldUtil{ } public static RayTraceResult getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player){ - return getMovingObjectPosWithReachDistance(world, player, player instanceof EntityPlayerMP ? ((EntityPlayerMP)player).interactionManager.getBlockReachDistance() : 5.0D, false, true, false); + return getNearestBlockWithDefaultReachDistance(world, player, false, true, false); + } + + public static RayTraceResult getNearestBlockWithDefaultReachDistance(World world, EntityPlayer player, boolean stopOnLiquids, boolean ignoreBlockWithoutBoundingBox, boolean returnLastUncollidableBlock){ + return getMovingObjectPosWithReachDistance(world, player, player instanceof EntityPlayerMP ? ((EntityPlayerMP)player).interactionManager.getBlockReachDistance() : 5.0D, stopOnLiquids, ignoreBlockWithoutBoundingBox, returnLastUncollidableBlock); } /** diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 6b5fe4d3c..9544da20e 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -487,6 +487,7 @@ item.actuallyadditions.itemMiscEnderStar.name=Ender Star item.actuallyadditions.itemSpawnerChanger.name=Spawner Changer item.actuallyadditions.itemMiscSpawnerShard.name=Spawner Shards item.actuallyadditions.itemMinecartFireworkBox.name=Firework Box Cart +item.actuallyadditions.itemWaterBowl.name=Bowl of Water #Tooltips tooltip.actuallyadditions.onSuffix.desc=On diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemWaterBowl.json b/src/main/resources/assets/actuallyadditions/models/item/itemWaterBowl.json new file mode 100644 index 000000000..f4cb0246d --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemWaterBowl.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemWaterBowl" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemWaterBowl.png b/src/main/resources/assets/actuallyadditions/textures/items/itemWaterBowl.png new file mode 100644 index 0000000000000000000000000000000000000000..3df0edd4f3262c534dde4566b173ffe08248a713 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ`d{ti_J9qcx0p95D)0nxUu|Pha1^-KyNAb&;jX|0Mg^W=c97UXr}{br zwv88g89EQ{X}HQD;9$nm(yVLw@P^h`JBi0vc$gJf72d>sVLQywG;1Q`83hS8NrtIX n3LpOeuQyPWPB3q1WMrsVGHoi8|C;4MhcbA&`njxgN@xNAoYiH3 literal 0 HcmV?d00001 From e46851e7899515a22609d72830e93978e7e4b4ac Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 2 Jun 2016 20:07:36 +0200 Subject: [PATCH 205/322] Water bowl doc and config --- .../mod/booklet/InitBooklet.java | 1 + .../mod/config/values/ConfigBoolValues.java | 4 ++- .../mod/event/EntityLivingEvents.java | 36 ++++++++++--------- .../assets/actuallyadditions/lang/en_US.lang | 5 ++- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 0c51820c4..ffc0cd70b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -89,6 +89,7 @@ public class InitBooklet{ new BookletChapter("lushCaves", ActuallyAdditionsAPI.entryMisc, new ItemStack(Blocks.STONE), new PageTextOnly(1), new PagePicture(2, "pageLushCaves", 0).setNoText()); new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStack(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye)); + new BookletChapter("waterBowl", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemWaterBowl), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemWaterBowl))); //No RF Using Blocks new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeItemInterface).setNoText()).setImportant(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 926dddedc..886612496 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -49,7 +49,9 @@ public enum ConfigBoolValues{ DUNGEON_LOOT("Dungeon Loot", ConfigCategories.OTHER, true, "Should Actually Additions Loot spawn in Dungeons"), GEN_LUSH_CAVES("Generate Lush Caves", ConfigCategories.WORLD_GEN, true, "Should caves with trees and grass randomly generate underground"), - BOOKLET_TEXT_TO_FILE("Booklet Text to File", ConfigCategories.OTHER, false, "Should the entire text of the booklet be put into a new file in the Minecraft Folder on startup or resource reload. This is for debug purposes only and shouldn't really ever be needed."); + BOOKLET_TEXT_TO_FILE("Booklet Text to File", ConfigCategories.OTHER, false, "Should the entire text of the booklet be put into a new file in the Minecraft Folder on startup or resource reload. This is for debug purposes only and shouldn't really ever be needed."), + + WATER_BOWL("Water Bowl", ConfigCategories.OTHER, true, "If right-clicking a bowl on water should create a water bowl"); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index 693ad7436..ee1ab2bc4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -94,26 +94,28 @@ public class EntityLivingEvents{ @SubscribeEvent public void onPlayerInteractEvent(PlayerInteractEvent event){ if(event.getWorld() != null){ - if(event.getItemStack() != null && event.getItemStack().getItem() == Items.BOWL){ - RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(event.getWorld(), event.getEntityPlayer(), true, false, false); - ActionResult result = ForgeEventFactory.onBucketUse(event.getEntityPlayer(), event.getWorld(), event.getItemStack(), trace); - if(result == null && trace != null && trace.getBlockPos() != null){ - if(event.getEntityPlayer().canPlayerEdit(trace.getBlockPos().offset(trace.sideHit), trace.sideHit, event.getItemStack())){ - IBlockState state = event.getWorld().getBlockState(trace.getBlockPos()); - Material material = state.getMaterial(); + if(ConfigBoolValues.WATER_BOWL.isEnabled()){ + if(event.getItemStack() != null && event.getItemStack().getItem() == Items.BOWL){ + RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(event.getWorld(), event.getEntityPlayer(), true, false, false); + ActionResult result = ForgeEventFactory.onBucketUse(event.getEntityPlayer(), event.getWorld(), event.getItemStack(), trace); + if(result == null && trace != null && trace.getBlockPos() != null){ + if(event.getEntityPlayer().canPlayerEdit(trace.getBlockPos().offset(trace.sideHit), trace.sideHit, event.getItemStack())){ + IBlockState state = event.getWorld().getBlockState(trace.getBlockPos()); + Material material = state.getMaterial(); - if(material == Material.WATER && state.getValue(BlockLiquid.LEVEL) == 0){ - event.getEntityPlayer().playSound(SoundEvents.ITEM_BUCKET_FILL, 1.0F, 1.0F); + if(material == Material.WATER && state.getValue(BlockLiquid.LEVEL) == 0){ + event.getEntityPlayer().playSound(SoundEvents.ITEM_BUCKET_FILL, 1.0F, 1.0F); - if(!event.getWorld().isRemote){ - event.getWorld().setBlockState(trace.getBlockPos(), Blocks.AIR.getDefaultState(), 11); - event.getItemStack().stackSize--; + if(!event.getWorld().isRemote){ + event.getWorld().setBlockState(trace.getBlockPos(), Blocks.AIR.getDefaultState(), 11); + event.getItemStack().stackSize--; - ItemStack bowl = new ItemStack(InitItems.itemWaterBowl); - if(!event.getEntityPlayer().inventory.addItemStackToInventory(bowl.copy())){ - EntityItem entityItem = new EntityItem(event.getWorld(), event.getEntityPlayer().posX, event.getEntityPlayer().posY, event.getEntityPlayer().posZ, bowl.copy()); - entityItem.setPickupDelay(0); - event.getWorld().spawnEntityInWorld(entityItem); + ItemStack bowl = new ItemStack(InitItems.itemWaterBowl); + if(!event.getEntityPlayer().inventory.addItemStackToInventory(bowl.copy())){ + EntityItem entityItem = new EntityItem(event.getWorld(), event.getEntityPlayer().posX, event.getEntityPlayer().posY, event.getEntityPlayer().posZ, bowl.copy()); + entityItem.setPickupDelay(0); + event.getWorld().spawnEntityInWorld(entityItem); + } } } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 9544da20e..f52aea55b 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -882,4 +882,7 @@ booklet.actuallyadditions.chapter.lushCaves.text.1=If you have ever done any Manual Stand is a block that is supposed to mainly be used on Servers. You can, provided you are the person who placed it down, set a page in the GUI that will open when someone else accesses it by pressing the "Set Page"-button while being on the desired page. The Wall-Mount Manual does not save pages another player navigated to, meaing re-accessing the Manual will cause it to always end up on the page speficied by the placer. -booklet.actuallyadditions.chapter.bookStand.text.2=People were using this not to have to have a manual item on their hotbar. This is not supposed to be used for that, because the Actually Additions Manual has bookmarks and also keeps the page you were on before. This, however, does neither. This was also originally made for Better Than Minecon. But whatever. \ No newline at end of file +booklet.actuallyadditions.chapter.bookStand.text.2=People were using this not to have to have a manual item on their hotbar. This is not supposed to be used for that, because the Actually Additions Manual has bookmarks and also keeps the page you were on before. This, however, does neither. This was also originally made for Better Than Minecon. But whatever. + +booklet.actuallyadditions.chapter.waterBowl.name=Bowl of Water +booklet.actuallyadditions.chapter.waterBowl.text.1=The Bowl of Water can be obtained by right-cliking a bowl on water anywhere in the world. When the Bowl of Water is then right-clicked onto a block, the water will be placed, much like a Bucket. This can be used, for example, for early game farms. \ No newline at end of file From eeb7592d22b1919bbf5a3c0b03a483b45a769576 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 21:05:49 +0200 Subject: [PATCH 206/322] Fixed block breaking effects playing as just the sound Closes #105 --- .../actuallyadditions/mod/items/ItemChestToCrateUpgrade.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java | 2 +- .../de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java | 2 +- .../actuallyadditions/mod/misc/DispenserHandlerFertilize.java | 2 +- .../de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java | 2 +- .../ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java | 2 +- .../mod/tile/TileEntityDirectionalBreaker.java | 2 +- .../actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java | 2 +- .../actuallyadditions/mod/tile/TileEntityLeafGenerator.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java | 2 +- .../actuallyadditions/mod/tile/TileEntityPhantomPlacer.java | 2 +- .../java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index 2752907ca..eed474ffb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -56,7 +56,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ //Set New Block if(!ConfigValues.lessBlockBreakingEffects){ - world.playBroadcastSound(2001, pos, Block.getStateId(world.getBlockState(pos))); + world.playEvent(2001, pos, Block.getStateId(world.getBlockState(pos))); } PosUtil.setBlock(pos, world, InitBlocks.blockGiantChest, 0, 2); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java index bf4335740..f95a4ff15 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFertilizer.java @@ -36,7 +36,7 @@ public class ItemFertilizer extends ItemBase{ public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float par8, float par9, float par10){ if(ItemDye.applyBonemeal(stack, world, pos, player)){ if(!world.isRemote){ - world.playBroadcastSound(2005, pos, 0); + world.playEvent(2005, pos, 0); } return EnumActionResult.SUCCESS; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index 039f5eac6..58f4c0559 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -76,7 +76,7 @@ public class ItemGrowthRing extends ItemEnergy{ //Show Particles if Metadata changed if(PosUtil.getMetadata(pos, world) != metaBefore){ - world.playBroadcastSound(2005, pos, 0); + world.playEvent(2005, pos, 0); } if(!player.capabilities.isCreativeMode){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 52b133e2c..e568200e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -120,7 +120,7 @@ public class ItemLeafBlower extends ItemBase{ //Plays the Breaking Sound if(!ConfigValues.lessBlockBreakingEffects){ - world.playBroadcastSound(2001, theCoord, Block.getStateId(world.getBlockState(theCoord))); + world.playEvent(2001, theCoord, Block.getStateId(world.getBlockState(theCoord))); } //Deletes the Block diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index 761e9448d..80e18b975 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -31,7 +31,7 @@ public class DispenserHandlerFertilize extends BehaviorDefaultDispenseItem{ BlockPos pos = new BlockPos(x, y, z); if(ItemDye.applyBonemeal(stack, source.getWorld(), pos)){ - source.getWorld().playBroadcastSound(2005, pos, 0); + source.getWorld().playEvent(2005, pos, 0); } return stack; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index 62e6e313c..95541b9a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -136,7 +136,7 @@ public class MethodHandler implements IMethodHandler{ ItemStack output = outputs.get(0); if(output.getItem() instanceof ItemBlock){ if(!ConfigValues.lessBlockBreakingEffects){ - tile.getWorldObject().playBroadcastSound(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); + tile.getWorldObject().playEvent(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); } PosUtil.setBlock(pos, tile.getWorldObject(), Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 4d7457cfd..fc4e0772c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -91,7 +91,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playBroadcastSound(2001, coordsBlock, Block.getStateId(stateToBreak)); + this.worldObj.playEvent(2001, coordsBlock, Block.getStateId(stateToBreak)); } WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); WorldUtil.addToInventory(this, drops, true, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index d076d5161..c14a6c566 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -93,7 +93,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playBroadcastSound(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); + this.worldObj.playEvent(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); } WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); WorldUtil.addToInventory(this, drops, true, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index 4a9b1ceb0..baa7033e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -54,7 +54,7 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ PosUtil.getBlock(blockToFert, this.worldObj).updateTick(this.worldObj, blockToFert, this.worldObj.getBlockState(blockToFert), Util.RANDOM); if(PosUtil.getMetadata(blockToFert, this.worldObj) != metaBefore){ - this.worldObj.playBroadcastSound(2005, blockToFert, 0); + this.worldObj.playEvent(2005, blockToFert, 0); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index dca150d10..19cf37714 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -83,7 +83,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr BlockPos theCoord = breakPositions.get(0); if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playBroadcastSound(2001, theCoord, Block.getStateId(this.worldObj.getBlockState(theCoord))); + this.worldObj.playEvent(2001, theCoord, Block.getStateId(this.worldObj.getBlockState(theCoord))); } this.worldObj.setBlockToAir(theCoord); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index f5d3614aa..8488fd6a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -108,7 +108,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playBroadcastSound(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); + this.worldObj.playEvent(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); } this.worldObj.setBlockToAir(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 19616d45d..aa6d36204 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -131,7 +131,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements if(WorldUtil.addToInventory(this, drops, false, true)){ if(!ConfigValues.lessBlockBreakingEffects){ - this.worldObj.playBroadcastSound(2001, this.boundPosition, Block.getStateId(this.worldObj.getBlockState(this.boundPosition))); + this.worldObj.playEvent(2001, this.boundPosition, Block.getStateId(this.worldObj.getBlockState(this.boundPosition))); } this.worldObj.setBlockToAir(this.boundPosition); WorldUtil.addToInventory(this, drops, true, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index eac6d6834..2ac1f16bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -333,7 +333,7 @@ public class WorldUtil{ } else{ //Shows the Harvest Particles and plays the Block's Sound - world.playBroadcastSound(2001, pos, Block.getStateId(state)); + world.playEvent(2001, pos, Block.getStateId(state)); } //If the Block was actually "removed", meaning it will drop an Item From dbf5a86560392292d0b2af06caf57c7f09f6215a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 21:07:58 +0200 Subject: [PATCH 207/322] Fixed aiots not having four times the durability of their base tools Closes #104 --- .../de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index bdabdc954..b89724f4c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -44,11 +44,15 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ public ItemAllToolAA(ToolMaterial toolMat, String repairItem, String unlocalizedName, EnumRarity rarity, int color){ super(4.0F, -2F, toolMat, repairItem, unlocalizedName, rarity, new HashSet()); this.color = color; + + this.setMaxDamage(this.getMaxDamage()*4); } public ItemAllToolAA(ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity, int color){ super(4.0F, -2F, toolMat, repairItem, unlocalizedName, rarity, new HashSet()); this.color = color; + + this.setMaxDamage(this.getMaxDamage()*4); } @Override From 7749e9f67dfbb90a3a701267895d4b4e74b04ede Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 22:16:23 +0200 Subject: [PATCH 208/322] Made compost only accept the current recipe's amount of items --- .../actuallyadditions/mod/tile/TileEntityCompost.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index c8a4298e1..c97aae9e3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -90,6 +90,17 @@ public class TileEntityCompost extends TileEntityInventoryBase{ this.sendUpdate(); } + @Override + public int getInventoryStackLimit(){ + if(this.slots[0] != null){ + CompostRecipe recipe = getRecipeForInput(this.slots[0]); + if(recipe != null && recipe.input != null){ + return recipe.input.stackSize; + } + } + return super.getInventoryStackLimit(); + } + @Override public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ return this.isItemValidForSlot(slot, stack); From 596d2d01758f611dacda3eb4f3bae99c9ba054ad Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 22:35:01 +0200 Subject: [PATCH 209/322] Made shovels make path blocks instead of farm land --- .../de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java index eea8f417b..cfaa63932 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemShovelAA.java @@ -49,6 +49,6 @@ public class ItemShovelAA extends ItemToolAA{ @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ - return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); + return Items.IRON_SHOVEL.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); } } From bec72524053fe7b9d232cac26c0eaa6ef0844d7d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 23:27:37 +0200 Subject: [PATCH 210/322] Changed world data save system in hope that laser relays will disconnect less often --- .../mod/ActuallyAdditions.java | 5 -- .../mod/event/EntityLivingEvents.java | 2 +- .../mod/event/PlayerObtainEvents.java | 2 +- .../mod/event/WorldLoadingEvents.java | 14 ++--- .../mod/items/ItemLaserWrench.java | 3 ++ .../mod/misc/LaserRelayConnectionHandler.java | 3 -- .../actuallyadditions/mod/misc/WorldData.java | 52 +++++-------------- .../mod/tile/TileEntityLaserRelay.java | 2 + 8 files changed, 28 insertions(+), 55 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 6902745dd..6d6f393a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -127,11 +127,6 @@ public class ActuallyAdditions{ FakePlayerUtil.info(); } - @EventHandler - public void serverStarting(FMLServerStartingEvent event){ - WorldData.init(event.getServer()); - } - @EventHandler public void missingMapping(FMLMissingMappingsEvent event){ for(FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index ee1ab2bc4..db81ba522 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -87,7 +87,7 @@ public class EntityLivingEvents{ data.setTag("Deaths", deaths); //player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); - WorldData.makeDirty(); + WorldData.get(((EntityPlayer)event.getEntityLiving()).worldObj).markDirty(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index f6fc2871f..6bdc36f6f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -52,7 +52,7 @@ public class PlayerObtainEvents{ NBTTagCompound compound = PlayerServerData.getDataFromPlayer(event.player); if(compound != null && !compound.getBoolean("BookGottenAlready")){ compound.setBoolean("BookGottenAlready", true); - WorldData.makeDirty(); + WorldData.get(event.player.worldObj).markDirty(); EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet)); entityItem.setPickupDelay(0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 472f3fe10..1d6ad85ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -19,17 +19,17 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onLoad(WorldEvent.Load event){ - WorldData.makeDirty(); + if(!event.getWorld().isRemote){ + WorldData.get(event.getWorld()); + } } @SubscribeEvent public void onUnload(WorldEvent.Unload event){ - WorldData.makeDirty(); - FakePlayerUtil.unloadFakePlayer(); + if(!event.getWorld().isRemote){ + WorldData.get(event.getWorld()).markDirty(); + FakePlayerUtil.unloadFakePlayer(); + } } - @SubscribeEvent - public void onSave(WorldEvent.Save event){ - WorldData.makeDirty(); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 944c0cf56..5deee458f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.misc.WorldData; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; @@ -59,6 +60,8 @@ public class ItemLaserWrench extends ItemBase{ ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); + WorldData.get(world).markDirty(); + player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.connected.desc")); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index c8100301b..6b48ad426 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -82,7 +82,6 @@ public class LaserRelayConnectionHandler{ } //System.out.println("Removing a Relay from the Network!"); } - WorldData.makeDirty(); } /** @@ -135,7 +134,6 @@ public class LaserRelayConnectionHandler{ else{ secondNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay)); } - WorldData.makeDirty(); //System.out.println("Connected "+firstRelay.toString()+" to "+secondRelay.toString()); //System.out.println(firstNetwork == null ? secondNetwork.toString() : firstNetwork.toString()); //System.out.println(this.networks); @@ -151,7 +149,6 @@ public class LaserRelayConnectionHandler{ firstNetwork.connections.add(secondPair); } this.networks.remove(secondNetwork); - WorldData.makeDirty(); //System.out.println("Merged Two Networks!"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index 10ef6f7f9..b9b016a55 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -14,64 +14,38 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; public class WorldData extends WorldSavedData{ public static final String DATA_TAG = ModUtil.MOD_ID+"worlddata"; - private static WorldData instance; public WorldData(String tag){ super(tag); } - public static void makeDirty(){ - if(instance != null){ - instance.markDirty(); - } - } - - public static void init(MinecraftServer server){ - if(server != null){ - World world = server.getEntityWorld(); - if(!world.isRemote){ - clearOldData(); - ModUtil.LOGGER.info("Loading WorldData!"); - - WorldData savedData = (WorldData)world.loadItemData(WorldData.class, DATA_TAG); - //Generate new SavedData - if(savedData == null){ - ModUtil.LOGGER.info("No WorldData found, creating..."); - - savedData = new WorldData(DATA_TAG); - world.setItemData(DATA_TAG, savedData); - } - else{ - ModUtil.LOGGER.info("WorldData sucessfully received!"); - } - - //Set the current SavedData to the retreived one - WorldData.instance = savedData; + public static WorldData get(World world){ + if(world.getMapStorage() != null){ + WorldData data = (WorldData)world.getMapStorage().getOrLoadData(WorldData.class, DATA_TAG); + if(data == null){ + data = new WorldData(DATA_TAG); + data.markDirty(); + world.getMapStorage().setData(DATA_TAG, data); } - } - } - public static void clearOldData(){ - if(!LaserRelayConnectionHandler.getInstance().networks.isEmpty()){ - ModUtil.LOGGER.info("Clearing leftover Laser Relay Connection Data from other worlds!"); - LaserRelayConnectionHandler.getInstance().networks.clear(); + return data; } - if(!PlayerServerData.playerSaveData.isEmpty()){ - ModUtil.LOGGER.info("Clearing leftover Persistent Server Data from other worlds!"); - PlayerServerData.playerSaveData.clear(); + else{ + return null; } } @Override public void readFromNBT(NBTTagCompound compound){ //Laser World Data + LaserRelayConnectionHandler.getInstance().networks.clear(); + NBTTagList networkList = compound.getTagList("Networks", 10); for(int i = 0; i < networkList.tagCount(); i++){ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i)); @@ -79,6 +53,8 @@ public class WorldData extends WorldSavedData{ } //Player Data + PlayerServerData.playerSaveData.clear(); + NBTTagList playerList = compound.getTagList("PlayerData", 10); for(int i = 0; i < playerList.tagCount(); i++){ PlayerServerData.PlayerSave aSave = PlayerServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index bca485f01..b741e0f57 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.misc.WorldData; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -99,6 +100,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public void invalidate(){ super.invalidate(); LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos); + WorldData.get(this.worldObj).markDirty(); } } From 7892a788be475c8759992bcade0b9ee0acf0e80d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 23:34:01 +0200 Subject: [PATCH 211/322] More null checks for less possible crashes --- .../actuallyadditions/mod/event/EntityLivingEvents.java | 2 +- .../actuallyadditions/mod/event/PlayerObtainEvents.java | 2 +- .../actuallyadditions/mod/event/WorldLoadingEvents.java | 4 ++-- .../actuallyadditions/mod/items/ItemLaserWrench.java | 2 +- .../de/ellpeck/actuallyadditions/mod/misc/WorldData.java | 9 ++++++++- .../actuallyadditions/mod/tile/TileEntityLaserRelay.java | 2 +- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index db81ba522..66fd441e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -87,7 +87,7 @@ public class EntityLivingEvents{ data.setTag("Deaths", deaths); //player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); - WorldData.get(((EntityPlayer)event.getEntityLiving()).worldObj).markDirty(); + WorldData.markDirty(event.getEntityLiving().getEntityWorld()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 6bdc36f6f..0822aad4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -52,7 +52,7 @@ public class PlayerObtainEvents{ NBTTagCompound compound = PlayerServerData.getDataFromPlayer(event.player); if(compound != null && !compound.getBoolean("BookGottenAlready")){ compound.setBoolean("BookGottenAlready", true); - WorldData.get(event.player.worldObj).markDirty(); + WorldData.markDirty(event.player.worldObj); EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet)); entityItem.setPickupDelay(0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 1d6ad85ed..5597a1ada 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -20,14 +20,14 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onLoad(WorldEvent.Load event){ if(!event.getWorld().isRemote){ - WorldData.get(event.getWorld()); + WorldData.loadOrGet(event.getWorld()); } } @SubscribeEvent public void onUnload(WorldEvent.Unload event){ if(!event.getWorld().isRemote){ - WorldData.get(event.getWorld()).markDirty(); + WorldData.markDirty(event.getWorld()); FakePlayerUtil.unloadFakePlayer(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 5deee458f..561ee2048 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -60,7 +60,7 @@ public class ItemLaserWrench extends ItemBase{ ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); - WorldData.get(world).markDirty(); + WorldData.markDirty(world); player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.connected.desc")); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java index b9b016a55..8304ef5f2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java @@ -25,7 +25,7 @@ public class WorldData extends WorldSavedData{ super(tag); } - public static WorldData get(World world){ + public static WorldData loadOrGet(World world){ if(world.getMapStorage() != null){ WorldData data = (WorldData)world.getMapStorage().getOrLoadData(WorldData.class, DATA_TAG); if(data == null){ @@ -41,6 +41,13 @@ public class WorldData extends WorldSavedData{ } } + public static void markDirty(World world){ + WorldData data = loadOrGet(world); + if(data != null){ + data.markDirty(); + } + } + @Override public void readFromNBT(NBTTagCompound compound){ //Laser World Data diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index b741e0f57..b6f13a4ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -100,7 +100,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public void invalidate(){ super.invalidate(); LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos); - WorldData.get(this.worldObj).markDirty(); + WorldData.markDirty(this.worldObj); } } From 29db45553ca608868d4500a153ddc5a63281d866 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 23:45:02 +0200 Subject: [PATCH 212/322] Made tools be held like tools. Closes #96 --- .../assets/actuallyadditions/models/item/handheldItem.json | 3 +++ .../actuallyadditions/models/item/itemAxeCrystalBlack.json | 2 +- .../actuallyadditions/models/item/itemAxeCrystalBlue.json | 2 +- .../actuallyadditions/models/item/itemAxeCrystalGreen.json | 2 +- .../actuallyadditions/models/item/itemAxeCrystalLightBlue.json | 2 +- .../actuallyadditions/models/item/itemAxeCrystalRed.json | 2 +- .../actuallyadditions/models/item/itemAxeCrystalWhite.json | 2 +- .../assets/actuallyadditions/models/item/itemAxeEmerald.json | 2 +- .../assets/actuallyadditions/models/item/itemAxeObsidian.json | 2 +- .../assets/actuallyadditions/models/item/itemAxeQuartz.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillBlack.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillBlue.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillBrown.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillCyan.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillGray.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillGreen.json | 2 +- .../actuallyadditions/models/item/itemDrillLightBlue.json | 2 +- .../actuallyadditions/models/item/itemDrillLightGray.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillLime.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillMagenta.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillOrange.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillPink.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillPurple.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillRed.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillWhite.json | 2 +- .../assets/actuallyadditions/models/item/itemDrillYellow.json | 2 +- .../actuallyadditions/models/item/itemHoeCrystalBlack.json | 2 +- .../actuallyadditions/models/item/itemHoeCrystalBlue.json | 2 +- .../actuallyadditions/models/item/itemHoeCrystalGreen.json | 2 +- .../actuallyadditions/models/item/itemHoeCrystalLightBlue.json | 2 +- .../actuallyadditions/models/item/itemHoeCrystalRed.json | 2 +- .../actuallyadditions/models/item/itemHoeCrystalWhite.json | 2 +- .../assets/actuallyadditions/models/item/itemHoeEmerald.json | 2 +- .../assets/actuallyadditions/models/item/itemHoeObsidian.json | 2 +- .../assets/actuallyadditions/models/item/itemHoeQuartz.json | 2 +- .../assets/actuallyadditions/models/item/itemLaserWrench.json | 2 +- .../assets/actuallyadditions/models/item/itemLeafBlower.json | 2 +- .../actuallyadditions/models/item/itemLeafBlowerAdvanced.json | 2 +- .../actuallyadditions/models/item/itemPhantomConnector.json | 2 +- .../actuallyadditions/models/item/itemPickaxeCrystalBlack.json | 2 +- .../actuallyadditions/models/item/itemPickaxeCrystalBlue.json | 2 +- .../actuallyadditions/models/item/itemPickaxeCrystalGreen.json | 2 +- .../models/item/itemPickaxeCrystalLightBlue.json | 2 +- .../actuallyadditions/models/item/itemPickaxeCrystalRed.json | 2 +- .../actuallyadditions/models/item/itemPickaxeCrystalWhite.json | 2 +- .../actuallyadditions/models/item/itemPickaxeEmerald.json | 2 +- .../actuallyadditions/models/item/itemPickaxeObsidian.json | 2 +- .../actuallyadditions/models/item/itemPickaxeQuartz.json | 2 +- .../actuallyadditions/models/item/itemShovelCrystalBlack.json | 2 +- .../actuallyadditions/models/item/itemShovelCrystalBlue.json | 2 +- .../models/item/itemShovelCrystalLightBlue.json | 2 +- .../actuallyadditions/models/item/itemShovelCrystalRed.json | 2 +- .../actuallyadditions/models/item/itemShovelCrystalWhite.json | 2 +- .../actuallyadditions/models/item/itemShovelEmerald.json | 2 +- .../actuallyadditions/models/item/itemShovelObsidian.json | 2 +- .../assets/actuallyadditions/models/item/itemShovelQuartz.json | 2 +- .../actuallyadditions/models/item/itemSpawnerChanger.json | 2 +- .../actuallyadditions/models/item/itemSwordCrystalBlack.json | 2 +- .../actuallyadditions/models/item/itemSwordCrystalBlue.json | 2 +- .../actuallyadditions/models/item/itemSwordCrystalGreen.json | 2 +- .../models/item/itemSwordCrystalLightBlue.json | 2 +- .../actuallyadditions/models/item/itemSwordCrystalRed.json | 2 +- .../actuallyadditions/models/item/itemSwordCrystalWhite.json | 2 +- .../assets/actuallyadditions/models/item/itemSwordEmerald.json | 2 +- .../actuallyadditions/models/item/itemSwordObsidian.json | 2 +- .../assets/actuallyadditions/models/item/itemSwordQuartz.json | 2 +- .../assets/actuallyadditions/models/item/itemTeleStaff.json | 2 +- 67 files changed, 69 insertions(+), 66 deletions(-) create mode 100644 src/main/resources/assets/actuallyadditions/models/item/handheldItem.json diff --git a/src/main/resources/assets/actuallyadditions/models/item/handheldItem.json b/src/main/resources/assets/actuallyadditions/models/item/handheldItem.json new file mode 100644 index 000000000..55dfddf00 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/handheldItem.json @@ -0,0 +1,3 @@ +{ + "parent": "item/handheld" +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json index 33f647500..adcaaa61a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlack.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalBlack" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json index 5949f8aca..6d0363e7b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json index 4e9b841af..237f54816 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalGreen.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalGreen" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json index caeffcae1..99b3ffb40 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalLightBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalLightBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json index 041d3fdfc..7b0723390 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalRed.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalRed" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json index 10a640004..ab8c1e29b 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeCrystalWhite.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeCrystalWhite" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json index 975462795..fd173dc59 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeEmerald.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeEmerald" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json index ca7cc9d79..a7acbc54d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeObsidian.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeObsidian" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json index d903e2b3f..f418070eb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemAxeQuartz.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemAxeQuartz" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json index 5ffb7ae44..4b516a0d2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlack.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillBlack" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json index 4efd91cd2..61ddad537 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json index 597c7de7c..3fec2531c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillBrown.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillBrown" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json index ce23cb65e..94a181a4d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillCyan.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillCyan" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json index 7344584cb..cfa602871 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGray.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillGray" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json index 00efd317b..984be3b3f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillGreen.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillGreen" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json index 883650c36..ec97eed09 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillLightBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json index cc08b6b10..88b452961 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLightGray.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillLightGray" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json index ab04de229..cc1642732 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillLime.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillLime" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json index f98228429..4e67eed5d 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillMagenta.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillMagenta" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json index 58d89fecc..6a5ccefee 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillOrange.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillOrange" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json index d8c780250..1136e1d81 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPink.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillPink" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json index 3f448e9c9..c55bacbc4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillPurple.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillPurple" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json index e44904f4c..5e999b492 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillRed.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillRed" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillWhite.json index 917d8ea48..47873c0c6 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillWhite.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillWhite" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemDrillYellow.json b/src/main/resources/assets/actuallyadditions/models/item/itemDrillYellow.json index 1ff1b70f0..4762e03c4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemDrillYellow.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemDrillYellow.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemDrillYellow" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json index b4405b11b..83d951e4c 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlack.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalBlack" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json index 5e41c0164..47ef30fbb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json index a83b3af0c..93b7e633f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalGreen.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalGreen" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json index 71e4fd303..1449933aa 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalLightBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalLightBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json index fc671fed9..ea15741c8 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalRed.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalRed" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json index 96c8fd154..8006c03a5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeCrystalWhite.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeCrystalWhite" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json index 46773a6bb..45cb9e370 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeEmerald.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeEmerald" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json index 6830b59e8..3d3272e39 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeObsidian.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeObsidian" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json index 3c7b724fe..e0fb71b3f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemHoeQuartz.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemHoeQuartz" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json b/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json index 355a07090..edf75b25a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemLaserWrench.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemLaserWrench" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlower.json b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlower.json index 489521fc7..5ac9eea2a 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlower.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlower.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemLeafBlower" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlowerAdvanced.json b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlowerAdvanced.json index 17905e2e0..5555f3a08 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlowerAdvanced.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemLeafBlowerAdvanced.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemLeafBlowerAdvanced" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json b/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json index 596e7fd15..6c8c40553 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPhantomConnector.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPhantomConnector" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json index 771a07a37..090bb22b5 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlack.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalBlack" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json index a9b2073d4..be7690eb3 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json index 92e8e5666..b7ae20085 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalGreen.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalGreen" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json index 496b110aa..416dad6aa 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalLightBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalLightBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json index 748f85268..c712355fd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalRed.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalRed" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json index 470033888..1d069bcdd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeCrystalWhite.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeCrystalWhite" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json index 4dd313223..131a9f504 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeEmerald.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeEmerald" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json index 0b2a7d461..a0f8762fd 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeObsidian.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeObsidian" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json index 0f3642d49..6b0be8834 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPickaxeQuartz.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPickaxeQuartz" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json index 0ff56ffa2..4ed41174e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlack.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalBlack" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json index 40c7418aa..ca07d6e06 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json index 9f4966f8b..616865d0e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalLightBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalLightBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json index af139596e..433aa3563 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalRed.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalRed" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json index 63c5a4bfd..9b7a2038e 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelCrystalWhite.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelCrystalWhite" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json index b47ca3480..edc09f533 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelEmerald.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelEmerald" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json index bcc488885..b8b8b60ad 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelObsidian.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelObsidian" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json index 58bec9d4d..93f9bdaf2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemShovelQuartz.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemShovelQuartz" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json b/src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json index cbba29e26..af917ee18 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSpawnerChanger.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSpawnerChanger" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json index cb3d2cd81..6e3926eea 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlack.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalBlack" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json index 677a26ee9..9dfb59363 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json index 41f950a84..c03b3cce2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalGreen.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalGreen" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json index 3ed80a4e2..529249c2f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalLightBlue.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalLightBlue" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json index e81725a19..b7580c11f 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalRed.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalRed" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json index 94cf38eb1..26ab9abe2 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordCrystalWhite.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordCrystalWhite" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json index da8db7f97..0678b4ee1 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordEmerald.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordEmerald" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json index c3fffbfd9..c9aeb07fb 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordObsidian.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordObsidian" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json b/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json index 545ac6937..06a8019c4 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemSwordQuartz.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemSwordQuartz" } diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json b/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json index 32e489cb9..fd78c0699 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemTeleStaff.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemTeleStaff" } From 3f9ba0aa2f18b210a650a886a4a164a4175a9523 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 23:46:09 +0200 Subject: [PATCH 213/322] forgot this --- .../assets/actuallyadditions/models/item/itemPaxel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json b/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json index 9d884e5ba..0ced934f9 100644 --- a/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json +++ b/src/main/resources/assets/actuallyadditions/models/item/itemPaxel.json @@ -1,5 +1,5 @@ { - "parent": "actuallyadditions:item/standardItem", + "parent": "actuallyadditions:item/handheldItem", "textures": { "layer0": "actuallyadditions:items/itemPaxel", "layer1": "actuallyadditions:items/itemPaxelOverlay" From 6c94c08ba4682551ed5959bb9f8c3a9989bc7ec9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 3 Jun 2016 23:51:06 +0200 Subject: [PATCH 214/322] r37! --- build.gradle | 2 +- update/changelog.md | 11 +++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 77a76530f..7076bdcb8 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ apply plugin: 'net.minecraftforge.gradle.forge' //I'm doing this because people made me do it. Even though it never worked properly when I tried it. Sigh. apply plugin: 'idea' -version = "1.9.4-r36" +version = "1.9.4-r37" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index f87d188fd..70605aac3 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,14 @@ +# 1.9.4-r37 +* Fixed rendering bug with Greenhouse Glass +* Removed unfinished feature tags in booklet +* Added water bowl +* Fixed block breaking effects playing just the sound (drill, leaf blower etc.) +* Fixed aiots not having four times the durability of their base tools +* Made compost only acceppt the current recipe's amount of items +* Made shovels make path blocks instead of farmland +* Changed world data save system to hopefully make laser relays not disconnect on certain occasions but only on the server and I don't get why this is happening +* Made tools be held like tools and not like normal items in third person + # 1.9.4-r36 * Added a config option to print all of the booklet's text into a file on startup * Made booklet words and characters not be more than they should be because everything was being done twice diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 4de9b3222..67436e4a6 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=36 \ No newline at end of file +1.9.4=37 \ No newline at end of file From 7e682af51de74e64259a7ee63da37c48fbd1c448 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Jun 2016 00:26:33 +0200 Subject: [PATCH 215/322] Fixed a syncing bug with tileentities on world join --- .../mod/tile/TileEntityBase.java | 6 +++++- .../mod/tile/TileEntityLaserRelay.java | 21 +++++++------------ update/changelog.md | 1 + 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index d099e6ca9..b558ab98a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -129,7 +129,6 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.readSyncableNBT(compound, true); } - @Override public NBTTagCompound getUpdateTag(){ NBTTagCompound tag = super.getUpdateTag(); @@ -137,6 +136,11 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ return tag; } + @Override + public void handleUpdateTag(NBTTagCompound compound){ + this.receiveSyncCompound(compound); + } + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ if(!isForSync){ compound.setBoolean("Redstone", this.isRedstonePowered); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index b6f13a4ed..d4cd71a62 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -38,19 +38,15 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void receiveSyncCompound(NBTTagCompound compound){ - BlockPos thisPos = this.pos; - if(compound != null){ - LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(thisPos); + LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos); - NBTTagList list = compound.getTagList("Connections", 10); + NBTTagList list = compound.getTagList("Connections", 10); + if(!list.hasNoTags()){ for(int i = 0; i < list.tagCount(); i++){ LaserRelayConnectionHandler.ConnectionPair pair = LaserRelayConnectionHandler.ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); LaserRelayConnectionHandler.getInstance().addConnection(pair.firstRelay, pair.secondRelay); } } - else{ - LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(thisPos); - } super.receiveSyncCompound(compound); } @@ -59,17 +55,16 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public NBTTagCompound getUpdateTag(){ NBTTagCompound compound = super.getUpdateTag(); + NBTTagList list = new NBTTagList(); - BlockPos thisPos = this.pos; - ConcurrentSet connections = LaserRelayConnectionHandler.getInstance().getConnectionsFor(thisPos); - - if(connections != null){ - NBTTagList list = new NBTTagList(); + ConcurrentSet connections = LaserRelayConnectionHandler.getInstance().getConnectionsFor(this.pos); + if(connections != null && !connections.isEmpty()){ for(LaserRelayConnectionHandler.ConnectionPair pair : connections){ list.appendTag(pair.writeToNBT()); } - compound.setTag("Connections", list); } + + compound.setTag("Connections", list); return compound; } diff --git a/update/changelog.md b/update/changelog.md index 70605aac3..96dcef066 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -8,6 +8,7 @@ * Made shovels make path blocks instead of farmland * Changed world data save system to hopefully make laser relays not disconnect on certain occasions but only on the server and I don't get why this is happening * Made tools be held like tools and not like normal items in third person +* Fixed a syncing bug with tileentities on world join # 1.9.4-r36 * Added a config option to print all of the booklet's text into a file on startup From ec07b3da02244cd537ca9d90249c8042d957c68c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Jun 2016 13:51:06 +0200 Subject: [PATCH 216/322] Added custom system to save world data because the MC one was always failing on me --- .../mod/booklet/GuiBooklet.java | 2 +- .../playerdata => data}/ExtraClientData.java | 2 +- .../playerdata => data}/PlayerServerData.java | 9 +- .../actuallyadditions/mod/data/WorldData.java | 158 ++++++++++++++++++ .../mod/event/EntityLivingEvents.java | 5 +- .../mod/event/PlayerObtainEvents.java | 5 +- .../mod/event/WorldLoadingEvents.java | 13 +- .../mod/items/ItemLaserWrench.java | 6 +- .../mod/misc/LaserRelayConnectionHandler.java | 55 +++--- .../actuallyadditions/mod/misc/WorldData.java | 92 ---------- .../mod/proxy/ClientProxy.java | 2 +- .../mod/tile/TileEntityItemViewer.java | 2 +- .../mod/tile/TileEntityLaserRelay.java | 12 +- .../mod/tile/TileEntityLaserRelayEnergy.java | 2 +- 14 files changed, 209 insertions(+), 156 deletions(-) rename src/main/java/de/ellpeck/actuallyadditions/mod/{util/playerdata => data}/ExtraClientData.java (98%) rename src/main/java/de/ellpeck/actuallyadditions/mod/{util/playerdata => data}/PlayerServerData.java (89%) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 1f9e81c63..eb8777b0a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -28,7 +28,7 @@ import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.ExtraClientData; +import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java similarity index 98% rename from src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java index 73ab775b0..09e2c72c2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/ExtraClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java @@ -8,7 +8,7 @@ * © 2015-2016 Ellpeck */ -package de.ellpeck.actuallyadditions.mod.util.playerdata; +package de.ellpeck.actuallyadditions.mod.data; import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PlayerServerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java similarity index 89% rename from src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PlayerServerData.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java index e862aa28b..7dcd1447e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/playerdata/PlayerServerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java @@ -8,7 +8,7 @@ * © 2015-2016 Ellpeck */ -package de.ellpeck.actuallyadditions.mod.util.playerdata; +package de.ellpeck.actuallyadditions.mod.data; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -18,11 +18,10 @@ import java.util.UUID; public class PlayerServerData{ - public static final ArrayList playerSaveData = new ArrayList(); - public static NBTTagCompound getDataFromPlayer(EntityPlayer player){ + ArrayList data = WorldData.getDataForWorld(player.worldObj.provider.getDimension()).PLAYER_SAVE_DATA; //Get Data from existing data - for(PlayerSave save : playerSaveData){ + for(PlayerSave save : data){ if(save.thePlayerUUID.equals(player.getUniqueID())){ return save.theCompound; } @@ -30,7 +29,7 @@ public class PlayerServerData{ //Add Data if none is existant PlayerSave aSave = new PlayerSave(player.getUniqueID(), new NBTTagCompound()); - playerSaveData.add(aSave); + data.add(aSave); return aSave.theCompound; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java new file mode 100644 index 000000000..fea0ab34f --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -0,0 +1,158 @@ +/* + * This file ("WorldData.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.data; + +import de.ellpeck.actuallyadditions.mod.data.PlayerServerData.PlayerSave; +import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.Network; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import io.netty.util.internal.ConcurrentSet; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.storage.ISaveHandler; +import net.minecraftforge.common.WorldSpecificSaveHandler; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class WorldData{ + + public static final String DATA_TAG = ModUtil.MOD_ID+"data"; + private static Map worldData = new ConcurrentHashMap(); + + private ISaveHandler handler; + private int dimension; + + public final ConcurrentSet laserRelayNetworks = new ConcurrentSet(); + public static final ArrayList PLAYER_SAVE_DATA = new ArrayList(); + + public WorldData(ISaveHandler handler, int dimension){ + this.handler = handler; + this.dimension = dimension; + } + + public static WorldData getDataForWorld(int world){ + return worldData.get(world); + } + + private void readFromNBT(NBTTagCompound compound){ + //Laser World Data + NBTTagList networkList = compound.getTagList("Networks", 10); + for(int i = 0; i < networkList.tagCount(); i++){ + Network network = LaserRelayConnectionHandler.readNetworkFromNBT(networkList.getCompoundTagAt(i)); + this.laserRelayNetworks.add(network); + } + + if(this.dimension == 0){ + //Player Data + PLAYER_SAVE_DATA.clear(); + + NBTTagList playerList = compound.getTagList("PlayerData", 10); + for(int i = 0; i < playerList.tagCount(); i++){ + PlayerSave aSave = PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); + PLAYER_SAVE_DATA.add(aSave); + } + } + } + + private void writeToNBT(NBTTagCompound compound){ + //Laser World Data + NBTTagList networkList = new NBTTagList(); + for(Network network : this.laserRelayNetworks){ + networkList.appendTag(LaserRelayConnectionHandler.writeNetworkToNBT(network)); + } + compound.setTag("Networks", networkList); + + if(this.dimension == 0){ + //Player Data + NBTTagList playerList = new NBTTagList(); + for(PlayerSave theSave : PLAYER_SAVE_DATA){ + playerList.appendTag(theSave.toNBT()); + } + compound.setTag("PlayerData", playerList); + } + } + + public static void load(World world){ + if(!world.isRemote && world instanceof WorldServer){ + WorldData data = new WorldData(new WorldSpecificSaveHandler((WorldServer)world, world.getSaveHandler()), world.provider.getDimension()); + worldData.put(data.dimension, data); + + try{ + File dataFile = data.handler.getMapFileFromName(DATA_TAG+data.dimension); + + if(dataFile != null && dataFile.exists()){ + FileInputStream stream = new FileInputStream(dataFile); + NBTTagCompound compound = CompressedStreamTools.readCompressed(stream); + stream.close(); + data.readFromNBT(compound); + + ModUtil.LOGGER.info("Successfully received WorldData for world "+data.dimension+"!"); + } + else{ + ModUtil.LOGGER.info("No WorldData found for world "+data.dimension+", creating..."); + } + + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to load WorldData for world "+data.dimension+"!", e); + } + } + } + + public static void save(World world){ + if(!world.isRemote){ + WorldData data = worldData.get(world.provider.getDimension()); + if(data != null && data.handler != null){ + try{ + File dataFile = data.handler.getMapFileFromName(DATA_TAG+data.dimension); + + if(dataFile != null){ + if(!dataFile.exists()){ + dataFile.createNewFile(); + ModUtil.LOGGER.info("Creating new WorldData file for world!"); + } + + NBTTagCompound compound = new NBTTagCompound(); + data.writeToNBT(compound); + FileOutputStream stream = new FileOutputStream(dataFile); + CompressedStreamTools.writeCompressed(compound, stream); + stream.close(); + + ModUtil.LOGGER.info("Saved WorldData for world "+data.dimension+"!"); + } + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to save WorldData for world "+data.dimension+"!", e); + } + } + else{ + ModUtil.LOGGER.error("Tried to save WorldData without any data being present!?"); + } + } + } + + public static void unload(World world){ + if(!world.isRemote){ + save(world); + int dim = world.provider.getDimension(); + worldData.remove(dim); + ModUtil.LOGGER.info("Unloading WorldData for world "+dim+"!"); + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index 66fd441e1..f2053615e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -14,10 +14,10 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; +import de.ellpeck.actuallyadditions.mod.data.PlayerServerData; import net.minecraft.block.BlockLiquid; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -87,7 +87,6 @@ public class EntityLivingEvents{ data.setTag("Deaths", deaths); //player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); - WorldData.markDirty(event.getEntityLiving().getEntityWorld()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 0822aad4d..e28a018a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -14,9 +14,9 @@ import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; +import de.ellpeck.actuallyadditions.mod.data.PlayerServerData; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -52,7 +52,6 @@ public class PlayerObtainEvents{ NBTTagCompound compound = PlayerServerData.getDataFromPlayer(event.player); if(compound != null && !compound.getBoolean("BookGottenAlready")){ compound.setBoolean("BookGottenAlready", true); - WorldData.markDirty(event.player.worldObj); EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet)); entityItem.setPickupDelay(0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 5597a1ada..04695e7a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.event; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -20,16 +20,23 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onLoad(WorldEvent.Load event){ if(!event.getWorld().isRemote){ - WorldData.loadOrGet(event.getWorld()); + WorldData.load(event.getWorld()); } } @SubscribeEvent public void onUnload(WorldEvent.Unload event){ if(!event.getWorld().isRemote){ - WorldData.markDirty(event.getWorld()); + WorldData.unload(event.getWorld()); FakePlayerUtil.unloadFakePlayer(); } } + @SubscribeEvent + public void onSave(WorldEvent.Save event){ + if(!event.getWorld().isRemote){ + WorldData.save(event.getWorld()); + } + } + } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 561ee2048..e885545cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; +import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; @@ -54,14 +54,12 @@ public class ItemLaserWrench extends ItemBase{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); if(savedPos != null){ TileEntity savedTile = world.getTileEntity(savedPos); - if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.getInstance().addConnection(savedPos, pos)){ + if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.addConnection(savedPos, pos, world.provider.getDimension())){ ItemPhantomConnector.clearStorage(stack); ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); ((TileEntityLaserRelay)world.getTileEntity(pos)).sendUpdate(); - WorldData.markDirty(world); - player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.connected.desc")); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 6b48ad426..1930d596e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.misc; +import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import io.netty.util.internal.ConcurrentSet; @@ -19,21 +20,7 @@ import net.minecraft.util.math.BlockPos; public class LaserRelayConnectionHandler{ - private static LaserRelayConnectionHandler instance; - - /** - * All of the Networks - */ - public final ConcurrentSet networks = new ConcurrentSet(); - - public static LaserRelayConnectionHandler getInstance(){ - if(instance == null){ - instance = new LaserRelayConnectionHandler(); - } - return instance; - } - - public NBTTagCompound writeNetworkToNBT(Network network){ + public static NBTTagCompound writeNetworkToNBT(Network network){ NBTTagList list = new NBTTagList(); for(ConnectionPair pair : network.connections){ list.appendTag(pair.writeToNBT()); @@ -43,7 +30,7 @@ public class LaserRelayConnectionHandler{ return compound; } - public Network readNetworkFromNBT(NBTTagCompound tag){ + public static Network readNetworkFromNBT(NBTTagCompound tag){ NBTTagList list = tag.getTagList("Network", 10); Network network = new Network(); for(int i = 0; i < list.tagCount(); i++){ @@ -55,9 +42,9 @@ public class LaserRelayConnectionHandler{ /** * Gets all Connections for a Relay */ - public ConcurrentSet getConnectionsFor(BlockPos relay){ + public static ConcurrentSet getConnectionsFor(BlockPos relay, int world){ ConcurrentSet allPairs = new ConcurrentSet(); - for(Network aNetwork : this.networks){ + for(Network aNetwork : WorldData.getDataForWorld(world).laserRelayNetworks){ for(ConnectionPair pair : aNetwork.connections){ if(pair.contains(relay)){ allPairs.add(pair); @@ -70,14 +57,14 @@ public class LaserRelayConnectionHandler{ /** * Removes a Relay from its Network */ - public void removeRelayFromNetwork(BlockPos relay){ - Network network = this.getNetworkFor(relay); + public static void removeRelayFromNetwork(BlockPos relay, int world){ + Network network = getNetworkFor(relay, world); if(network != null){ //Setup new network (so that splitting a network will cause it to break into two) - this.networks.remove(network); + WorldData.getDataForWorld(world).laserRelayNetworks.remove(network); for(ConnectionPair pair : network.connections){ if(!pair.contains(relay)){ - this.addConnection(pair.firstRelay, pair.secondRelay); + addConnection(pair.firstRelay, pair.secondRelay, world); } } //System.out.println("Removing a Relay from the Network!"); @@ -87,8 +74,8 @@ public class LaserRelayConnectionHandler{ /** * Gets a Network for a Relay */ - public Network getNetworkFor(BlockPos relay){ - for(Network aNetwork : this.networks){ + public static Network getNetworkFor(BlockPos relay, int world){ + for(Network aNetwork : WorldData.getDataForWorld(world).laserRelayNetworks){ for(ConnectionPair pair : aNetwork.connections){ if(pair.contains(relay)){ return aNetwork; @@ -102,28 +89,28 @@ public class LaserRelayConnectionHandler{ * Adds a new connection between two relays * (Puts it into the correct network!) */ - public boolean addConnection(BlockPos firstRelay, BlockPos secondRelay){ + public static boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, int world){ int distance = (int)PosUtil.toVec(firstRelay).distanceTo(PosUtil.toVec(secondRelay)); if(distance > TileEntityLaserRelay.MAX_DISTANCE || PosUtil.areSamePos(firstRelay, secondRelay)){ return false; } - Network firstNetwork = this.getNetworkFor(firstRelay); - Network secondNetwork = this.getNetworkFor(secondRelay); + Network firstNetwork = getNetworkFor(firstRelay, world); + Network secondNetwork = getNetworkFor(secondRelay, world); //No Network exists if(firstNetwork == null && secondNetwork == null){ firstNetwork = new Network(); - this.networks.add(firstNetwork); + WorldData.getDataForWorld(world).laserRelayNetworks.add(firstNetwork); firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay)); } //The same Network else if(firstNetwork == secondNetwork){ return false; } - //Both relays have networks + //Both relays have laserRelayNetworks else if(firstNetwork != null && secondNetwork != null){ - this.mergeNetworks(firstNetwork, secondNetwork); + mergeNetworks(firstNetwork, secondNetwork, world); firstNetwork.connections.add(new ConnectionPair(firstRelay, secondRelay)); } //Only first network exists @@ -136,19 +123,19 @@ public class LaserRelayConnectionHandler{ } //System.out.println("Connected "+firstRelay.toString()+" to "+secondRelay.toString()); //System.out.println(firstNetwork == null ? secondNetwork.toString() : firstNetwork.toString()); - //System.out.println(this.networks); + //System.out.println(laserRelayNetworks); return true; } /** - * Merges two networks together + * Merges two laserRelayNetworks together * (Actually puts everything from the second network into the first one and removes the second one) */ - public void mergeNetworks(Network firstNetwork, Network secondNetwork){ + public static void mergeNetworks(Network firstNetwork, Network secondNetwork, int world){ for(ConnectionPair secondPair : secondNetwork.connections){ firstNetwork.connections.add(secondPair); } - this.networks.remove(secondNetwork); + WorldData.getDataForWorld(world).laserRelayNetworks.remove(secondNetwork); //System.out.println("Merged Two Networks!"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java deleted file mode 100644 index 8304ef5f2..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/WorldData.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * This file ("WorldData.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.misc; - -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.PlayerServerData; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.world.World; -import net.minecraft.world.WorldSavedData; - -public class WorldData extends WorldSavedData{ - - public static final String DATA_TAG = ModUtil.MOD_ID+"worlddata"; - - public WorldData(String tag){ - super(tag); - } - - public static WorldData loadOrGet(World world){ - if(world.getMapStorage() != null){ - WorldData data = (WorldData)world.getMapStorage().getOrLoadData(WorldData.class, DATA_TAG); - if(data == null){ - data = new WorldData(DATA_TAG); - data.markDirty(); - world.getMapStorage().setData(DATA_TAG, data); - } - - return data; - } - else{ - return null; - } - } - - public static void markDirty(World world){ - WorldData data = loadOrGet(world); - if(data != null){ - data.markDirty(); - } - } - - @Override - public void readFromNBT(NBTTagCompound compound){ - //Laser World Data - LaserRelayConnectionHandler.getInstance().networks.clear(); - - NBTTagList networkList = compound.getTagList("Networks", 10); - for(int i = 0; i < networkList.tagCount(); i++){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().readNetworkFromNBT(networkList.getCompoundTagAt(i)); - LaserRelayConnectionHandler.getInstance().networks.add(network); - } - - //Player Data - PlayerServerData.playerSaveData.clear(); - - NBTTagList playerList = compound.getTagList("PlayerData", 10); - for(int i = 0; i < playerList.tagCount(); i++){ - PlayerServerData.PlayerSave aSave = PlayerServerData.PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); - PlayerServerData.playerSaveData.add(aSave); - } - } - - - @Override - public NBTTagCompound writeToNBT(NBTTagCompound compound){ - //Laser World Data - NBTTagList networkList = new NBTTagList(); - for(LaserRelayConnectionHandler.Network network : LaserRelayConnectionHandler.getInstance().networks){ - networkList.appendTag(LaserRelayConnectionHandler.getInstance().writeNetworkToNBT(network)); - } - compound.setTag("Networks", networkList); - - //Player Data - NBTTagList playerList = new NBTTagList(); - for(int i = 0; i < PlayerServerData.playerSaveData.size(); i++){ - PlayerServerData.PlayerSave theSave = PlayerServerData.playerSaveData.get(i); - playerList.appendTag(theSave.toNBT()); - } - compound.setTag("PlayerData", playerList); - - return compound; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index b7417e4e8..cd94833db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -28,7 +28,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.playerdata.ExtraClientData; +import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 3bc7bedb0..750866584 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -31,7 +31,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private List getItemHandlerInfos(){ TileEntityLaserRelayItem relay = this.getConnectedRelay(); if(relay != null){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(relay.getPos()); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(relay.getPos(), this.worldObj.provider.getDimension()); if(network != null){ return relay.getItemHandlersInNetwork(network); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index d4cd71a62..cc1dfe7b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; -import de.ellpeck.actuallyadditions.mod.misc.WorldData; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -38,13 +37,13 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void receiveSyncCompound(NBTTagCompound compound){ - LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos); + LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj.provider.getDimension()); NBTTagList list = compound.getTagList("Connections", 10); if(!list.hasNoTags()){ for(int i = 0; i < list.tagCount(); i++){ LaserRelayConnectionHandler.ConnectionPair pair = LaserRelayConnectionHandler.ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); - LaserRelayConnectionHandler.getInstance().addConnection(pair.firstRelay, pair.secondRelay); + LaserRelayConnectionHandler.addConnection(pair.firstRelay, pair.secondRelay, this.worldObj.provider.getDimension()); } } @@ -57,7 +56,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ NBTTagCompound compound = super.getUpdateTag(); NBTTagList list = new NBTTagList(); - ConcurrentSet connections = LaserRelayConnectionHandler.getInstance().getConnectionsFor(this.pos); + ConcurrentSet connections = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj.provider.getDimension()); if(connections != null && !connections.isEmpty()){ for(LaserRelayConnectionHandler.ConnectionPair pair : connections){ list.appendTag(pair.writeToNBT()); @@ -80,7 +79,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public void renderParticles(){ if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 16 : 8) == 0){ BlockPos thisPos = this.pos; - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(thisPos); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj.provider.getDimension()); if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ @@ -94,8 +93,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void invalidate(){ super.invalidate(); - LaserRelayConnectionHandler.getInstance().removeRelayFromNetwork(this.pos); - WorldData.markDirty(this.worldObj); + LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj.provider.getDimension()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 0947ac40b..dcfa71239 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -46,7 +46,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ int transmitted = 0; if(maxTransmit > 0){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(this.pos); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj.provider.getDimension()); if(network != null){ transmitted = this.transferEnergyToReceiverInNeed(blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); } From b88f2d2c3e55feb9125a14201e7a4f6ba50a4461 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Jun 2016 13:52:27 +0200 Subject: [PATCH 217/322] This doesn't need to be anymore --- .../de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java index 7dcd1447e..42833042f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java @@ -19,7 +19,7 @@ import java.util.UUID; public class PlayerServerData{ public static NBTTagCompound getDataFromPlayer(EntityPlayer player){ - ArrayList data = WorldData.getDataForWorld(player.worldObj.provider.getDimension()).PLAYER_SAVE_DATA; + ArrayList data = WorldData.PLAYER_SAVE_DATA; //Get Data from existing data for(PlayerSave save : data){ if(save.thePlayerUUID.equals(player.getUniqueID())){ From f0b119229e063684b2231bd187472a16eb821ef2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Jun 2016 14:07:32 +0200 Subject: [PATCH 218/322] r38! Sorry I have to do this >_> --- build.gradle | 3 +-- update/changelog.md | 4 ++++ update/updateVersions.properties | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 7076bdcb8..1f5fda98c 100644 --- a/build.gradle +++ b/build.gradle @@ -12,10 +12,9 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -//I'm doing this because people made me do it. Even though it never worked properly when I tried it. Sigh. apply plugin: 'idea' -version = "1.9.4-r37" +version = "1.9.4-r38" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 96dcef066..82d3a4b7d 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,7 @@ +# 1.9.4-r38 +* Added custom system to save world data because the Minecraft one always failed on me. +* Note: This WILL disconnect all of your laser relays, sorry. Just reconnect them again. If you find any bugs with the new system (Laser Relay connections), leave an issue on github. Thanks! + # 1.9.4-r37 * Fixed rendering bug with Greenhouse Glass * Removed unfinished feature tags in booklet diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 67436e4a6..5e51629fb 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=37 \ No newline at end of file +1.9.4=38 \ No newline at end of file From c154ccbbbf3442d660ff014481baaa4d39d0a142 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Jun 2016 14:20:38 +0200 Subject: [PATCH 219/322] This annoys me. --- .../java/de/ellpeck/actuallyadditions/mod/data/WorldData.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index fea0ab34f..cefbb6118 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -125,7 +125,7 @@ public class WorldData{ if(dataFile != null){ if(!dataFile.exists()){ dataFile.createNewFile(); - ModUtil.LOGGER.info("Creating new WorldData file for world!"); + ModUtil.LOGGER.info("Creating new WorldData file for world "+data.dimension+"!"); } NBTTagCompound compound = new NBTTagCompound(); From e17a48d7f066ce1ea741f656187b32ac61bf9316 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Jun 2016 14:38:20 +0200 Subject: [PATCH 220/322] How did I not think of this? --- .../actuallyadditions/mod/data/WorldData.java | 21 +++++++++++++------ .../mod/event/WorldLoadingEvents.java | 14 ++++--------- .../mod/items/ItemLaserWrench.java | 2 +- .../mod/misc/LaserRelayConnectionHandler.java | 11 +++++----- .../mod/tile/TileEntityItemViewer.java | 2 +- .../mod/tile/TileEntityLaserRelay.java | 10 ++++----- .../mod/tile/TileEntityLaserRelayEnergy.java | 2 +- 7 files changed, 33 insertions(+), 29 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index cefbb6118..0e1273603 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -46,8 +46,17 @@ public class WorldData{ this.dimension = dimension; } - public static WorldData getDataForWorld(int world){ - return worldData.get(world); + public static WorldData getDataForWorld(World world){ + int dim = world.provider.getDimension(); + WorldData data = worldData.get(dim); + + if(data == null && world.isRemote){ + data = new WorldData(null, dim); + worldData.put(dim, data); + ModUtil.LOGGER.info("Creating temporary WorldData for world "+dim+" on the client!"); + } + + return data; } private void readFromNBT(NBTTagCompound compound){ @@ -142,7 +151,7 @@ public class WorldData{ } } else{ - ModUtil.LOGGER.error("Tried to save WorldData without any data being present!?"); + ModUtil.LOGGER.error("Tried to save WorldData for "+world.provider.getDimension()+" without any data being present!?"); } } } @@ -150,9 +159,9 @@ public class WorldData{ public static void unload(World world){ if(!world.isRemote){ save(world); - int dim = world.provider.getDimension(); - worldData.remove(dim); - ModUtil.LOGGER.info("Unloading WorldData for world "+dim+"!"); + + worldData.remove(world.provider.getDimension()); + ModUtil.LOGGER.info("Unloading WorldData for world "+world.provider.getDimension()+"!"); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 04695e7a6..eb4e353db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -19,24 +19,18 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onLoad(WorldEvent.Load event){ - if(!event.getWorld().isRemote){ - WorldData.load(event.getWorld()); - } + WorldData.load(event.getWorld()); } @SubscribeEvent public void onUnload(WorldEvent.Unload event){ - if(!event.getWorld().isRemote){ - WorldData.unload(event.getWorld()); - FakePlayerUtil.unloadFakePlayer(); - } + WorldData.unload(event.getWorld()); + FakePlayerUtil.unloadFakePlayer(); } @SubscribeEvent public void onSave(WorldEvent.Save event){ - if(!event.getWorld().isRemote){ - WorldData.save(event.getWorld()); - } + WorldData.save(event.getWorld()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index e885545cb..599d76f5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -54,7 +54,7 @@ public class ItemLaserWrench extends ItemBase{ BlockPos savedPos = ItemPhantomConnector.getStoredPosition(stack); if(savedPos != null){ TileEntity savedTile = world.getTileEntity(savedPos); - if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.addConnection(savedPos, pos, world.provider.getDimension())){ + if(ItemPhantomConnector.getStoredWorld(stack) == world && savedTile instanceof TileEntityLaserRelay && ((TileEntityLaserRelay)savedTile).isItem == ((TileEntityLaserRelay)tile).isItem && LaserRelayConnectionHandler.addConnection(savedPos, pos, world)){ ItemPhantomConnector.clearStorage(stack); ((TileEntityLaserRelay)world.getTileEntity(savedPos)).sendUpdate(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 1930d596e..1c6bb47b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -17,6 +17,7 @@ import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; public class LaserRelayConnectionHandler{ @@ -42,7 +43,7 @@ public class LaserRelayConnectionHandler{ /** * Gets all Connections for a Relay */ - public static ConcurrentSet getConnectionsFor(BlockPos relay, int world){ + public static ConcurrentSet getConnectionsFor(BlockPos relay, World world){ ConcurrentSet allPairs = new ConcurrentSet(); for(Network aNetwork : WorldData.getDataForWorld(world).laserRelayNetworks){ for(ConnectionPair pair : aNetwork.connections){ @@ -57,7 +58,7 @@ public class LaserRelayConnectionHandler{ /** * Removes a Relay from its Network */ - public static void removeRelayFromNetwork(BlockPos relay, int world){ + public static void removeRelayFromNetwork(BlockPos relay, World world){ Network network = getNetworkFor(relay, world); if(network != null){ //Setup new network (so that splitting a network will cause it to break into two) @@ -74,7 +75,7 @@ public class LaserRelayConnectionHandler{ /** * Gets a Network for a Relay */ - public static Network getNetworkFor(BlockPos relay, int world){ + public static Network getNetworkFor(BlockPos relay, World world){ for(Network aNetwork : WorldData.getDataForWorld(world).laserRelayNetworks){ for(ConnectionPair pair : aNetwork.connections){ if(pair.contains(relay)){ @@ -89,7 +90,7 @@ public class LaserRelayConnectionHandler{ * Adds a new connection between two relays * (Puts it into the correct network!) */ - public static boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, int world){ + public static boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, World world){ int distance = (int)PosUtil.toVec(firstRelay).distanceTo(PosUtil.toVec(secondRelay)); if(distance > TileEntityLaserRelay.MAX_DISTANCE || PosUtil.areSamePos(firstRelay, secondRelay)){ return false; @@ -131,7 +132,7 @@ public class LaserRelayConnectionHandler{ * Merges two laserRelayNetworks together * (Actually puts everything from the second network into the first one and removes the second one) */ - public static void mergeNetworks(Network firstNetwork, Network secondNetwork, int world){ + public static void mergeNetworks(Network firstNetwork, Network secondNetwork, World world){ for(ConnectionPair secondPair : secondNetwork.connections){ firstNetwork.connections.add(secondPair); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 750866584..e58cad08f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -31,7 +31,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private List getItemHandlerInfos(){ TileEntityLaserRelayItem relay = this.getConnectedRelay(); if(relay != null){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(relay.getPos(), this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(relay.getPos(), this.worldObj); if(network != null){ return relay.getItemHandlersInNetwork(network); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index cc1dfe7b6..cc3806603 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -37,13 +37,13 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void receiveSyncCompound(NBTTagCompound compound){ - LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj); NBTTagList list = compound.getTagList("Connections", 10); if(!list.hasNoTags()){ for(int i = 0; i < list.tagCount(); i++){ LaserRelayConnectionHandler.ConnectionPair pair = LaserRelayConnectionHandler.ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); - LaserRelayConnectionHandler.addConnection(pair.firstRelay, pair.secondRelay, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.addConnection(pair.firstRelay, pair.secondRelay, this.worldObj); } } @@ -56,7 +56,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ NBTTagCompound compound = super.getUpdateTag(); NBTTagList list = new NBTTagList(); - ConcurrentSet connections = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj.provider.getDimension()); + ConcurrentSet connections = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj); if(connections != null && !connections.isEmpty()){ for(LaserRelayConnectionHandler.ConnectionPair pair : connections){ list.appendTag(pair.writeToNBT()); @@ -79,7 +79,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public void renderParticles(){ if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 16 : 8) == 0){ BlockPos thisPos = this.pos; - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj); if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ @@ -93,7 +93,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void invalidate(){ super.invalidate(); - LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index dcfa71239..b8ebaf4f4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -46,7 +46,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ int transmitted = 0; if(maxTransmit > 0){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj.provider.getDimension()); + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); if(network != null){ transmitted = this.transferEnergyToReceiverInNeed(blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); } From 1aa979195fd06c7078a7819ecb6aa5ef62963553 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 4 Jun 2016 23:43:50 +0200 Subject: [PATCH 221/322] Made network data not get filled up more than it should by clearing its connections when reading from NBT --- .../java/de/ellpeck/actuallyadditions/mod/data/WorldData.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 0e1273603..2d4ce8eab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -61,6 +61,8 @@ public class WorldData{ private void readFromNBT(NBTTagCompound compound){ //Laser World Data + this.laserRelayNetworks.clear(); + NBTTagList networkList = compound.getTagList("Networks", 10); for(int i = 0; i < networkList.tagCount(); i++){ Network network = LaserRelayConnectionHandler.readNetworkFromNBT(networkList.getCompoundTagAt(i)); From 6fd36259fcb081516f7549863c5695a95d49ec35 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 00:08:32 +0200 Subject: [PATCH 222/322] Try to save WorldData too when Chunks get unloaded as the stupid data loss bug is still a thing and it doesn't even make any sense --- .../de/ellpeck/actuallyadditions/mod/data/WorldData.java | 8 +++++--- .../actuallyadditions/mod/event/WorldLoadingEvents.java | 8 +++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 2d4ce8eab..3587b668f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -126,7 +126,7 @@ public class WorldData{ } } - public static void save(World world){ + public static void save(World world, boolean doMessage){ if(!world.isRemote){ WorldData data = worldData.get(world.provider.getDimension()); if(data != null && data.handler != null){ @@ -145,7 +145,9 @@ public class WorldData{ CompressedStreamTools.writeCompressed(compound, stream); stream.close(); - ModUtil.LOGGER.info("Saved WorldData for world "+data.dimension+"!"); + if(doMessage){ + ModUtil.LOGGER.info("Saved WorldData for world "+data.dimension+"!"); + } } } catch(Exception e){ @@ -160,7 +162,7 @@ public class WorldData{ public static void unload(World world){ if(!world.isRemote){ - save(world); + save(world, true); worldData.remove(world.provider.getDimension()); ModUtil.LOGGER.info("Unloading WorldData for world "+world.provider.getDimension()+"!"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index eb4e353db..660195306 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; +import net.minecraftforge.event.world.ChunkDataEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -30,7 +31,12 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onSave(WorldEvent.Save event){ - WorldData.save(event.getWorld()); + WorldData.save(event.getWorld(), true); + } + + @SubscribeEvent + public void onChunkUnload(ChunkDataEvent.Save event){ + WorldData.save(event.getWorld(), false); } } From 193bd806a3d338ef0676df960096d75e1eadcaa3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 00:24:10 +0200 Subject: [PATCH 223/322] Revert that, as it doesn't change anything --- .../de/ellpeck/actuallyadditions/mod/data/WorldData.java | 8 +++----- .../actuallyadditions/mod/event/WorldLoadingEvents.java | 8 +------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 3587b668f..2d4ce8eab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -126,7 +126,7 @@ public class WorldData{ } } - public static void save(World world, boolean doMessage){ + public static void save(World world){ if(!world.isRemote){ WorldData data = worldData.get(world.provider.getDimension()); if(data != null && data.handler != null){ @@ -145,9 +145,7 @@ public class WorldData{ CompressedStreamTools.writeCompressed(compound, stream); stream.close(); - if(doMessage){ - ModUtil.LOGGER.info("Saved WorldData for world "+data.dimension+"!"); - } + ModUtil.LOGGER.info("Saved WorldData for world "+data.dimension+"!"); } } catch(Exception e){ @@ -162,7 +160,7 @@ public class WorldData{ public static void unload(World world){ if(!world.isRemote){ - save(world, true); + save(world); worldData.remove(world.provider.getDimension()); ModUtil.LOGGER.info("Unloading WorldData for world "+world.provider.getDimension()+"!"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index 660195306..eb4e353db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; -import net.minecraftforge.event.world.ChunkDataEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -31,12 +30,7 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onSave(WorldEvent.Save event){ - WorldData.save(event.getWorld(), true); - } - - @SubscribeEvent - public void onChunkUnload(ChunkDataEvent.Save event){ - WorldData.save(event.getWorld(), false); + WorldData.save(event.getWorld()); } } From c5cf9ec90f8b2f6434fd984e4f8712c6d4ddfcf9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 02:16:52 +0200 Subject: [PATCH 224/322] Update to forge's new fluid system --- build.gradle | 2 +- .../mod/blocks/BlockCanolaPress.java | 2 +- .../mod/blocks/BlockCoffeeMachine.java | 2 +- .../mod/blocks/BlockFermentingBarrel.java | 2 +- .../mod/blocks/BlockFluidCollector.java | 2 +- .../mod/blocks/BlockOilGenerator.java | 2 +- .../mod/blocks/base/BlockContainerBase.java | 9 +- .../mod/tile/TileEntityBase.java | 24 +++++ .../mod/tile/TileEntityCanolaPress.java | 59 ++++-------- .../mod/tile/TileEntityCoffeeMachine.java | 51 ++++------- .../mod/tile/TileEntityFermentingBarrel.java | 76 +++++++--------- .../mod/tile/TileEntityFluidCollector.java | 66 ++++---------- .../mod/tile/TileEntityInventoryBase.java | 6 -- .../mod/tile/TileEntityOilGenerator.java | 50 ++++------ .../mod/tile/TileEntityPhantomItemface.java | 11 --- .../mod/tile/TileEntityPhantomLiquiface.java | 91 ++----------------- .../mod/tile/TileEntityPhantomface.java | 11 +++ .../actuallyadditions/mod/util/WorldUtil.java | 19 ++-- 18 files changed, 170 insertions(+), 315 deletions(-) diff --git a/build.gradle b/build.gradle index 1f5fda98c..5628c023b 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.9.4-12.17.0.1936-1.9.4" + version = "1.9.4-12.17.0.1951" runDir = "idea" mappings = "snapshot_20160519" diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java index 8c69d00f6..2b3634294 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCanolaPress.java @@ -47,7 +47,7 @@ public class BlockCanolaPress extends BlockContainerBase{ if(!world.isRemote){ TileEntityCanolaPress press = (TileEntityCanolaPress)world.getTileEntity(pos); if(press != null){ - if(this.checkFailUseItemOnTank(player, stack, side, press)){ + if(this.checkFailUseItemOnTank(player, stack, press.tank)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CANOLA_PRESS.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index 4e4937099..e56f93f2c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -70,7 +70,7 @@ public class BlockCoffeeMachine extends BlockContainerBase{ if(!world.isRemote){ TileEntityCoffeeMachine machine = (TileEntityCoffeeMachine)world.getTileEntity(pos); if(machine != null){ - if(this.checkFailUseItemOnTank(player, stack, f6, machine)){ + if(this.checkFailUseItemOnTank(player, stack, machine.tank)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.COFFEE_MACHINE.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java index 8aad2a9be..b945d1462 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFermentingBarrel.java @@ -53,7 +53,7 @@ public class BlockFermentingBarrel extends BlockContainerBase{ if(!world.isRemote){ TileEntityFermentingBarrel press = (TileEntityFermentingBarrel)world.getTileEntity(pos); if(press != null){ - if(this.checkFailUseItemOnTank(player, heldItem, par6, press)){ + if(this.checkFailUseItemOnTank(player, heldItem, press.canolaTank) && this.checkFailUseItemOnTank(player, heldItem, press.oilTank)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FERMENTING_BARREL.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 24ab39ac6..3045acc89 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -61,7 +61,7 @@ public class BlockFluidCollector extends BlockContainerBase{ if(!world.isRemote){ TileEntityFluidCollector collector = (TileEntityFluidCollector)world.getTileEntity(pos); if(collector != null){ - if(this.checkFailUseItemOnTank(player, stack, par6, collector)){ + if(this.checkFailUseItemOnTank(player, stack, collector.tank)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FLUID_COLLECTOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 2fccbe5b4..7b024c838 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -69,7 +69,7 @@ public class BlockOilGenerator extends BlockContainerBase{ if(!world.isRemote){ TileEntityOilGenerator generator = (TileEntityOilGenerator)world.getTileEntity(pos); if(generator != null){ - if(this.checkFailUseItemOnTank(player, stack, par6, generator)){ + if(this.checkFailUseItemOnTank(player, stack, generator.tank)){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.OIL_GENERATOR.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index e1d4b891b..22b1fa4b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -31,13 +31,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; -import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.fluids.*; import java.util.ArrayList; import java.util.Random; @@ -174,8 +171,8 @@ public abstract class BlockContainerBase extends BlockContainer{ } } - protected boolean checkFailUseItemOnTank(EntityPlayer player, ItemStack heldItem, EnumFacing sideHit, IFluidHandler tank){ - return heldItem == null || !FluidUtil.interactWithTank(heldItem, player, tank, sideHit); + protected boolean checkFailUseItemOnTank(EntityPlayer player, ItemStack heldItem, FluidTank tank){ + return heldItem == null || !FluidUtil.interactWithFluidHandler(heldItem, tank, player); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index b558ab98a..b7fd62f49 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -20,9 +20,13 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -195,4 +199,24 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } } } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing){ + return this.getCapability(capability, facing) != null; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing){ + if(capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY){ + IFluidHandler tank = this.getFluidHandler(facing); + if(tank != null){ + return (T)tank; + } + } + return super.getCapability(capability, facing); + } + + public IFluidHandler getFluidHandler(EnumFacing facing){ + return null; + } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 8b344dc72..ad038d9a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -24,13 +24,18 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IFluidHandler, IEnergySaver, IFluidSaver{ +public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IFluidSaver{ public static final int PRODUCE = 80; public static final int ENERGY_USE = 35; private static final int TIME = 30; public final EnergyStorage storage = new EnergyStorage(40000); - public final FluidTank tank = new FluidTank(2*Util.BUCKET); + public final FluidTank tank = new FluidTank(2*Util.BUCKET){ + @Override + public boolean canFill(){ + return false; + } + }; public int currentProcessTime; private int lastEnergyStored; private int lastTankAmount; @@ -88,7 +93,7 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE this.slots[0] = null; } - this.tank.fill(new FluidStack(InitFluids.fluidCanolaOil, PRODUCE), true); + this.tank.fillInternal(new FluidStack(InitFluids.fluidCanolaOil, PRODUCE), true); this.markDirty(); } } @@ -98,12 +103,12 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE } if(this.tank.getFluidAmount() > 0){ - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.tank); + WorldUtil.pushFluid(this, EnumFacing.DOWN); if(!this.isRedstonePowered){ - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.NORTH, this.tank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.EAST, this.tank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.SOUTH, this.tank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.WEST, this.tank); + WorldUtil.pushFluid(this, EnumFacing.NORTH); + WorldUtil.pushFluid(this, EnumFacing.EAST); + WorldUtil.pushFluid(this, EnumFacing.SOUTH); + WorldUtil.pushFluid(this, EnumFacing.WEST); } } @@ -154,39 +159,6 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE return true; } - @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill){ - return 0; - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ - if(resource.getFluid() == InitFluids.fluidCanolaOil){ - return this.tank.drain(resource.amount, doDrain); - } - return null; - } - - @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ - return this.tank.drain(maxDrain, doDrain); - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid){ - return false; - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid){ - return from != EnumFacing.UP; - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from){ - return new FluidTankInfo[]{this.tank.getInfo()}; - } - @Override public int getEnergy(){ return this.storage.getEnergyStored(); @@ -206,4 +178,9 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE public void setFluids(FluidStack[] fluids){ this.tank.setFluid(fluids[0]); } + + @Override + public FluidTank getFluidHandler(EnumFacing facing){ + return facing != EnumFacing.UP ? this.tank : null; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index b3c4ef906..3ca33582d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -29,7 +29,7 @@ import net.minecraftforge.fluids.*; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidSaver, IFluidHandler, IEnergySaver{ +public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidSaver, IEnergySaver{ public static final int SLOT_COFFEE_BEANS = 0; public static final int SLOT_INPUT = 1; @@ -40,7 +40,17 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements public static final int COFFEE_CACHE_MAX_AMOUNT = 300; private static final int TIME_USED = 500; public final EnergyStorage storage = new EnergyStorage(300000); - public final FluidTank tank = new FluidTank(4*Util.BUCKET); + public final FluidTank tank = new FluidTank(4*Util.BUCKET){ + @Override + public boolean canDrain(){ + return false; + } + + @Override + public boolean canFillFluidType(FluidStack fluid){ + return fluid.getFluid() == FluidRegistry.WATER; + } + }; public int coffeeCacheAmount; public int brewTime; private int lastEnergy; @@ -159,7 +169,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements this.slots[SLOT_INPUT] = null; } this.coffeeCacheAmount -= CACHE_USE; - this.tank.drain(WATER_USE, true); + this.tank.drainInternal(WATER_USE, true); } } } @@ -206,36 +216,6 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements return true; } - @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill){ - return resource.getFluid() == FluidRegistry.WATER && from != EnumFacing.DOWN ? this.tank.fill(resource, doFill) : 0; - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ - return null; - } - - @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ - return null; - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid){ - return true; - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid){ - return false; - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from){ - return new FluidTankInfo[]{this.tank.getInfo()}; - } - @Override public int getEnergy(){ return this.storage.getEnergyStored(); @@ -255,4 +235,9 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements public void setFluids(FluidStack[] fluids){ this.tank.setFluid(fluids[0]); } + + @Override + public FluidTank getFluidHandler(EnumFacing facing){ + return facing != EnumFacing.DOWN ? this.tank : null; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index ee0908707..84e15a7fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -16,14 +16,32 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidHandlerFluidMap; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFermentingBarrel extends TileEntityBase implements IFluidHandler, IFluidSaver{ +public class TileEntityFermentingBarrel extends TileEntityBase implements IFluidSaver{ private static final int PROCESS_TIME = 100; - public final FluidTank canolaTank = new FluidTank(2*Util.BUCKET); - public final FluidTank oilTank = new FluidTank(2*Util.BUCKET); + public final FluidTank canolaTank = new FluidTank(2*Util.BUCKET){ + @Override + public boolean canDrain(){ + return false; + } + + @Override + public boolean canFillFluidType(FluidStack fluid){ + return fluid.getFluid() == InitFluids.fluidCanolaOil; + } + }; + public final FluidTank oilTank = new FluidTank(2*Util.BUCKET){ + @Override + public boolean canFill(){ + return false; + } + }; public int currentProcessTime; private int lastCanola; private int lastOil; @@ -62,8 +80,8 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid if(this.currentProcessTime >= PROCESS_TIME){ this.currentProcessTime = 0; - this.oilTank.fill(new FluidStack(InitFluids.fluidOil, produce), true); - this.canolaTank.drain(produce, true); + this.oilTank.fillInternal(new FluidStack(InitFluids.fluidOil, produce), true); + this.canolaTank.drainInternal(produce, true); this.markDirty(); } } @@ -72,12 +90,12 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid } if(this.oilTank.getFluidAmount() > 0){ - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.oilTank); + WorldUtil.pushFluid(this, EnumFacing.DOWN); if(!this.isRedstonePowered){ - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.NORTH, this.oilTank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.EAST, this.oilTank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.SOUTH, this.oilTank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.WEST, this.oilTank); + WorldUtil.pushFluid(this, EnumFacing.NORTH); + WorldUtil.pushFluid(this, EnumFacing.EAST); + WorldUtil.pushFluid(this, EnumFacing.SOUTH); + WorldUtil.pushFluid(this, EnumFacing.WEST); } } @@ -105,39 +123,15 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid } @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill){ - if(from != EnumFacing.DOWN && resource.getFluid() == InitFluids.fluidCanolaOil){ - return this.canolaTank.fill(resource, doFill); + public IFluidHandler getFluidHandler(EnumFacing facing){ + FluidHandlerFluidMap map = new FluidHandlerFluidMap(); + if(facing != EnumFacing.DOWN){ + map.addHandler(InitFluids.fluidCanolaOil, this.canolaTank); } - return 0; - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ - if(resource.getFluid() == InitFluids.fluidOil){ - return this.oilTank.drain(resource.amount, doDrain); + if(facing != EnumFacing.UP){ + map.addHandler(InitFluids.fluidOil, this.oilTank); } - return null; - } - - @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ - return this.oilTank.drain(maxDrain, doDrain); - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid){ - return from != EnumFacing.DOWN && fluid == InitFluids.fluidCanolaOil; - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid){ - return from != EnumFacing.UP && fluid == InitFluids.fluidOil; - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from){ - return new FluidTankInfo[]{this.canolaTank.getInfo(), this.oilTank.getInfo()}; + return map; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 2b14f652d..fa81a5de0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -21,10 +21,12 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFluidCollector extends TileEntityBase implements IFluidHandler, IFluidSaver, IRedstoneToggle{ +public class TileEntityFluidCollector extends TileEntityBase implements IFluidSaver, IRedstoneToggle{ public final FluidTank tank = new FluidTank(8*Util.BUCKET); public boolean isPlacer; @@ -63,20 +65,20 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, this.worldObj) == 0 && Util.BUCKET <= this.tank.getCapacity()-this.tank.getFluidAmount()){ if(blockToBreak instanceof IFluidBlock && ((IFluidBlock)blockToBreak).getFluid() != null){ - if(this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), false) >= Util.BUCKET){ - this.tank.fill(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), true); + if(this.tank.fillInternal(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fillInternal(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), true); WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } else if(blockToBreak == Blocks.LAVA || blockToBreak == Blocks.FLOWING_LAVA){ - if(this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), false) >= Util.BUCKET){ - this.tank.fill(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), true); + if(this.tank.fillInternal(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fillInternal(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), true); WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } else if(blockToBreak == Blocks.WATER || blockToBreak == Blocks.FLOWING_WATER){ - if(this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), false) >= Util.BUCKET){ - this.tank.fill(new FluidStack(FluidRegistry.WATER, Util.BUCKET), true); + if(this.tank.fillInternal(new FluidStack(FluidRegistry.WATER, Util.BUCKET), false) >= Util.BUCKET){ + this.tank.fillInternal(new FluidStack(FluidRegistry.WATER, Util.BUCKET), true); WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); } } @@ -90,7 +92,7 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa boolean placeable = !(blockPresent instanceof BlockLiquid) && !(blockPresent instanceof IFluidBlock) && blockPresent.isReplaceable(this.worldObj, offsetPos); if(placeable){ PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); - this.tank.drain(Util.BUCKET, true); + this.tank.drainInternal(Util.BUCKET, true); } } } @@ -98,42 +100,8 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa } @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill){ - if(this.isPlacer){ - return this.tank.fill(resource, doFill); - } - return 0; - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ - if(!this.isPlacer){ - return this.tank.drain(resource.amount, doDrain); - } - return null; - } - - @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ - if(!this.isPlacer){ - return this.tank.drain(maxDrain, doDrain); - } - return null; - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid){ - return this.isPlacer; - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid){ - return !this.isPlacer; - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from){ - return new FluidTankInfo[]{this.tank.getInfo()}; + public IFluidHandler getFluidHandler(EnumFacing facing){ + return this.tank; } @Override @@ -168,12 +136,12 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidHa } if(!this.isPlacer && this.tank.getFluidAmount() > 0){ - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.DOWN, this.tank); + WorldUtil.pushFluid(this, EnumFacing.DOWN); if(!this.isRedstonePowered){ - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.NORTH, this.tank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.EAST, this.tank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.SOUTH, this.tank); - WorldUtil.pushFluid(this.worldObj, this.pos, EnumFacing.WEST, this.tank); + WorldUtil.pushFluid(this, EnumFacing.NORTH); + WorldUtil.pushFluid(this, EnumFacing.EAST); + WorldUtil.pushFluid(this, EnumFacing.SOUTH); + WorldUtil.pushFluid(this, EnumFacing.WEST); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 8e5a95920..4e1a7b651 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -217,12 +217,6 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return new TextComponentTranslation(this.getName()); } - @Override - public boolean hasCapability(Capability capability, EnumFacing facing){ - return this.getCapability(capability, facing) != null; - } - - @Override public T getCapability(Capability capability, EnumFacing facing){ if(this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index dd286435b..79f8ad2a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -19,15 +19,27 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityOilGenerator extends TileEntityBase implements IEnergyProvider, IFluidHandler, IEnergySaver, IFluidSaver{ +public class TileEntityOilGenerator extends TileEntityBase implements IEnergyProvider, IEnergySaver, IFluidSaver{ public static final int ENERGY_PRODUCED = 76; private static final int BURN_TIME = 100; public final EnergyStorage storage = new EnergyStorage(50000); - public final FluidTank tank = new FluidTank(2*Util.BUCKET); + public final FluidTank tank = new FluidTank(2*Util.BUCKET){ + @Override + public boolean canDrain(){ + return false; + } + + @Override + public boolean canFillFluidType(FluidStack fluid){ + return fluid.getFluid() == InitFluids.fluidOil; + } + }; public int currentBurnTime; private int lastEnergy; private int lastTank; @@ -84,7 +96,7 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro if(ENERGY_PRODUCED*BURN_TIME <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored()){ if(this.currentBurnTime <= 0 && this.tank.getFluidAmount() >= fuelUsed){ this.currentBurnTime = BURN_TIME; - this.tank.drain(fuelUsed, true); + this.tank.drainInternal(fuelUsed, true); } } @@ -134,36 +146,8 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro } @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill){ - if(resource.getFluid() == InitFluids.fluidOil){ - return this.tank.fill(resource, doFill); - } - return 0; - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ - return null; - } - - @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ - return null; - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid){ - return from != EnumFacing.DOWN && fluid == InitFluids.fluidOil; - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid){ - return false; - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from){ - return new FluidTankInfo[]{this.tank.getInfo()}; + public IFluidHandler getFluidHandler(EnumFacing facing){ + return facing != EnumFacing.DOWN ? this.tank : null; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 2760acf80..28cce178d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -119,15 +119,4 @@ public class TileEntityPhantomItemface extends TileEntityPhantomface{ public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return this.isBoundThingInRange() && (this.getSided() == null || this.getSided().canExtractItem(slot, stack, side)); } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing){ - return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).hasCapability(capability, facing) : super.hasCapability(capability, facing); - } - - - @Override - public T getCapability(Capability capability, EnumFacing facing){ - return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).getCapability(capability, facing) : super.getCapability(capability, facing); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index 85236a0f3..d3ae7d974 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -14,12 +14,11 @@ import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; -public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements IFluidHandler{ +public class TileEntityPhantomLiquiface extends TileEntityPhantomface{ public TileEntityPhantomLiquiface(){ super("liquiface"); @@ -31,41 +30,9 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements super.updateEntity(); if(!this.worldObj.isRemote){ - if(this.isRedstonePowered && this.isBoundThingInRange() && this.getHandler() != null){ - this.pushFluid(EnumFacing.UP); - this.pushFluid(EnumFacing.DOWN); - this.pushFluid(EnumFacing.NORTH); - this.pushFluid(EnumFacing.EAST); - this.pushFluid(EnumFacing.SOUTH); - this.pushFluid(EnumFacing.WEST); - } - } - } - - public IFluidHandler getHandler(){ - if(this.boundPosition != null){ - TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); - if(tile instanceof IFluidHandler){ - return (IFluidHandler)tile; - } - } - return null; - } - - private void pushFluid(EnumFacing side){ - TileEntity tile = WorldUtil.getTileEntityFromSide(side, this.worldObj, this.pos); - if(tile != null && tile instanceof IFluidHandler && this.getTankInfo(side) != null && this.getTankInfo(side).length > 0 && ((IFluidHandler)tile).getTankInfo(side.getOpposite()) != null && ((IFluidHandler)tile).getTankInfo(side.getOpposite()).length > 0){ - for(FluidTankInfo myInfo : this.getTankInfo(side)){ - for(FluidTankInfo hisInfo : ((IFluidHandler)tile).getTankInfo(side.getOpposite())){ - if(myInfo != null && hisInfo != null && myInfo.fluid != null && myInfo.fluid.getFluid() != null){ - if(((IFluidHandler)tile).canFill(side.getOpposite(), myInfo.fluid.getFluid()) && this.canDrain(side, myInfo.fluid.getFluid())){ - FluidStack receive = this.drain(side, Math.min(hisInfo.capacity-(hisInfo.fluid == null ? 0 : hisInfo.fluid.amount), myInfo.fluid.amount), false); - if(receive != null){ - int actualReceive = ((IFluidHandler)tile).fill(side.getOpposite(), receive, true); - this.drain(side, new FluidStack(receive.getFluid(), actualReceive), true); - } - } - } + if(this.isRedstonePowered && this.isBoundThingInRange()){ + for(EnumFacing side : EnumFacing.values()){ + WorldUtil.pushFluid(this, side); } } } @@ -73,48 +40,6 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements @Override public boolean isBoundThingInRange(){ - return super.isBoundThingInRange() && this.worldObj.getTileEntity(this.boundPosition) instanceof IFluidHandler; - } - - @Override - public int fill(EnumFacing from, FluidStack resource, boolean doFill){ - if(this.isBoundThingInRange()){ - return this.getHandler().fill(from, resource, doFill); - } - return 0; - } - - @Override - public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ - if(this.isBoundThingInRange()){ - return this.getHandler().drain(from, resource, doDrain); - } - return null; - } - - @Override - public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ - if(this.isBoundThingInRange()){ - return this.getHandler().drain(from, maxDrain, doDrain); - } - return null; - } - - @Override - public boolean canFill(EnumFacing from, Fluid fluid){ - return this.isBoundThingInRange() && this.getHandler().canFill(from, fluid); - } - - @Override - public boolean canDrain(EnumFacing from, Fluid fluid){ - return this.isBoundThingInRange() && this.getHandler().canDrain(from, fluid); - } - - @Override - public FluidTankInfo[] getTankInfo(EnumFacing from){ - if(this.isBoundThingInRange()){ - return this.getHandler().getTankInfo(from); - } - return new FluidTankInfo[0]; + return super.isBoundThingInRange() && this.worldObj.getTileEntity(this.boundPosition).hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 3192446ba..1a9acceaa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -23,6 +23,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -190,4 +191,14 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP public boolean hasInvWrapperCapabilities(){ return false; } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing){ + return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).hasCapability(capability, facing) : super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing){ + return this.isBoundThingInRange() ? this.worldObj.getTileEntity(this.boundPosition).getCapability(capability, facing) : super.getCapability(capability, facing); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 2ac1f16bb..aee0107f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -40,6 +40,8 @@ import net.minecraft.world.WorldServer; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IPlantable; import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.capability.IFluidHandler; import java.util.ArrayList; import java.util.List; @@ -100,12 +102,17 @@ public class WorldUtil{ return true; } - public static void pushFluid(World world, BlockPos pos, EnumFacing side, FluidTank tank){ - TileEntity tile = getTileEntityFromSide(side, world, pos); - if(tile != null && tank.getFluid() != null && tile instanceof IFluidHandler){ - if(((IFluidHandler)tile).canFill(side.getOpposite(), tank.getFluid().getFluid())){ - int receive = ((IFluidHandler)tile).fill(side.getOpposite(), tank.getFluid(), true); - tank.drain(receive, true); + public static void pushFluid(TileEntity tileFrom, EnumFacing side){ + TileEntity tileTo = getTileEntityFromSide(side, tileFrom.getWorld(), tileFrom.getPos()); + if(tileTo != null){ + IFluidHandler handlerFrom = tileFrom.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + IFluidHandler handlerTo = tileTo.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side.getOpposite()); + if(handlerFrom != null && handlerTo != null){ + FluidStack drain = handlerFrom.drain(Integer.MAX_VALUE, false); + if(drain != null){ + int filled = handlerTo.fill(drain.copy(), true); + handlerFrom.drain(filled, true); + } } } } From ee0165257479c894e25007c8a264d0dfa6e19816 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 02:31:37 +0200 Subject: [PATCH 225/322] Make all the directories! \o/ --- .../de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java | 1 + .../java/de/ellpeck/actuallyadditions/mod/data/WorldData.java | 3 +-- .../de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java index 09e2c72c2..e46e24343 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java @@ -78,6 +78,7 @@ public class ExtraClientData{ public static File getTheFile(){ try{ if(!theFile.exists()){ + theFile.mkdirs(); theFile.createNewFile(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 2d4ce8eab..2c613028c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -135,6 +135,7 @@ public class WorldData{ if(dataFile != null){ if(!dataFile.exists()){ + dataFile.mkdirs(); dataFile.createNewFile(); ModUtil.LOGGER.info("Creating new WorldData file for world "+data.dimension+"!"); } @@ -144,8 +145,6 @@ public class WorldData{ FileOutputStream stream = new FileOutputStream(dataFile); CompressedStreamTools.writeCompressed(compound, stream); stream.close(); - - ModUtil.LOGGER.info("Saved WorldData for world "+data.dimension+"!"); } } catch(Exception e){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index cd94833db..694dbf949 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -94,6 +94,7 @@ public class ClientProxy implements IProxy{ if(ConfigBoolValues.BOOKLET_TEXT_TO_FILE.isEnabled()){ File file = new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"booklettext.txt"); try{ + file.mkdirs(); file.createNewFile(); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(TextFormatting.getTextWithoutFormattingCodes(bookletText)); From f576d58204ade1d0bebd94853d692d77bc44eb25 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 03:02:10 +0200 Subject: [PATCH 226/322] Removed a possible memory leak source --- .../java/de/ellpeck/actuallyadditions/mod/data/WorldData.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 2c613028c..5ae837b48 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -159,8 +159,6 @@ public class WorldData{ public static void unload(World world){ if(!world.isRemote){ - save(world); - worldData.remove(world.provider.getDimension()); ModUtil.LOGGER.info("Unloading WorldData for world "+world.provider.getDimension()+"!"); } From d66b53af9ad955cfd8cc25a3ced9b3605c2212f7 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 04:05:37 +0200 Subject: [PATCH 227/322] Added Player Interface --- .../mod/blocks/BlockPlayerInterface.java | 59 +++++ .../mod/blocks/InitBlocks.java | 2 + .../mod/creative/CreativeTab.java | 1 + .../mod/tile/TileEntityBase.java | 1 + .../mod/tile/TileEntityPlayerInterface.java | 210 ++++++++++++++++++ .../blockstates/blockPlayerInterface.json | 14 ++ .../assets/actuallyadditions/lang/en_US.lang | 1 + .../textures/blocks/blockPlayerInterface.png | Bin 0 -> 885 bytes 8 files changed, 288 insertions(+) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockPlayerInterface.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockPlayerInterface.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java new file mode 100644 index 000000000..d39395801 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java @@ -0,0 +1,59 @@ +/* + * This file ("BlockPlayerInterface.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks; + +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockPlayerInterface extends BlockContainerBase{ + + public BlockPlayerInterface(String name){ + super(Material.ROCK, name); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(4.5F); + this.setResistance(10.0F); + this.setSoundType(SoundType.STONE); + } + + @Override + public TileEntity createNewTileEntity(World world, int par2){ + return new TileEntityPlayerInterface(); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.EPIC; + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ + TileEntity tile = world.getTileEntity(pos); + if(tile != null && tile instanceof TileEntityPlayerInterface){ + TileEntityPlayerInterface face = (TileEntityPlayerInterface)tile; + if(face.connectedPlayer == null){ + face.connectedPlayer = player.getUniqueID(); + face.markDirty(); + } + } + + super.onBlockPlacedBy(world, pos, state, player, stack); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 988f14133..4aac311cd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -57,6 +57,7 @@ public class InitBlocks{ public static Block blockPhantomLiquiface; public static Block blockPhantomEnergyface; public static Block blockPhantomRedstoneface; + public static Block blockPlayerInterface; public static Block blockFluidPlacer; public static Block blockFluidCollector; @@ -119,6 +120,7 @@ public class InitBlocks{ public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface"); blockBookletStand = new BlockBookletStand("blockBookletStand"); blockItemViewer = new BlockItemViewer("blockItemViewer"); blockFireworkBox = new BlockFireworkBox("blockFireworkBox"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index c0437ddf0..527ade046 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -67,6 +67,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockPhantomRedstoneface); this.add(InitBlocks.blockPhantomPlacer); this.add(InitBlocks.blockPhantomBreaker); + this.add(InitBlocks.blockPlayerInterface); this.add(InitBlocks.blockInputter); this.add(InitBlocks.blockInputterAdvanced); this.add(InitBlocks.blockPhantomBooster); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index b7fd62f49..56bd2cc4d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -67,6 +67,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityPhantomItemface.class, ModUtil.MOD_ID+":tileEntityPhantomItemface"); GameRegistry.registerTileEntity(TileEntityPhantomLiquiface.class, ModUtil.MOD_ID+":tileEntityPhantomLiquiface"); GameRegistry.registerTileEntity(TileEntityPhantomEnergyface.class, ModUtil.MOD_ID+":tileEntityPhantomEnergyface"); + GameRegistry.registerTileEntity(TileEntityPlayerInterface.class, ModUtil.MOD_ID+":tileEntityPlayerInterface"); GameRegistry.registerTileEntity(TileEntityPhantomPlacer.class, ModUtil.MOD_ID+":tileEntityPhantomPlacer"); GameRegistry.registerTileEntity(TileEntityPhantomBreaker.class, ModUtil.MOD_ID+":tileEntityPhantomBreaker"); GameRegistry.registerTileEntity(TileEntityFluidCollector.class, ModUtil.MOD_ID+":tileEntityFluidCollector"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java new file mode 100644 index 000000000..b374d536f --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -0,0 +1,210 @@ +/* + * This file ("TileEntityPlayerInterface.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyContainerItem; +import cofh.api.energy.IEnergyReceiver; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +import java.util.UUID; + +public class TileEntityPlayerInterface extends TileEntityInventoryBase implements IEnergyReceiver{ + + public static final int DEFAULT_RANGE = 32; + + private EnergyStorage storage = new EnergyStorage(30000); + private int range; + public UUID connectedPlayer; + + public TileEntityPlayerInterface(){ + super(0, "playerInterface"); + } + + private EntityPlayer getPlayer(){ + if(this.connectedPlayer != null){ + EntityPlayer player = this.worldObj.getPlayerEntityByUUID(this.connectedPlayer); + if(player != null){ + if(player.getDistance(this.pos.getX(), this.pos.getY(), this.pos.getZ()) <= this.range){ + return player; + } + } + } + return null; + } + + @Override + public void updateEntity(){ + super.updateEntity(); + if(!this.worldObj.isRemote){ + boolean changed = false; + + this.range = TileEntityPhantomface.upgradeRange(DEFAULT_RANGE, this.worldObj, this.pos); + + EntityPlayer player = this.getPlayer(); + if(player != null){ + for(int i = 0; i < player.inventory.getSizeInventory(); i++){ + if(this.storage.getEnergyStored() > 0){ + ItemStack slot = player.inventory.getStackInSlot(i); + if(slot != null && slot.getItem() instanceof IEnergyContainerItem){ + int received = ((IEnergyContainerItem)slot.getItem()).receiveEnergy(slot, this.storage.getEnergyStored(), false); + this.storage.extractEnergy(received, false); + changed = true; + } + } + else{ + break; + } + } + } + + if(changed){ + this.markDirty(); + this.sendUpdate(); + } + } + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + this.storage.writeToNBT(compound); + if(this.connectedPlayer != null){ + compound.setUniqueId("Player", this.connectedPlayer); + } + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + this.storage.readFromNBT(compound); + if(compound.hasKey("PlayerLeast")){ + this.connectedPlayer = compound.getUniqueId("Player"); + } + } + + @Override + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ + return this.storage.receiveEnergy(maxReceive, simulate); + } + + @Override + public int getEnergyStored(EnumFacing from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(EnumFacing from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(EnumFacing from){ + return true; + } + + @Override + public int[] getSlotsForFace(EnumFacing side){ + if(this.getPlayer() != null){ + int[] theInt = new int[this.getSizeInventory()]; + for(int i = 0; i < theInt.length; i++){ + theInt[i] = i; + } + return theInt; + } + return new int[0]; + } + + @Override + public int getInventoryStackLimit(){ + EntityPlayer player = this.getPlayer(); + return player != null ? player.inventory.getInventoryStackLimit() : 0; + } + + @Override + public void clear(){ + EntityPlayer player = this.getPlayer(); + if(player != null){ + player.inventory.clear(); + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack){ + EntityPlayer player = this.getPlayer(); + if(player != null){ + player.inventory.setInventorySlotContents(i, stack); + } + } + + @Override + public int getSizeInventory(){ + EntityPlayer player = this.getPlayer(); + if(player != null){ + return player.inventory.getSizeInventory(); + } + else{ + return 0; + } + } + + @Override + public ItemStack getStackInSlot(int i){ + EntityPlayer player = this.getPlayer(); + if(player != null){ + return player.inventory.getStackInSlot(i); + } + else{ + return null; + } + } + + @Override + public ItemStack decrStackSize(int i, int j){ + EntityPlayer player = this.getPlayer(); + if(player != null){ + ItemStack stack = player.inventory.decrStackSize(i, j); + if(stack != null){ + return stack; + } + } + return null; + } + + @Override + public ItemStack removeStackFromSlot(int index){ + EntityPlayer player = this.getPlayer(); + if(player != null){ + ItemStack stack = player.inventory.removeStackFromSlot(index); + if(stack != null){ + return stack; + } + } + return null; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + EntityPlayer player = this.getPlayer(); + return player != null && player.inventory.isItemValidForSlot(i, stack); + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side){ + return this.isItemValidForSlot(slot, stack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ + return true; + } +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockPlayerInterface.json b/src/main/resources/assets/actuallyadditions/blockstates/blockPlayerInterface.json new file mode 100644 index 000000000..820340e7c --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockPlayerInterface.json @@ -0,0 +1,14 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_all", + "textures": { + "all": "actuallyadditions:blocks/blockPlayerInterface" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index f52aea55b..48056dab1 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -141,6 +141,7 @@ tile.actuallyadditions.blockColoredLampPink.name=Pink Lamp tile.actuallyadditions.blockColoredLampCyan.name=Cyan Lamp tile.actuallyadditions.blockColoredLampPurple.name=Purple Lamp tile.actuallyadditions.blockPhantomface.name=Phantomface +tile.actuallyadditions.blockPlayerInterface.name=Player Interface tile.actuallyadditions.blockPhantomEnergyface.name=Phantom Energyface tile.actuallyadditions.blockPhantomRedstoneface.name=Phantom Redstoneface tile.actuallyadditions.blockPhantomLiquiface.name=Phantom Liquiface diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockPlayerInterface.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockPlayerInterface.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4c30f250aa8a8821be89b533b162bb08ec3c61 GIT binary patch literal 885 zcmV-*1B(2KP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Ra1sxL; zEq{LmrT_o{7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M`(@8`@R5(vn zli5quQ547TLz$(sy5^cXijC%86s{;u3o=G(RD`9{qB#ab6l9hy4@qEAXk=p#6{Iz` z>zIRkifvXl27^Ssxb#qz|G>9%?r#R_2j97eJNJCnd{@F#K15V>oT z7EjvJ@aS4H9PJqxxu1;>{o677W*6q&mH0h>6ibWs`1QR8b2F9rGF(cK}_ z4ByMa<5q%PUkAs{42&|w>4j9`&q5uR7A*Mr?Fi;v2O#{o3WA7es=%njyJsd0-pxVk z8WobFR7j21Ad&9F5bBErx)Yu=Myd$JkQxXTCF{6?a5`gx2CktJyd?-P^eWS!L!nWR zd}9!jqtp_}0IozP>-i4&lHycwPnO{`K{&Cuxefy@R!p=tVc@cr;^VNN*o&-qJr-uG zvGk+Lx_utCUKJ>-M2&Kz8=C_>x*0-P*d|DUc@)&1w_;|r1a30Yw6hqK_Cmb8y%C))MhOw|Y;^|k5vYQ)ZEBo3 z7>W*p^pTy%ALikslOa2(JLUM)uR!`bHlV8|NqIADLfKFGP{>(okGv+~Hm#;}M$mbq zspJ@y^2p*TIackt18yTjI6*#DPwZ*0gmAl9p`>uyl}l%EpfCOc3asFuq$ro%00000 LNkvXXu0mjfLN16p literal 0 HcmV?d00001 From b65f0a7c76ebbdc996bdaf9dc4f7353c6ec911aa Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 04:34:01 +0200 Subject: [PATCH 228/322] Player Interface recipe and doc --- .../actuallyadditions/mod/booklet/InitBooklet.java | 2 ++ .../mod/config/values/ConfigCrafting.java | 1 + .../mod/crafting/BlockCrafting.java | 12 ++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 5 ++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index ffc0cd70b..7d313a51a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; @@ -118,6 +119,7 @@ public class InitBooklet{ new BookletChapter("energizer", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockEnergizer), new PageCrafting(1, BlockCrafting.recipeEnergizer), new PageCrafting(2, BlockCrafting.recipeEnervator)); new BookletChapter("repairer", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockItemRepairer), new PageCrafting(1, BlockCrafting.recipeRepairer).addTextReplacement("", TileEntityItemRepairer.ENERGY_USE)); new BookletChapter("longRangeBreaker", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockDirectionalBreaker), new PageTextOnly(1).addTextReplacement("", TileEntityDirectionalBreaker.ENERGY_USE).addTextReplacement("", TileEntityDirectionalBreaker.RANGE), new PageCrafting(2, BlockCrafting.recipeDirectionalBreaker).setPageStacksWildcard()); + new BookletChapter("playerInterface", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockPlayerInterface), new PageTextOnly(1).addTextReplacement("", TileEntityPlayerInterface.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipePlayerInterface).setNoText()).setSpecial(); //RF Generating Blocks new BookletChapter("solarPanel", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFurnaceSolar), new PageTextOnly(1).addTextReplacement("", TileEntityFurnaceSolar.PRODUCE), new PageCrafting(2, BlockCrafting.recipeSolar).setNoText()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index 47bc54091..6e730e6a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -97,6 +97,7 @@ public enum ConfigCrafting{ OIL_GENERATOR("Oil Generator", ConfigCategories.BLOCKS_CRAFTING), PHANTOMFACE("Phantomface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_CONNECTOR("Phantom Connector", ConfigCategories.ITEMS_CRAFTING), + PLAYER_INTERFACE("Player Interface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_ENERGYFACE("Phantom Energyface", ConfigCategories.BLOCKS_CRAFTING), PHANTOM_REDSTONEFACE("Phantom Redstoneface", ConfigCategories.BLOCKS_CRAFTING), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 8f571bfe9..ea61c1188 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -86,6 +86,7 @@ public class BlockCrafting{ public static IRecipe recipeLaserRelayItemWhitelist; public static IRecipe recipeItemInterface; public static IRecipe recipeBookStand; + public static IRecipe recipePlayerInterface; public static void init(){ @@ -399,6 +400,17 @@ public class BlockCrafting{ recipePhantomface = RecipeUtil.lastIRecipe(); } + //Player Interface + if(ConfigCrafting.PLAYER_INTERFACE.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockPlayerInterface), + " C ", "EBE", " S ", + 'E', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), + 'C', new ItemStack(Items.SKULL, 1, 1), + 'S', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), + 'B', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ENDER_CASING.ordinal()))); + recipePlayerInterface = RecipeUtil.lastIRecipe(); + } + //Phantom Placer if(ConfigCrafting.PHANTOM_PLACER.isEnabled()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitBlocks.blockPhantomPlacer), diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 48056dab1..47948f748 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -886,4 +886,7 @@ booklet.actuallyadditions.chapter.bookStand.text.1=The Manual Stand is booklet.actuallyadditions.chapter.bookStand.text.2=People were using this not to have to have a manual item on their hotbar. This is not supposed to be used for that, because the Actually Additions Manual has bookmarks and also keeps the page you were on before. This, however, does neither. This was also originally made for Better Than Minecon. But whatever. booklet.actuallyadditions.chapter.waterBowl.name=Bowl of Water -booklet.actuallyadditions.chapter.waterBowl.text.1=The Bowl of Water can be obtained by right-cliking a bowl on water anywhere in the world. When the Bowl of Water is then right-clicked onto a block, the water will be placed, much like a Bucket. This can be used, for example, for early game farms. \ No newline at end of file +booklet.actuallyadditions.chapter.waterBowl.text.1=The Bowl of Water can be obtained by right-cliking a bowl on water anywhere in the world. When the Bowl of Water is then right-clicked onto a block, the water will be placed, much like a Bucket. This can be used, for example, for early game farms. + +booklet.actuallyadditions.chapter.playerInterface.name=Player Interface +booklet.actuallyadditions.chapter.playerInterface.text.1=The Player Interface works in a similar way to the Phantomface, except it is connected to a player instead of a block, and the connection is established by placing it down. When inputting items, they will move to the player's inventory. Also, when inputting RF, it will charge the items in the player's inventory. It has a default range of blocks, however, it can be expanded by placing up to 3 Phantom Boosters on top of it. \ No newline at end of file From 707f71d7e320a822727e1e02726559870e46fa68 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 12:15:02 +0200 Subject: [PATCH 229/322] Fixed configs resetting randomly. Closes #107 --- .../mod/config/ConfigCategories.java | 7 ++- .../mod/config/ConfigValues.java | 56 +++++-------------- .../mod/config/ConfigurationHandler.java | 12 ++-- .../mod/config/values/ConfigBoolValues.java | 6 +- .../config/values/ConfigIntListValues.java | 38 +++++++++++++ .../config/values/ConfigStringListValues.java | 44 +++++++++++++++ .../mod/crafting/ItemCrafting.java | 3 +- .../mod/event/WorldDecorationEvent.java | 3 +- .../actuallyadditions/mod/gen/OreGen.java | 3 +- .../mod/items/ItemAllToolAA.java | 3 +- .../mod/items/ItemChestToCrateUpgrade.java | 3 +- .../mod/items/ItemDrill.java | 3 +- .../mod/items/ItemLeafBlower.java | 5 +- .../mod/items/ItemSpawnerChanger.java | 3 +- .../mod/misc/MethodHandler.java | 3 +- .../mod/recipe/CrusherRecipeRegistry.java | 3 +- .../tile/TileEntityAtomicReconstructor.java | 5 +- .../mod/tile/TileEntityBreaker.java | 3 +- .../mod/tile/TileEntityCoffeeMachine.java | 3 +- .../tile/TileEntityDirectionalBreaker.java | 3 +- .../mod/tile/TileEntityGrinder.java | 3 +- .../mod/tile/TileEntityItemRepairer.java | 3 +- .../mod/tile/TileEntityLaserRelay.java | 5 +- .../mod/tile/TileEntityLeafGenerator.java | 5 +- .../mod/tile/TileEntityMiner.java | 10 ++-- .../mod/tile/TileEntityPhantomPlacer.java | 3 +- 26 files changed, 158 insertions(+), 80 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntListValues.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java index 70349d8ef..c55ac2dce 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigCategories.java @@ -10,9 +10,11 @@ package de.ellpeck.actuallyadditions.mod.config; +import java.util.Locale; + public enum ConfigCategories{ - PERFORMANCE("PERFORMANCE", "Performance Settings"), + PERFORMANCE("Performance", "Performance Settings"), FOOD_CRAFTING("Food Crafting", "Crafting Recipes for Food Items"), BLOCKS_CRAFTING("Block Crafting", "Crafting Recipes for Blocks"), ITEMS_CRAFTING("Item Crafting", "Crafting Recipes for Items"), @@ -21,14 +23,13 @@ public enum ConfigCategories{ MOB_DROPS("Mob Drops", "Everything regarding Item drops from mobs"), WORLD_GEN("World Gen", "Everything regarding World Generation"), POTION_RING_CRAFTING("Ring Crafting", "Crafting Recipes for Rings"), - FLUIDS("Fluids", "Everything regarding fluids"), OTHER("Other", "Everything else"); public final String name; public final String comment; ConfigCategories(String name, String comment){ - this.name = name; + this.name = name.toLowerCase(Locale.ROOT); this.comment = comment; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index e9cefce3d..193a979fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -10,62 +10,32 @@ package de.ellpeck.actuallyadditions.mod.config; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; +import de.ellpeck.actuallyadditions.mod.config.values.*; import net.minecraftforge.common.config.Configuration; public class ConfigValues{ - public static final ConfigCrafting[] CRAFTING_CONFIG = ConfigCrafting.values(); - public static final ConfigIntValues[] INT_CONFIG = ConfigIntValues.values(); - public static final ConfigBoolValues[] BOOL_CONFIG = ConfigBoolValues.values(); - - public static String[] crusherRecipeExceptions; - public static String[] mashedFoodCraftingExceptions; - - public static String[] paxelExtraMiningWhitelist; - public static String[] drillExtraMiningWhitelist; - - public static int[] oreGenDimensionBlacklist; - public static int[] plantDimensionBlacklist; - - public static String[] minerExtraWhitelist; - public static String[] minerBlacklist; - - public static String[] repairerExtraWhitelist; - - public static String[] spawnerChangerBlacklist; - - public static boolean lessSound; - public static boolean lessParticles; - public static boolean lessBlockBreakingEffects; - public static void defineConfigValues(Configuration config){ - for(ConfigCrafting currConf : CRAFTING_CONFIG){ + for(ConfigCrafting currConf : ConfigCrafting.values()){ currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, "If the Recipe for the "+currConf.name+" is Enabled").getBoolean(); } - for(ConfigIntValues currConf : INT_CONFIG){ + + for(ConfigIntValues currConf : ConfigIntValues.values()){ currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, currConf.desc, currConf.min, currConf.max).getInt(); } - for(ConfigBoolValues currConf : BOOL_CONFIG){ + + for(ConfigBoolValues currConf : ConfigBoolValues.values()){ currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, currConf.desc).getBoolean(); } - crusherRecipeExceptions = config.get(ConfigCategories.OTHER.name, "Crusher Recipe Exceptions", new String[]{"ingotBrick", "ingotBrickNether"}, "The Ingots, Dusts and Ores blacklisted from being auto-registered to be crushed by the Crusher. This list uses OreDictionary Names of the Inputs only.").getStringList(); - mashedFoodCraftingExceptions = config.get(ConfigCategories.ITEMS_CRAFTING.name, "Mashed Food Crafting Exceptions", new String[]{"ActuallyAdditions:itemCoffee"}, "The ItemFood, IGrowable and IPlantable Items that can not be used to craft Mashed Food. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); - paxelExtraMiningWhitelist = config.get(ConfigCategories.TOOL_VALUES.name, "AIOT Extra Whitelist", new String[]{"TConstruct:GravelOre"}, "By default, the AIOT can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); - drillExtraMiningWhitelist = config.get(ConfigCategories.TOOL_VALUES.name, "Drill Extra Whitelist", new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command.").getStringList(); - oreGenDimensionBlacklist = config.get(ConfigCategories.WORLD_GEN.name, "OreGen Dimension Blacklist", new int[0], "The IDs of the dimensions that Actually Additions OreGen (Black Quartz for example) is banned in. This also applies for other world gen like lush caves.").getIntList(); - plantDimensionBlacklist = config.get(ConfigCategories.WORLD_GEN.name, "Plant Blacklist", new int[0], "The IDs of the dimensions that Actually Additions Plants (Rice for example) are banned in").getIntList(); - minerExtraWhitelist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Extra Whitelist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode.").getStringList(); - minerBlacklist = config.get(ConfigCategories.MACHINE_VALUES.name, "Vertical Digger Blacklist", new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes.").getStringList(); - repairerExtraWhitelist = config.get(ConfigCategories.MACHINE_VALUES.name, "Item Repairer Extra Whitelist", new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable.").getStringList(); - spawnerChangerBlacklist = config.get(ConfigCategories.OTHER.name, "Spawner Changer Blacklist", new String[]{"VillagerGolem"}, "By default, the Spawner Changer allows every living entity to be put into a spawner. If there is one that shouldn't be able to, put its MAPPING NAME here.").getStringList(); + for(ConfigIntListValues currConf : ConfigIntListValues.values()){ + currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, currConf.desc).getIntList(); + } + + for(ConfigStringListValues currConf : ConfigStringListValues.values()){ + currConf.currentValue = config.get(currConf.category, currConf.name, currConf.defaultValue, currConf.desc).getStringList(); + } - lessSound = config.get(ConfigCategories.PERFORMANCE.name, "Less Sound", false, "If blocks in Actually Additions should have less sounds").getBoolean(); - lessParticles = config.get(ConfigCategories.PERFORMANCE.name, "Less Particles", false, "If blocks in Actually Additions should have less particles").getBoolean(); - lessBlockBreakingEffects = config.get(ConfigCategories.PERFORMANCE.name, "Less Block Breaking Effects", false, "If there should not be a sound effect and particles when a block is being destroyed by a breaker or similar").getBoolean(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index 515be1d8a..08ef08e97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -27,13 +27,13 @@ public class ConfigurationHandler{ Util.registerEvent(this); - if(config == null){ - config = new Configuration(configFile, true); - loadConfig(); - } + config = new Configuration(configFile); + config.load(); + + redefineConfigs(); } - private static void loadConfig(){ + private static void redefineConfigs(){ ConfigValues.defineConfigValues(config); if(config.hasChanged()){ @@ -44,7 +44,7 @@ public class ConfigurationHandler{ @SubscribeEvent public void onConfigurationChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event){ if(event.getModID().equalsIgnoreCase(ModUtil.MOD_ID)){ - loadConfig(); + redefineConfigs(); } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index 886612496..f0f2f6798 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -51,7 +51,11 @@ public enum ConfigBoolValues{ BOOKLET_TEXT_TO_FILE("Booklet Text to File", ConfigCategories.OTHER, false, "Should the entire text of the booklet be put into a new file in the Minecraft Folder on startup or resource reload. This is for debug purposes only and shouldn't really ever be needed."), - WATER_BOWL("Water Bowl", ConfigCategories.OTHER, true, "If right-clicking a bowl on water should create a water bowl"); + WATER_BOWL("Water Bowl", ConfigCategories.OTHER, true, "If right-clicking a bowl on water should create a water bowl"), + + LESS_SOUND("Less Sound", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less sounds"), + LESS_PARTICLES("Less Particles", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less particles"), + LESS_BLOCK_BREAKING_EFFECTS("Less Block Breaking Effects", ConfigCategories.PERFORMANCE, false, "If there should not be a sound effect and particles when a block is being destroyed by a breaker or similar"); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntListValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntListValues.java new file mode 100644 index 000000000..e1f7b8a66 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigIntListValues.java @@ -0,0 +1,38 @@ +/* + * This file ("ConfigIntListValues.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.config.values; + +import de.ellpeck.actuallyadditions.mod.config.ConfigCategories; + +public enum ConfigIntListValues{ + + ORE_GEN_DIMENSION_BLACKLIST("OreGen Dimension Blacklist", ConfigCategories.WORLD_GEN, new int[0], "The IDs of the dimensions that Actually Additions OreGen (Black Quartz for example) is banned in. This also applies for other world gen like lush caves."), + PLANT_DIMENSION_BLACKLIST("Plant Blacklist", ConfigCategories.WORLD_GEN, new int[0], "The IDs of the dimensions that Actually Additions Plants (Rice for example) are banned in"); + + public final String name; + public final String category; + public final int[] defaultValue; + public final String desc; + + public int[] currentValue; + + ConfigIntListValues(String name, ConfigCategories category, int[] defaultValue, String desc){ + this.name = name; + this.category = category.name; + this.defaultValue = defaultValue; + this.desc = desc; + } + + public int[] getValue(){ + return this.currentValue; + } + +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java new file mode 100644 index 000000000..74fc57ea8 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigStringListValues.java @@ -0,0 +1,44 @@ +/* + * This file ("ConfigStringListValues.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.config.values; + +import de.ellpeck.actuallyadditions.mod.config.ConfigCategories; + +public enum ConfigStringListValues{ + + CRUSHER_RECIPE_EXCEPTIONS("Crusher Recipe Exceptions", ConfigCategories.OTHER, new String[]{"ingotBrick", "ingotBrickNether"}, "The Ingots, Dusts and Ores blacklisted from being auto-registered to be crushed by the Crusher. This list uses OreDictionary Names of the Inputs only."), + MASHED_FOOD_CRAFTING_EXCEPTIONS("Mashed Food Crafting Exceptions", ConfigCategories.ITEMS_CRAFTING, new String[]{"ActuallyAdditions:itemCoffee"}, "The ItemFood, IGrowable and IPlantable Items that can not be used to craft Mashed Food. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."), + PAXEL_EXTRA_MINING_WHITELIST("AIOT Extra Whitelist", ConfigCategories.TOOL_VALUES, new String[]{"TConstruct:GravelOre"}, "By default, the AIOT can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."), + DRILL_EXTRA_MINING_WHITELIST("Drill Extra Whitelist", ConfigCategories.TOOL_VALUES, new String[]{"TConstruct:GravelOre"}, "By default, the Drill can mine certain blocks. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command."), + MINER_EXTRA_WHITELIST("Vertical Digger Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode."), + MINER_BLACKLIST("Vertical Digger Blacklist", ConfigCategories.MACHINE_VALUES, new String[0], "By default, the Vertical Digger mines everything that starts with 'ore' in the OreDictionary. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes."), + REPAIRER_EXTRA_WHITELIST("Item Repairer Extra Whitelist", ConfigCategories.MACHINE_VALUES, new String[]{"tconstruct:pickaxe", "tconstruct:shovel", "tconstruct:hatchet", "tconstruct:mattock", "tconstruct:broadsword", "tconstruct:longsword", "tconstruct:frypan", "tconstruct:battlesign", "tconstruct:hammer", "tconstruct:excavator", "tconstruct:lumberaxe", "tconstruct:cleaver"}, "By default, the Item Repairer only repairs items which are repairable in an anvil. Add an item's REGISTRY NAME here if you want it to be repairable."), + SPAWNER_CHANGER_BLACKLIST("Spawner Changer Blacklist", ConfigCategories.OTHER, new String[]{"VillagerGolem"}, "By default, the Spawner Changer allows every living entity to be put into a spawner. If there is one that shouldn't be able to, put its MAPPING NAME here."); + + public final String name; + public final String category; + public final String[] defaultValue; + public final String desc; + + public String[] currentValue; + + ConfigStringListValues(String name, ConfigCategories category, String[] defaultValue, String desc){ + this.name = name; + this.category = category.name; + this.defaultValue = defaultValue; + this.desc = desc; + } + + public String[] getValue(){ + return this.currentValue; + } + +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index f34fbdec2..7223b71de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.*; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; @@ -572,7 +573,7 @@ public class ItemCrafting{ } private static boolean isBlacklisted(Item item){ - for(String except : ConfigValues.mashedFoodCraftingExceptions){ + for(String except : ConfigStringListValues.MASHED_FOOD_CRAFTING_EXCEPTIONS.getValue()){ if(item.getRegistryName().toString().equals(except)){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index e5c48ab95..071da07f5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheWildPlants; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntListValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -34,7 +35,7 @@ public class WorldDecorationEvent{ @SubscribeEvent public void onWorldDecoration(DecorateBiomeEvent.Decorate event){ if((event.getResult() == Event.Result.ALLOW || event.getResult() == Event.Result.DEFAULT)){ - if(Util.arrayContains(ConfigValues.plantDimensionBlacklist, event.getWorld().provider.getDimension()) < 0){ + if(Util.arrayContains(ConfigIntListValues.PLANT_DIMENSION_BLACKLIST.getValue(), event.getWorld().provider.getDimension()) < 0){ this.generateRice(event); this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.GRASS, event); this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.GRASS, event); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 286ce3f14..fd6b9cc54 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntListValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -48,7 +49,7 @@ public class OreGen implements IWorldGenerator{ public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){ int dimension = world.provider.getDimension(); if(dimension != -1 && dimension != 1){ - if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigValues.oreGenDimensionBlacklist, world.provider.getDimension()) < 0){ + if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigIntListValues.ORE_GEN_DIMENSION_BLACKLIST.getValue(), world.provider.getDimension()) < 0){ this.generateDefault(world, random, chunkX*16, chunkZ*16); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index b89724f4c..3f43200b3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -77,7 +78,7 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ private boolean hasExtraWhitelist(Block block){ String name = block.getRegistryName().toString(); if(name != null){ - for(String list : ConfigValues.paxelExtraMiningWhitelist){ + for(String list : ConfigStringListValues.PAXEL_EXTRA_MINING_WHITELIST.getValue()){ if(list.equals(name)){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index eed474ffb..b581b9acd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -55,7 +56,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ } //Set New Block - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ world.playEvent(2001, pos, Block.getStateId(world.getBlockState(pos))); } PosUtil.setBlock(pos, world, InitBlocks.blockGiantChest, 0, 2); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 15e39197c..c2eee987c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -15,6 +15,7 @@ import com.google.common.collect.Multimap; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; @@ -502,7 +503,7 @@ public class ItemDrill extends ItemEnergy{ private boolean hasExtraWhitelist(Block block){ String name = block.getRegistryName().toString(); if(name != null){ - for(String list : ConfigValues.drillExtraMiningWhitelist){ + for(String list : ConfigStringListValues.DRILL_EXTRA_MINING_WHITELIST.getValue()){ if(list.equals(name)){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index e568200e2..61478b24b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; @@ -75,7 +76,7 @@ public class ItemLeafBlower extends ItemBase{ //Breaks the Blocks this.breakStuff(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)); //Plays a Minecart sounds (It really sounds like a Leaf Blower!) - if(!ConfigValues.lessSound){ + if(!ConfigBoolValues.LESS_SOUND.isEnabled()){ player.worldObj.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_MINECART_RIDING, SoundCategory.PLAYERS, 0.3F, 0.001F); } } @@ -119,7 +120,7 @@ public class ItemLeafBlower extends ItemBase{ drops.addAll(theBlock.getDrops(world, theCoord, world.getBlockState(theCoord), 0)); //Plays the Breaking Sound - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ world.playEvent(2001, theCoord, Block.getStateId(world.getBlockState(theCoord))); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index d5016cd81..21f508718 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; @@ -95,7 +96,7 @@ public class ItemSpawnerChanger extends ItemBase{ if(!(entity instanceof EntityPlayer)){ String entityName = EntityList.getEntityString(entity); if(entityName != null && !entityName.isEmpty()){ - for(String name : ConfigValues.spawnerChangerBlacklist){ + for(String name : ConfigStringListValues.SPAWNER_CHANGER_BLACKLIST.getValue()){ if(entityName.equals(name)){ return false; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index 95541b9a5..5f9ea0a20 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; @@ -135,7 +136,7 @@ public class MethodHandler implements IMethodHandler{ if(outputs != null && !outputs.isEmpty()){ ItemStack output = outputs.get(0); if(output.getItem() instanceof ItemBlock){ - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ tile.getWorldObject().playEvent(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); } PosUtil.setBlock(pos, tile.getWorldObject(), Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index 25fc80555..f3f33f0fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.recipe; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.item.ItemStack; @@ -63,7 +64,7 @@ public class CrusherRecipeRegistry{ } private static boolean hasException(String ore){ - for(String conf : ConfigValues.crusherRecipeExceptions){ + for(String conf : ConfigStringListValues.CRUSHER_RECIPE_EXCEPTIONS.getValue()){ if(conf.equals(ore)){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 9a6aec1dd..8402410bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; @@ -46,10 +47,10 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } public static void shootLaser(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, Lens currentLens){ - if(!ConfigValues.lessSound){ + if(!ConfigBoolValues.LESS_SOUND.isEnabled()){ world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigValues.lessParticles ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketParticle(startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 64)); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index fc4e0772c..567882eb4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -90,7 +91,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ this.worldObj.playEvent(2001, coordsBlock, Block.getStateId(stateToBreak)); } WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 3ca33582d..6529149f4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -14,6 +14,7 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; @@ -141,7 +142,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements if(!this.worldObj.isRemote){ if(this.slots[SLOT_INPUT] != null && this.slots[SLOT_INPUT].getItem() == InitItems.itemMisc && this.slots[SLOT_INPUT].getItemDamage() == TheMiscItems.CUP.ordinal() && this.slots[SLOT_OUTPUT] == null && this.coffeeCacheAmount >= CACHE_USE && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == FluidRegistry.WATER && this.tank.getFluidAmount() >= WATER_USE){ if(this.storage.getEnergyStored() >= ENERGY_USED){ - if(this.brewTime%30 == 0 && !ConfigValues.lessSound){ + if(this.brewTime%30 == 0 && !ConfigBoolValues.LESS_SOUND.isEnabled()){ this.worldObj.playSound(null, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), SoundHandler.coffeeMachine, SoundCategory.BLOCKS, 0.35F, 1.0F); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index c14a6c566..f6090b1f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -92,7 +93,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ this.worldObj.playEvent(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); } WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index df6689683..2e5b80d1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -14,6 +14,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -159,7 +160,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg this.lastSecondCrush = this.secondCrushTime; } - if(shouldPlaySound && !ConfigValues.lessSound){ + if(shouldPlaySound && !ConfigBoolValues.LESS_SOUND.isEnabled()){ this.worldObj.playSound(null, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), SoundHandler.crusher, SoundCategory.BLOCKS, 0.25F, 1.0F); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index 323d20fbf..136563ae4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -43,7 +44,7 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I else{ String reg = item.getRegistryName().toString(); if(reg != null){ - for(String strg : ConfigValues.repairerExtraWhitelist){ + for(String strg : ConfigStringListValues.REPAIRER_EXTRA_WHITELIST.getValue()){ if(reg.equals(strg)){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index cc3806603..757caf20b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -77,13 +78,13 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @SideOnly(Side.CLIENT) public void renderParticles(){ - if(Util.RANDOM.nextInt(ConfigValues.lessParticles ? 16 : 8) == 0){ + if(Util.RANDOM.nextInt(ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 16 : 8) == 0){ BlockPos thisPos = this.pos; LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj); if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ - PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigValues.lessParticles ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 19cf37714..b2e97ce96 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -82,7 +83,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr Collections.shuffle(breakPositions); BlockPos theCoord = breakPositions.get(0); - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ this.worldObj.playEvent(2001, theCoord, Block.getStateId(this.worldObj.getBlockState(theCoord))); } @@ -90,7 +91,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr this.storage.receiveEnergy(ENERGY_PRODUCED, false); - if(!ConfigValues.lessParticles){ + if(!ConfigBoolValues.LESS_PARTICLES.isEnabled()){ PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.pos.getX(), this.pos.getY(), this.pos.getZ(), 64)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 8488fd6a9..d10edf116 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -13,6 +13,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; @@ -107,7 +109,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR if(Util.RANDOM.nextFloat() <= chance){ if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ this.worldObj.playEvent(2001, pos, Block.getStateId(this.worldObj.getBlockState(pos))); } this.worldObj.setBlockToAir(pos); @@ -148,7 +150,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR String reg = block.getRegistryName().toString(); if(!reg.isEmpty()){ - for(String string : ConfigValues.minerExtraWhitelist){ + for(String string : ConfigStringListValues.MINER_EXTRA_WHITELIST.getValue()){ if(reg.equals(string)){ return true; } @@ -162,7 +164,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } private void shootParticles(int endX, int endY, int endZ){ - if(!ConfigValues.lessParticles){ + if(!ConfigBoolValues.LESS_PARTICLES.isEnabled()){ PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 96)); } } @@ -170,7 +172,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR private boolean isBlacklisted(Block block){ String reg = block.getRegistryName().toString(); if(!reg.isEmpty()){ - for(String string : ConfigValues.minerBlacklist){ + for(String string : ConfigStringListValues.MINER_BLACKLIST.getValue()){ if(reg.equals(string)){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index aa6d36204..cd7a9e3c9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.config.ConfigValues; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -130,7 +131,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements drops.addAll(blockToBreak.getDrops(this.worldObj, this.boundPosition, this.worldObj.getBlockState(this.boundPosition), 0)); if(WorldUtil.addToInventory(this, drops, false, true)){ - if(!ConfigValues.lessBlockBreakingEffects){ + if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ this.worldObj.playEvent(2001, this.boundPosition, Block.getStateId(this.worldObj.getBlockState(this.boundPosition))); } this.worldObj.setBlockToAir(this.boundPosition); From 2c24463e0e050c97a050a3b06ac3ed6f400942ba Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 12:21:47 +0200 Subject: [PATCH 230/322] Made Player Interface recipe more expensive --- .../ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index ea61c1188..2c2374221 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -403,7 +403,7 @@ public class BlockCrafting{ //Player Interface if(ConfigCrafting.PLAYER_INTERFACE.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockPlayerInterface), - " C ", "EBE", " S ", + "BCB", "EBE", "BSB", 'E', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 'C', new ItemStack(Items.SKULL, 1, 1), 'S', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), From 32446f39211a731891c83a60c5292b636c7a30bd Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 12:28:02 +0200 Subject: [PATCH 231/322] r39! Update yet again! ~ --- build.gradle | 2 +- update/changelog.md | 7 +++++++ update/updateVersions.properties | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 5628c023b..a1b90a4fd 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r38" +version = "1.9.4-r39" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 82d3a4b7d..1ff43d0b4 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,10 @@ +# 1.9.4-r39 +* Updated to forge's new fluid transfer and storage system +* Removed a possible memory leak source with world saving +* Added Player Interface +* Fixed configs resetting randomly sometimes +### Sorry for this amount of updates. I've been trying to fix a lot of bugs with them, but it just hasn't been going the way I wanted. + # 1.9.4-r38 * Added custom system to save world data because the Minecraft one always failed on me. * Note: This WILL disconnect all of your laser relays, sorry. Just reconnect them again. If you find any bugs with the new system (Laser Relay connections), leave an issue on github. Thanks! diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 5e51629fb..028cef036 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=38 \ No newline at end of file +1.9.4=39 \ No newline at end of file From 505c88f031ee5803e01b064c03bfa13795fe38d9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 12:51:13 +0200 Subject: [PATCH 232/322] Added equals for Networks and ConnectionPairs Just in case that was screwing something up at some point --- .../mod/misc/LaserRelayConnectionHandler.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 1c6bb47b1..5eb0ad9a3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -18,6 +18,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import sun.nio.ch.Net; public class LaserRelayConnectionHandler{ @@ -183,6 +184,19 @@ public class LaserRelayConnectionHandler{ } return compound; } + + @Override + public boolean equals(Object obj){ + if(obj instanceof ConnectionPair){ + ConnectionPair pair = (ConnectionPair)obj; + if(this.firstRelay != null && this.firstRelay.equals(pair.firstRelay)){ + if(this.secondRelay != null && this.secondRelay.equals(pair.secondRelay)){ + return true; + } + } + } + return super.equals(obj); + } } public static class Network{ @@ -193,5 +207,15 @@ public class LaserRelayConnectionHandler{ public String toString(){ return this.connections.toString(); } + + @Override + public boolean equals(Object obj){ + if(obj instanceof Network){ + if(this.connections.equals(((Network)obj).connections)){ + return true; + } + } + return super.equals(obj); + } } } \ No newline at end of file From e2e2241e63fbd3cef24f8d422830269295f7bb98 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 12:52:59 +0200 Subject: [PATCH 233/322] CLEANUP --- .../mod/ActuallyAdditions.java | 10 ++- .../mod/blocks/BlockGreenhouseGlass.java | 1 - .../mod/blocks/BlockPlayerInterface.java | 1 - .../mod/blocks/base/BlockContainerBase.java | 4 +- .../mod/booklet/GuiBooklet.java | 2 +- .../mod/booklet/InitBooklet.java | 1 - .../mod/booklet/button/IndexButton.java | 4 - .../mod/crafting/ItemCrafting.java | 1 - .../actuallyadditions/mod/data/WorldData.java | 86 +++++++++---------- .../mod/event/EntityLivingEvents.java | 3 +- .../mod/event/PlayerObtainEvents.java | 5 +- .../mod/event/WorldDecorationEvent.java | 1 - .../actuallyadditions/mod/gen/OreGen.java | 1 - .../mod/items/ItemAllToolAA.java | 1 - .../mod/items/ItemChestToCrateUpgrade.java | 1 - .../mod/items/ItemDrill.java | 1 - .../mod/items/ItemLaserWrench.java | 1 - .../mod/items/ItemLeafBlower.java | 1 - .../mod/items/ItemSpawnerChanger.java | 1 - .../mod/misc/LaserRelayConnectionHandler.java | 1 - .../mod/misc/MethodHandler.java | 1 - .../mod/proxy/ClientProxy.java | 2 +- .../mod/recipe/CrusherRecipeRegistry.java | 1 - .../tile/TileEntityAtomicReconstructor.java | 1 - .../mod/tile/TileEntityBreaker.java | 1 - .../mod/tile/TileEntityCanolaPress.java | 3 +- .../mod/tile/TileEntityCoffeeMachine.java | 5 +- .../tile/TileEntityDirectionalBreaker.java | 1 - .../mod/tile/TileEntityFermentingBarrel.java | 4 +- .../mod/tile/TileEntityFluidCollector.java | 6 +- .../mod/tile/TileEntityGrinder.java | 1 - .../mod/tile/TileEntityItemRepairer.java | 1 - .../mod/tile/TileEntityLaserRelay.java | 1 - .../mod/tile/TileEntityLeafGenerator.java | 1 - .../mod/tile/TileEntityMiner.java | 1 - .../mod/tile/TileEntityOilGenerator.java | 4 +- .../mod/tile/TileEntityPhantomItemface.java | 1 - .../mod/tile/TileEntityPhantomLiquiface.java | 3 - .../mod/tile/TileEntityPhantomPlacer.java | 1 - .../mod/tile/TileEntityPlayerInterface.java | 3 +- .../actuallyadditions/mod/util/WorldUtil.java | 7 +- 41 files changed, 77 insertions(+), 99 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 6d6f393a7..461bca0fb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -30,7 +30,10 @@ import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.items.lens.Lenses; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; -import de.ellpeck.actuallyadditions.mod.misc.*; +import de.ellpeck.actuallyadditions.mod.misc.BannerHelper; +import de.ellpeck.actuallyadditions.mod.misc.DungeonLoot; +import de.ellpeck.actuallyadditions.mod.misc.MethodHandler; +import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.ore.InitOreDict; import de.ellpeck.actuallyadditions.mod.proxy.IProxy; @@ -46,7 +49,10 @@ 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.*; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLMissingMappingsEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import java.util.Locale; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index eba6ee25b..9e4adbfa4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -16,7 +16,6 @@ import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java index d39395801..2985b692c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPlayerInterface.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlayerInterface; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 22b1fa4b8..7d1e6c5b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -34,7 +34,9 @@ import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidUtil; import java.util.ArrayList; import java.util.Random; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index eb8777b0a..0b43234ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -21,6 +21,7 @@ import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch; import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.config.GuiConfiguration; +import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; import de.ellpeck.actuallyadditions.mod.items.ItemBooklet; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; @@ -28,7 +29,6 @@ import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 7d313a51a..351532e58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java index 913d47502..17776e210 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/IndexButton.java @@ -12,14 +12,10 @@ package de.ellpeck.actuallyadditions.mod.booklet.button; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; -import de.ellpeck.actuallyadditions.mod.booklet.chapter.BookletChapter; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 7223b71de..858e31c46 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.crafting; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 5ae837b48..2777d4ba4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -33,14 +33,12 @@ import java.util.concurrent.ConcurrentHashMap; public class WorldData{ public static final String DATA_TAG = ModUtil.MOD_ID+"data"; + public static final ArrayList PLAYER_SAVE_DATA = new ArrayList(); private static Map worldData = new ConcurrentHashMap(); - + public final ConcurrentSet laserRelayNetworks = new ConcurrentSet(); private ISaveHandler handler; private int dimension; - public final ConcurrentSet laserRelayNetworks = new ConcurrentSet(); - public static final ArrayList PLAYER_SAVE_DATA = new ArrayList(); - public WorldData(ISaveHandler handler, int dimension){ this.handler = handler; this.dimension = dimension; @@ -59,46 +57,6 @@ public class WorldData{ return data; } - private void readFromNBT(NBTTagCompound compound){ - //Laser World Data - this.laserRelayNetworks.clear(); - - NBTTagList networkList = compound.getTagList("Networks", 10); - for(int i = 0; i < networkList.tagCount(); i++){ - Network network = LaserRelayConnectionHandler.readNetworkFromNBT(networkList.getCompoundTagAt(i)); - this.laserRelayNetworks.add(network); - } - - if(this.dimension == 0){ - //Player Data - PLAYER_SAVE_DATA.clear(); - - NBTTagList playerList = compound.getTagList("PlayerData", 10); - for(int i = 0; i < playerList.tagCount(); i++){ - PlayerSave aSave = PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); - PLAYER_SAVE_DATA.add(aSave); - } - } - } - - private void writeToNBT(NBTTagCompound compound){ - //Laser World Data - NBTTagList networkList = new NBTTagList(); - for(Network network : this.laserRelayNetworks){ - networkList.appendTag(LaserRelayConnectionHandler.writeNetworkToNBT(network)); - } - compound.setTag("Networks", networkList); - - if(this.dimension == 0){ - //Player Data - NBTTagList playerList = new NBTTagList(); - for(PlayerSave theSave : PLAYER_SAVE_DATA){ - playerList.appendTag(theSave.toNBT()); - } - compound.setTag("PlayerData", playerList); - } - } - public static void load(World world){ if(!world.isRemote && world instanceof WorldServer){ WorldData data = new WorldData(new WorldSpecificSaveHandler((WorldServer)world, world.getSaveHandler()), world.provider.getDimension()); @@ -163,4 +121,44 @@ public class WorldData{ ModUtil.LOGGER.info("Unloading WorldData for world "+world.provider.getDimension()+"!"); } } + + private void readFromNBT(NBTTagCompound compound){ + //Laser World Data + this.laserRelayNetworks.clear(); + + NBTTagList networkList = compound.getTagList("Networks", 10); + for(int i = 0; i < networkList.tagCount(); i++){ + Network network = LaserRelayConnectionHandler.readNetworkFromNBT(networkList.getCompoundTagAt(i)); + this.laserRelayNetworks.add(network); + } + + if(this.dimension == 0){ + //Player Data + PLAYER_SAVE_DATA.clear(); + + NBTTagList playerList = compound.getTagList("PlayerData", 10); + for(int i = 0; i < playerList.tagCount(); i++){ + PlayerSave aSave = PlayerSave.fromNBT(playerList.getCompoundTagAt(i)); + PLAYER_SAVE_DATA.add(aSave); + } + } + } + + private void writeToNBT(NBTTagCompound compound){ + //Laser World Data + NBTTagList networkList = new NBTTagList(); + for(Network network : this.laserRelayNetworks){ + networkList.appendTag(LaserRelayConnectionHandler.writeNetworkToNBT(network)); + } + compound.setTag("Networks", networkList); + + if(this.dimension == 0){ + //Player Data + NBTTagList playerList = new NBTTagList(); + for(PlayerSave theSave : PLAYER_SAVE_DATA){ + playerList.appendTag(theSave.toNBT()); + } + compound.setTag("PlayerData", playerList); + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index f2053615e..601c02507 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -11,13 +11,12 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.data.PlayerServerData; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import de.ellpeck.actuallyadditions.mod.data.PlayerServerData; import net.minecraft.block.BlockLiquid; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index e28a018a5..2547192aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -13,10 +13,9 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.data.WorldData; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.data.PlayerServerData; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java index 071da07f5..92bb9be22 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheWildPlants; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntListValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index fd6b9cc54..803957b7d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.gen; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntListValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index 3f43200b3..a02b2e3e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemToolAA; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index b581b9acd..c986bd12c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index c2eee987c..47e6ad857 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -14,7 +14,6 @@ import cofh.api.energy.IEnergyContainerItem; import com.google.common.collect.Multimap; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 599d76f5e..7d691110f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; -import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 61478b24b..0a7d93d5a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.items; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index 21f508718..e7c124ba0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.items; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 5eb0ad9a3..244b601f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -18,7 +18,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import sun.nio.ch.Net; public class LaserRelayConnectionHandler{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index 5f9ea0a20..fd654481c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.internal.IMethodHandler; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; import de.ellpeck.actuallyadditions.mod.util.PosUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 694dbf949..92c6816da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -19,6 +19,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; @@ -28,7 +29,6 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index f3f33f0fb..a8d518ad4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.recipe; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 8402410bf..f503a0bcf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 567882eb4..abdc7e10b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index ad038d9a2..a75a1aa88 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -20,7 +20,8 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 6529149f4..4ef87812d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemCoffee; @@ -26,7 +25,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; -import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index f6090b1f6..85cbcc121 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index 84e15a7fa..9d9f3939e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -15,8 +15,8 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.*; -import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.templates.FluidHandlerFluidMap; import net.minecraftforge.fml.relauncher.Side; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index fa81a5de0..61a3f51e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -20,8 +20,10 @@ import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fluids.*; -import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.IFluidBlock; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 2e5b80d1a..91a1ad106 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index 136563ae4..afa86f22d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 757caf20b..f03314d50 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index b2e97ce96..c6e40e3f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index d10edf116..6c394eddb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 79f8ad2a2..5d6dc8121 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -18,8 +18,8 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.*; -import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java index 28cce178d..b25360e4b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomItemface.java @@ -16,7 +16,6 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; public class TileEntityPhantomItemface extends TileEntityPhantomface{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index d3ae7d974..1685db6da 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -12,11 +12,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; public class TileEntityPhantomLiquiface extends TileEntityPhantomface{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index cd7a9e3c9..b64ea0be2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; -import de.ellpeck.actuallyadditions.mod.config.ConfigValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index b374d536f..629dfb84f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -23,10 +23,9 @@ import java.util.UUID; public class TileEntityPlayerInterface extends TileEntityInventoryBase implements IEnergyReceiver{ public static final int DEFAULT_RANGE = 32; - + public UUID connectedPlayer; private EnergyStorage storage = new EnergyStorage(30000); private int range; - public UUID connectedPlayer; public TileEntityPlayerInterface(){ super(0, "playerInterface"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index aee0107f8..81839ad75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -39,8 +39,11 @@ import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IPlantable; -import net.minecraftforge.fluids.*; -import net.minecraftforge.fluids.capability.*; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import java.util.ArrayList; From ff70e6d53dad40bc77000497f27175114027e060 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 12:55:27 +0200 Subject: [PATCH 234/322] Made equals proper --- .../mod/misc/LaserRelayConnectionHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 244b601f8..65507572f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -188,8 +188,8 @@ public class LaserRelayConnectionHandler{ public boolean equals(Object obj){ if(obj instanceof ConnectionPair){ ConnectionPair pair = (ConnectionPair)obj; - if(this.firstRelay != null && this.firstRelay.equals(pair.firstRelay)){ - if(this.secondRelay != null && this.secondRelay.equals(pair.secondRelay)){ + if(this.firstRelay == pair.firstRelay || (this.firstRelay != null && this.firstRelay.equals(pair.firstRelay))){ + if(this.secondRelay == pair.secondRelay && (this.secondRelay != null && this.secondRelay.equals(pair.secondRelay))){ return true; } } From 9ad6dfcd0fb8239dd26bb82210c00dcbe11daf31 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 14:33:53 +0200 Subject: [PATCH 235/322] For some reason, with this done, random disconnections don't occur anymore!? --- .../mod/misc/LaserRelayConnectionHandler.java | 26 +++++++++++-------- .../mod/tile/TileEntityLaserRelay.java | 6 ++--- .../mod/tile/TileEntityLaserRelayEnergy.java | 3 +-- .../mod/tile/TileEntityLaserRelayItem.java | 3 +-- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 65507572f..1a7e1fe86 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -65,7 +65,7 @@ public class LaserRelayConnectionHandler{ WorldData.getDataForWorld(world).laserRelayNetworks.remove(network); for(ConnectionPair pair : network.connections){ if(!pair.contains(relay)){ - addConnection(pair.firstRelay, pair.secondRelay, world); + addConnection(pair.positions[0], pair.positions[1], world); } } //System.out.println("Removing a Relay from the Network!"); @@ -142,12 +142,11 @@ public class LaserRelayConnectionHandler{ public static class ConnectionPair{ - public final BlockPos firstRelay; - public final BlockPos secondRelay; + public final BlockPos[] positions = new BlockPos[2]; public ConnectionPair(BlockPos firstRelay, BlockPos secondRelay){ - this.firstRelay = firstRelay; - this.secondRelay = secondRelay; + this.positions[0] = firstRelay; + this.positions[1] = secondRelay; } public static ConnectionPair readFromNBT(NBTTagCompound compound){ @@ -165,18 +164,23 @@ public class LaserRelayConnectionHandler{ } public boolean contains(BlockPos relay){ - return (this.firstRelay != null && PosUtil.areSamePos(this.firstRelay, relay)) || (this.secondRelay != null && PosUtil.areSamePos(this.secondRelay, relay)); + for(BlockPos position : this.positions){ + if(position != null && PosUtil.areSamePos(position, relay)){ + return true; + } + } + return false; } @Override public String toString(){ - return (this.firstRelay == null ? "-" : this.firstRelay.toString())+" | "+(this.secondRelay == null ? "-" : this.secondRelay.toString()); + return (this.positions[0] == null ? "-" : this.positions[0].toString())+" | "+(this.positions[1] == null ? "-" : this.positions[1].toString()); } public NBTTagCompound writeToNBT(){ NBTTagCompound compound = new NBTTagCompound(); - for(int i = 0; i < 2; i++){ - BlockPos relay = i == 0 ? this.firstRelay : this.secondRelay; + for(int i = 0; i < this.positions.length; i++){ + BlockPos relay = this.positions[i]; compound.setInteger("x"+i, relay.getX()); compound.setInteger("y"+i, relay.getY()); compound.setInteger("z"+i, relay.getZ()); @@ -188,8 +192,8 @@ public class LaserRelayConnectionHandler{ public boolean equals(Object obj){ if(obj instanceof ConnectionPair){ ConnectionPair pair = (ConnectionPair)obj; - if(this.firstRelay == pair.firstRelay || (this.firstRelay != null && this.firstRelay.equals(pair.firstRelay))){ - if(this.secondRelay == pair.secondRelay && (this.secondRelay != null && this.secondRelay.equals(pair.secondRelay))){ + for(int i = 0; i < this.positions.length; i++){ + if(this.positions[i] == pair.positions[i] || (this.positions[i] != null && this.positions[i].equals(pair.positions[i]))){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index f03314d50..0ddf4bb61 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -43,7 +43,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ if(!list.hasNoTags()){ for(int i = 0; i < list.tagCount(); i++){ LaserRelayConnectionHandler.ConnectionPair pair = LaserRelayConnectionHandler.ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); - LaserRelayConnectionHandler.addConnection(pair.firstRelay, pair.secondRelay, this.worldObj); + LaserRelayConnectionHandler.addConnection(pair.positions[0], pair.positions[1], this.worldObj); } } @@ -82,8 +82,8 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj); if(network != null){ for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ - if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.firstRelay)){ - PacketParticle.renderParticlesFromAToB(aPair.firstRelay.getX(), aPair.firstRelay.getY(), aPair.firstRelay.getZ(), aPair.secondRelay.getX(), aPair.secondRelay.getY(), aPair.secondRelay.getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.positions[0])){ + PacketParticle.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index b8ebaf4f4..1549cfd0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -64,9 +64,8 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements List alreadyChecked = new ArrayList(); //Go through all of the connections in the network for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ - BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; //Go through both relays in the connection - for(BlockPos relay : relays){ + for(BlockPos relay : pair.positions){ if(relay != null && !alreadyChecked.contains(relay)){ alreadyChecked.add(relay); //Get every side of the relay diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index c9c3b8a43..7f9d5d87b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -55,8 +55,7 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ List handlers = new ArrayList(); for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ - BlockPos[] relays = new BlockPos[]{pair.firstRelay, pair.secondRelay}; - for(BlockPos relay : relays){ + for(BlockPos relay : pair.positions){ if(relay != null){ TileEntity aRelayTile = this.worldObj.getTileEntity(relay); if(aRelayTile instanceof de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem){ From d46bb306d87da57ea180afcd9e6cc00fc96637ef Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 16:01:10 +0200 Subject: [PATCH 236/322] Fixed a bug with Laser Relays sometimes randomly disconnecting on chunk load. *Fuck this game.* --- .../mod/tile/TileEntityLaserRelay.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 0ddf4bb61..38c2f630c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.ConnectionPair; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; @@ -22,6 +23,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.Set; + public abstract class TileEntityLaserRelay extends TileEntityBase{ public static final int MAX_DISTANCE = 15; @@ -30,6 +33,8 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ public final boolean isItem; + private Set tempConnectionStorage; + public TileEntityLaserRelay(String name, boolean isItem){ super(name); this.isItem = isItem; @@ -42,7 +47,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ NBTTagList list = compound.getTagList("Connections", 10); if(!list.hasNoTags()){ for(int i = 0; i < list.tagCount(); i++){ - LaserRelayConnectionHandler.ConnectionPair pair = LaserRelayConnectionHandler.ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); + ConnectionPair pair = ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); LaserRelayConnectionHandler.addConnection(pair.positions[0], pair.positions[1], this.worldObj); } } @@ -56,9 +61,9 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ NBTTagCompound compound = super.getUpdateTag(); NBTTagList list = new NBTTagList(); - ConcurrentSet connections = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj); + ConcurrentSet connections = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj); if(connections != null && !connections.isEmpty()){ - for(LaserRelayConnectionHandler.ConnectionPair pair : connections){ + for(ConnectionPair pair : connections){ list.appendTag(pair.writeToNBT()); } } @@ -81,7 +86,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ BlockPos thisPos = this.pos; LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj); if(network != null){ - for(LaserRelayConnectionHandler.ConnectionPair aPair : network.connections){ + for(ConnectionPair aPair : network.connections){ if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.positions[0])){ PacketParticle.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); } @@ -93,7 +98,22 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @Override public void invalidate(){ super.invalidate(); + //This is because Minecraft randomly invalidates tiles on world join and then validates them again + //We need to compensate for this so that connections don't get broken randomly + this.tempConnectionStorage = LaserRelayConnectionHandler.getConnectionsFor(this.pos, this.worldObj); + LaserRelayConnectionHandler.removeRelayFromNetwork(this.pos, this.worldObj); } + @Override + public void validate(){ + if(this.tempConnectionStorage != null){ + for(ConnectionPair pair : this.tempConnectionStorage){ + LaserRelayConnectionHandler.addConnection(pair.positions[0], pair.positions[1], this.worldObj); + } + this.tempConnectionStorage = null; + } + + super.validate(); + } } From b767c8124c443633bf2897cb195873be137ca6c0 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 16:09:36 +0200 Subject: [PATCH 237/322] r40! Sorry. So sorry. --- build.gradle | 2 +- update/changelog.md | 5 +++++ update/updateVersions.properties | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index a1b90a4fd..7000c4cc8 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r39" +version = "1.9.4-r40" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 1ff43d0b4..b57f5a82c 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,8 @@ +# 1.9.4-r40 +* Fixed a bug with Laser Relays sometimes randomly disconnecting on chunk load. +### You only need this when you have been or are wanting to use Laser Relays of any sort. This version fixes a hideous bug that caused them to randomly disconnect when re-loading chunks for a reason that makes absolutely no sense to me and the people I asked. If you want to know what the bug was, [click here](https://github.com/Ellpeck/ActuallyAdditions/commit/d46bb306d87da57ea180afcd9e6cc00fc96637ef). +#### Again, sorry for the amount of updates, this has just been driving me crazy. + # 1.9.4-r39 * Updated to forge's new fluid transfer and storage system * Removed a possible memory leak source with world saving diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 028cef036..a1305ea9f 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=39 \ No newline at end of file +1.9.4=40 \ No newline at end of file From 52b819622048184790e6ebdef2cd228b5a74ce2a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 16:11:21 +0200 Subject: [PATCH 238/322] Remove old fallback file + I can markdown --- update/changelog.md | 5 ++--- update/updateVersion.txt | 2 -- 2 files changed, 2 insertions(+), 5 deletions(-) delete mode 100644 update/updateVersion.txt diff --git a/update/changelog.md b/update/changelog.md index b57f5a82c..b914f8f81 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,7 +1,6 @@ # 1.9.4-r40 -* Fixed a bug with Laser Relays sometimes randomly disconnecting on chunk load. -### You only need this when you have been or are wanting to use Laser Relays of any sort. This version fixes a hideous bug that caused them to randomly disconnect when re-loading chunks for a reason that makes absolutely no sense to me and the people I asked. If you want to know what the bug was, [click here](https://github.com/Ellpeck/ActuallyAdditions/commit/d46bb306d87da57ea180afcd9e6cc00fc96637ef). -#### Again, sorry for the amount of updates, this has just been driving me crazy. +* Fixed a bug with Laser Relays sometimes randomly disconnecting on chunk load +### You only need this when you have been or are wanting to use Laser Relays of any sort. This version fixes a hideous bug that caused them to randomly disconnect when re-loading chunks for a reason that makes absolutely no sense to me and the people I asked. If you want to know what the bug was, [click here](https://github.com/Ellpeck/ActuallyAdditions/commit/d46bb306d87da57ea180afcd9e6cc00fc96637ef). Again, sorry for the amount of updates, this has just been driving me crazy. # 1.9.4-r39 * Updated to forge's new fluid transfer and storage system diff --git a/update/updateVersion.txt b/update/updateVersion.txt deleted file mode 100644 index 7d90cb450..000000000 --- a/update/updateVersion.txt +++ /dev/null @@ -1,2 +0,0 @@ -1.7.10-r21 -(This is a fallback for old versions which don't have the new update checker. Don't change.) \ No newline at end of file From 5bd872620c1fee767f68cb28b3f7dfebe44eee47 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 5 Jun 2016 17:37:18 +0200 Subject: [PATCH 239/322] Don't make directories --- .../de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java | 1 - .../java/de/ellpeck/actuallyadditions/mod/data/WorldData.java | 1 - .../java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java | 1 - 3 files changed, 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java index e46e24343..09e2c72c2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java @@ -78,7 +78,6 @@ public class ExtraClientData{ public static File getTheFile(){ try{ if(!theFile.exists()){ - theFile.mkdirs(); theFile.createNewFile(); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 2777d4ba4..55bb2f803 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -93,7 +93,6 @@ public class WorldData{ if(dataFile != null){ if(!dataFile.exists()){ - dataFile.mkdirs(); dataFile.createNewFile(); ModUtil.LOGGER.info("Creating new WorldData file for world "+data.dimension+"!"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 92c6816da..32d4a1b95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -94,7 +94,6 @@ public class ClientProxy implements IProxy{ if(ConfigBoolValues.BOOKLET_TEXT_TO_FILE.isEnabled()){ File file = new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"booklettext.txt"); try{ - file.mkdirs(); file.createNewFile(); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(TextFormatting.getTextWithoutFormattingCodes(bookletText)); From 0b106526af031589a8a2026a22328a6653573c8c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 6 Jun 2016 17:59:01 +0200 Subject: [PATCH 240/322] Changed white- and blacklists in laser relays and ESDs to be for putting and pulling instead of both for both --- .../mod/inventory/gui/GuiInputter.java | 4 ++-- .../gui/GuiLaserRelayItemWhitelist.java | 13 ++++++++++--- .../mod/tile/TileEntityInputter.java | 9 ++++----- .../mod/tile/TileEntityItemViewer.java | 10 +++++----- .../mod/tile/TileEntityLaserRelayItem.java | 2 +- .../TileEntityLaserRelayItemWhitelist.java | 19 +++++++++++++------ .../assets/actuallyadditions/lang/en_US.lang | 4 ++-- 7 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 5f6d2fc92..d586d4b19 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -172,8 +172,8 @@ public class GuiInputter extends GuiContainer{ this.mc.getTextureManager().bindTexture(this.isAdvanced ? resLocAdvanced : resLoc); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93+(this.isAdvanced ? OFFSET_ADVANCED : 0)); - this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull"), this.guiLeft+22+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put"), this.guiLeft+107+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString("INBOUND", this.guiLeft+23+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString("OUTBOUND", this.guiLeft+104+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); this.fontRendererObj.drawString(sideString[this.tileInputter.sideToPull+1], this.guiLeft+24+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); this.fontRendererObj.drawString(sideString[this.tileInputter.sideToPut+1], this.guiLeft+109+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index c084879e7..4cab85831 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -55,11 +55,13 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ this.whitelistLeft = new SmallerButton(0, this.guiLeft+3, this.guiTop+16, ""); this.whitelistRight = new SmallerButton(1, this.guiLeft+157, this.guiTop+16, ""); - SmallerButton smartWhitelist = new SmallerButton(2, this.guiLeft+80, this.guiTop+33, "S"); + SmallerButton smartWhitelistLeft = new SmallerButton(2, this.guiLeft+3, this.guiTop+34, "S"); + SmallerButton smartWhitelistRight = new SmallerButton(3, this.guiLeft+157, this.guiTop+34, "S"); this.buttonList.add(this.whitelistLeft); this.buttonList.add(this.whitelistRight); - this.buttonList.add(smartWhitelist); + this.buttonList.add(smartWhitelistLeft); + this.buttonList.add(smartWhitelistRight); } @Override @@ -90,7 +92,7 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ list.addAll(infoList); this.drawHoveringText(list, x, y); } - if(x >= this.guiLeft+80 && y >= this.guiTop+33 && x <= this.guiLeft+95 && y <= this.guiTop+46){ + if(((x >= this.guiLeft+3 && x <= this.guiLeft+3+15) || (x >= this.guiLeft+157 && x <= this.guiLeft+157+15)) && y <= this.guiTop+34+15 && y >= this.guiTop+34){ List list = new ArrayList(); list.add(TextFormatting.BOLD+StringUtil.localize("info."+ModUtil.MOD_ID+".gui.smart")); list.addAll(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localize("info."+ModUtil.MOD_ID+".gui.smartInfo"), 200)); @@ -101,6 +103,11 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tile.name); + + String s1 = "INBOUND"; + String s2 = "OUTBOUND"; + this.fontRendererObj.drawString(s1, 46-this.fontRendererObj.getStringWidth(s1)/2, 80, StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(s2, 131-this.fontRendererObj.getStringWidth(s2)/2, 80, StringUtil.DECIMAL_COLOR_GRAY_TEXT); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index fcd91c5b8..cd8d15711 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -114,7 +114,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } } //If ESD has enough Space & Item in question is on whitelist - if(tempStack != null && (this.slots[0] == null || (tempStack.isItemEqual(this.slots[0]) && this.slots[0].stackSize < maxSize)) && this.checkBothFilters(tempStack)){ + if(tempStack != null && (this.slots[0] == null || (tempStack.isItemEqual(this.slots[0]) && this.slots[0].stackSize < maxSize)) && this.checkBothFilters(tempStack, false)){ //Deal with ISided if(theSided != null){ //Check if Item can be inserted from any Side (Because Sidedness gets ignored!) @@ -203,7 +203,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt maxSize = theInventory.getInventoryStackLimit(); } } - if(theInventory.isItemValidForSlot(i, this.slots[0]) && (tempStack == null || (tempStack.isItemEqual(this.slots[0]) && tempStack.stackSize < maxSize)) && this.checkBothFilters(this.slots[0])){ + if(theInventory.isItemValidForSlot(i, this.slots[0]) && (tempStack == null || (tempStack.isItemEqual(this.slots[0]) && tempStack.stackSize < maxSize)) && this.checkBothFilters(this.slots[0], true)){ if(theSided != null){ for(int j = 0; j <= 5; j++){ if(theSided.canInsertItem(i, this.slots[0], EnumFacing.values()[j])){ @@ -260,13 +260,12 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt /** * Checks if one of the filters contains the ItemStack - * (Whitelist or empty Blacklist in one of them always lets the Item through!) * * @param stack The ItemStack * @return If the Item is filtered correctly */ - private boolean checkBothFilters(ItemStack stack){ - return this.checkFilter(stack, true, this.isPullWhitelist) || this.checkFilter(stack, false, this.isPutWhitelist); + private boolean checkBothFilters(ItemStack stack, boolean output){ + return this.checkFilter(stack, !output, output ? this.isPutWhitelist : this.isPullWhitelist); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index e58cad08f..a480a4697 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -91,7 +91,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - if(this.isWhitelisted(handler, stack)){ + if(this.isWhitelisted(handler, stack, true)){ if(ItemStack.areItemsEqual(handler.handler.getStackInSlot(handler.switchedIndex), stack)){ ItemStack gaveBack = handler.handler.extractItem(handler.switchedIndex, stack.stackSize, true); return gaveBack != null; @@ -101,11 +101,11 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ return false; } - private boolean isWhitelisted(SpecificItemHandlerInfo handler, ItemStack stack){ - boolean whitelisted = handler.relayInQuestion.isWhitelisted(stack); + private boolean isWhitelisted(SpecificItemHandlerInfo handler, ItemStack stack, boolean output){ + boolean whitelisted = handler.relayInQuestion.isWhitelisted(stack, output); TileEntityLaserRelayItem connected = this.getConnectedRelay(); if(connected != null && connected != handler.relayInQuestion){ - return whitelisted && connected.isWhitelisted(stack); + return whitelisted && connected.isWhitelisted(stack, !output); } else{ return whitelisted; @@ -116,7 +116,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ public boolean isItemValidForSlot(int index, ItemStack stack){ SpecificItemHandlerInfo handler = this.getSwitchedIndexHandler(index); if(handler != null){ - if(this.isWhitelisted(handler, stack)){ + if(this.isWhitelisted(handler, stack, false)){ ItemStack gaveBack = handler.handler.insertItem(handler.switchedIndex, stack, true); return !ItemStack.areItemStacksEqual(gaveBack, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index 7f9d5d87b..3663f7d49 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -32,7 +32,7 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ this("laserRelayItem"); } - public boolean isWhitelisted(ItemStack stack){ + public boolean isWhitelisted(ItemStack stack, boolean output){ return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 324c62a8d..c8226572e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -20,6 +20,7 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.items.IItemHandler; +import java.util.Arrays; import java.util.List; public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ @@ -162,8 +163,8 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem } @Override - public boolean isWhitelisted(ItemStack stack){ - return this.checkFilter(stack, true, this.isLeftWhitelist) || this.checkFilter(stack, false, this.isRightWhitelist); + public boolean isWhitelisted(ItemStack stack, boolean output){ + return this.checkFilter(stack, !output, output ? this.isRightWhitelist : this.isLeftWhitelist); } private boolean checkFilter(ItemStack stack, boolean left, boolean isWhitelist){ @@ -207,18 +208,24 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem this.isRightWhitelist = !this.isRightWhitelist; } else if(buttonID == 2){ - this.addWhitelistSmart(); + this.addWhitelistSmart(false); + } + else if(buttonID == 3){ + this.addWhitelistSmart(true); } } - private void addWhitelistSmart(){ + private void addWhitelistSmart(boolean output){ + int slotStart = output ? 12 : 0; + int slotStop = slotStart+12; + List handlers = this.getAllHandlersAround(); for(IItemHandler handler : handlers){ for(int i = 0; i < handler.getSlots(); i++){ ItemStack stack = handler.getStackInSlot(i); if(stack != null){ - if(!ItemUtil.contains(this.slots, stack, false)){ - for(int j = 0; j < this.slots.length; j++){ + if(!ItemUtil.contains(Arrays.copyOfRange(this.slots, slotStart, slotStop), stack, false)){ + for(int j = slotStart; j < slotStop; j++){ if(this.slots[j] == null || this.slots[j].stackSize <= 0){ ItemStack whitelistStack = stack.copy(); whitelistStack.stackSize = 1; diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 47948f748..7f83ae618 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -541,10 +541,10 @@ info.actuallyadditions.gui.coffee=Coffee info.actuallyadditions.gui.ok=Ok info.actuallyadditions.gui.the=the info.actuallyadditions.gui.smart=Smart Whitelist -info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventories adjacent to this relay will be added to the white- and blacklist. First, the left side will be completely filled, and if there's more items, they will go to the right side. +info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventories adjacent to this relay will be added to this part of the white- or blacklist. info.actuallyadditions.inputter.info.1=This is the first Slot in the connected Inventory to

at. info.actuallyadditions.inputter.info.2=This is the slot after the last Slot in the connected Inventory to

at. What that means: If you, for example, write 2 in the field to the left and 5 in this one, it will

at Slot 2, 3, and 4. -info.actuallyadditions.inputter.whitelistInfo=This applies for this part of the white-/blacklist. The other side applies as well, so you can have some Items whitelisted and some blacklisted. Note that, if you have an empty blacklist or an item whitelisted on at least one side, it will always go through. +info.actuallyadditions.inputter.whitelistInfo=When pressing this, this side's whitelist mode will be changed. To let all items through, an empty blacklist can be used, to let no items through, an empty whitelist can be used. To configure certain items, place them in the slots. info.actuallyadditions.noLens=No Lens info.actuallyadditions.booklet.manualName.1=Actually Additions info.actuallyadditions.booklet.manualName.2=Manual From 5972b516e93f7338c232208b6d1d8821e4543846 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 6 Jun 2016 18:05:57 +0200 Subject: [PATCH 241/322] Made esd's whitelist be blacklist by default --- .../actuallyadditions/mod/tile/TileEntityInputter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index cd8d15711..221b70b05 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -38,8 +38,8 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt public int slotToPullEnd; public TileEntity placeToPull; public boolean isAdvanced; - public boolean isPullWhitelist = true; - public boolean isPutWhitelist = true; + public boolean isPullWhitelist; + public boolean isPutWhitelist; private int lastPutSide; private int lastPutStart; private int lastPutEnd; From 5895a8de1cfe4924406c1a4ff785c25780df286a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 6 Jun 2016 21:27:09 +0200 Subject: [PATCH 242/322] Added dispay stand and leaf blower and potion ring integration for it --- .../api/misc/IDisplayStandItem.java | 21 +++ .../mod/blocks/BlockDisplayStand.java | 89 +++++++++++ .../mod/blocks/InitBlocks.java | 2 + .../mod/blocks/render/RenderDisplayStand.java | 52 +++++++ .../mod/creative/CreativeTab.java | 1 + .../mod/items/ItemLeafBlower.java | 30 +++- .../mod/items/ItemPotionRing.java | 85 +++++++++-- .../mod/proxy/ClientProxy.java | 3 + .../mod/tile/TileEntityBase.java | 1 + .../mod/tile/TileEntityDisplayStand.java | 140 ++++++++++++++++++ .../mod/tile/TileEntityInventoryBase.java | 5 - .../blockstates/blockDisplayStand.json | 16 ++ .../assets/actuallyadditions/lang/en_US.lang | 1 + .../textures/blocks/blockDisplayStand.png | Bin 0 -> 486 bytes .../textures/blocks/blockDisplayStandSide.png | Bin 0 -> 388 bytes 15 files changed, 420 insertions(+), 26 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/api/misc/IDisplayStandItem.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockDisplayStand.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockDisplayStand.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockDisplayStandSide.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/misc/IDisplayStandItem.java b/src/main/java/de/ellpeck/actuallyadditions/api/misc/IDisplayStandItem.java new file mode 100644 index 000000000..5ca033915 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/misc/IDisplayStandItem.java @@ -0,0 +1,21 @@ +/* + * This file ("IDisplayStandItem.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.api.misc; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public interface IDisplayStandItem{ + + boolean update(ItemStack stack, TileEntity tile, int elapsedTicks); + + int getUsePerTick(ItemStack stack, TileEntity tile, int elapsedTicks); +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java new file mode 100644 index 000000000..ca0fa8957 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java @@ -0,0 +1,89 @@ +/* + * This file ("BlockDisplayStand.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks; + +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class BlockDisplayStand extends BlockContainerBase{ + + public BlockDisplayStand(String name){ + super(Material.ROCK, name); + + this.setHarvestLevel("pickaxe", 0); + this.setHardness(1.5F); + this.setResistance(10.0F); + this.setSoundType(SoundType.STONE); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta){ + return new TileEntityDisplayStand(); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing par6, float par7, float par8, float par9){ + if(!world.isRemote){ + TileEntityDisplayStand stand = (TileEntityDisplayStand)world.getTileEntity(pos); + if(stand != null){ + ItemStack display = stand.getStackInSlot(0); + if(heldItem != null){ + if(display == null){ + ItemStack toPut = heldItem.copy(); + toPut.stackSize = 1; + stand.setInventorySlotContents(0, toPut); + player.inventory.decrStackSize(player.inventory.currentItem, 1); + return true; + } + } + else{ + if(display != null){ + player.inventory.setInventorySlotContents(player.inventory.currentItem, display.copy()); + stand.setInventorySlotContents(0, null); + return true; + } + } + } + return false; + } + else{ + return true; + } + } + + @SuppressWarnings("deprecation") + @Override + public boolean isOpaqueCube(IBlockState state){ + return false; + } + + @Override + public void breakBlock(World worldIn, BlockPos pos, IBlockState state){ + this.dropInventory(worldIn, pos); + super.breakBlock(worldIn, pos, state); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 4aac311cd..53f8d9181 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -116,10 +116,12 @@ public class InitBlocks{ public static Block blockPillarQuartzSlab; public static Block blockBookletStand; + public static Block blockDisplayStand; public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockDisplayStand = new BlockDisplayStand("blockDisplayStand"); blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface"); blockBookletStand = new BlockBookletStand("blockBookletStand"); blockItemViewer = new BlockItemViewer("blockItemViewer"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java new file mode 100644 index 000000000..2cf52d223 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderDisplayStand.java @@ -0,0 +1,52 @@ +/* + * This file ("RenderDisplayStand.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks.render; + +import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class RenderDisplayStand extends TileEntitySpecialRenderer{ + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int par6){ + if(!(tile instanceof TileEntityDisplayStand)){ + return; + } + + ItemStack stack = ((TileEntityDisplayStand)tile).getStackInSlot(0); + if(stack != null){ + GlStateManager.pushMatrix(); + GlStateManager.translate((float)x+0.5F, (float)y+1F, (float)z+0.5F); + + double boop = Minecraft.getSystemTime()/800D; + GlStateManager.translate(0D, Math.sin(boop%(2*Math.PI))*0.065, 0D); + GlStateManager.rotate((float)(((boop*40D)%360)), 0, 1, 0); + + float scale = stack.getItem() instanceof ItemBlock ? 0.85F : 0.65F; + GlStateManager.scale(scale, scale, scale); + try{ + AssetUtil.renderItemInWorld(stack); + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to render an item in a display stand! The item is "+stack.getItem().getRegistryName()+"!", e); + } + + GlStateManager.popMatrix(); + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 527ade046..3fb187cd1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -73,6 +73,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockPhantomBooster); this.add(InitBlocks.blockCoffeeMachine); this.add(InitBlocks.blockXPSolidifier); + this.add(InitBlocks.blockDisplayStand); this.add(InitBlocks.blockMiner); this.add(InitBlocks.blockGreenhouseGlass); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index 0a7d93d5a..eed67428c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -22,6 +23,7 @@ import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumAction; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; @@ -33,7 +35,7 @@ import net.minecraft.world.World; import java.util.ArrayList; import java.util.Collections; -public class ItemLeafBlower extends ItemBase{ +public class ItemLeafBlower extends ItemBase implements IDisplayStandItem{ private final boolean isAdvanced; @@ -70,16 +72,22 @@ public class ItemLeafBlower extends ItemBase{ @Override public void onUsingTick(ItemStack stack, EntityLivingBase player, int time){ - if(!player.worldObj.isRemote){ + this.doUpdate(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ), time, stack); + } + + private boolean doUpdate(World world, int x, int y, int z, int time, ItemStack stack){ + if(!world.isRemote){ if(time <= this.getMaxItemUseDuration(stack) && (this.isAdvanced || time%3 == 0)){ //Breaks the Blocks - this.breakStuff(player.worldObj, MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)); + boolean broke = this.breakStuff(world, x, y, z); //Plays a Minecart sounds (It really sounds like a Leaf Blower!) if(!ConfigBoolValues.LESS_SOUND.isEnabled()){ - player.worldObj.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_MINECART_RIDING, SoundCategory.PLAYERS, 0.3F, 0.001F); + world.playSound(null, x, y, z, SoundEvents.ENTITY_MINECART_RIDING, SoundCategory.PLAYERS, 0.3F, 0.001F); } + return broke; } } + return false; } /** @@ -90,7 +98,7 @@ public class ItemLeafBlower extends ItemBase{ * @param y The Y Position of the Player * @param z The Z Position of the Player */ - public void breakStuff(World world, int x, int y, int z){ + public boolean breakStuff(World world, int x, int y, int z){ ArrayList breakPositions = new ArrayList(); int rangeSides = 5; @@ -130,6 +138,18 @@ public class ItemLeafBlower extends ItemBase{ //Drops the Items into the World world.spawnEntityInWorld(new EntityItem(world, theCoord.getX()+0.5, theCoord.getY()+0.5, theCoord.getZ()+0.5, theDrop)); } + return true; } + return false; + } + + @Override + public boolean update(ItemStack stack, TileEntity tile, int elapsedTicks){ + return this.doUpdate(tile.getWorld(), tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ(), elapsedTicks, stack); + } + + @Override + public int getUsePerTick(ItemStack stack, TileEntity tile, int elapsedTicks){ + return 60; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 0ddee98c0..97142335a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -10,27 +10,33 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.items.metalists.ThePotionRings; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.client.renderer.color.IItemColor; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.Collections; import java.util.List; -public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ +public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDisplayStandItem{ public static final ThePotionRings[] allRings = ThePotionRings.values(); @@ -62,25 +68,12 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ if(!world.isRemote && stack.getItemDamage() < allRings.length){ if(player instanceof EntityPlayer){ EntityPlayer thePlayer = (EntityPlayer)player; - ItemStack equippedStack = ((EntityPlayer)player).getHeldItemMainhand(); - - ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()]; - Potion potion = Potion.getPotionById(effect.effectID); - if(!effect.needsWaitBeforeActivating || !thePlayer.isPotionActive(potion)){ - if(!((ItemPotionRing)stack.getItem()).isAdvanced){ - if(equippedStack != null && stack == equippedStack){ - thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.normalAmplifier, true, false)); - } - } - else{ - thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.advancedAmplifier, true, false)); - } - } + ItemStack equippedStack = thePlayer.getHeldItemMainhand(); + this.effectEntity(thePlayer, stack, equippedStack != null && stack == equippedStack); } } } - @Override public String getItemStackDisplayName(ItemStack stack){ String standardName = StringUtil.localize(this.getUnlocalizedName()+".name"); @@ -122,4 +115,64 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem{ } }; } + + @Override + public boolean update(ItemStack stack, TileEntity tile, int elapsedTicks){ + boolean advanced = ((ItemPotionRing)stack.getItem()).isAdvanced; + int range = advanced ? 96 : 16; + List entities = tile.getWorld().getEntitiesWithinAABB(EntityLivingBase.class, new AxisAlignedBB(tile.getPos().getX()-range, tile.getPos().getY()-range, tile.getPos().getZ()-range, tile.getPos().getX()+range, tile.getPos().getY()+range, tile.getPos().getZ()+range)); + if(entities != null && !entities.isEmpty()){ + if(advanced){ + //Give all entities the effect + for(EntityLivingBase entity : entities){ + this.effectEntity(entity, stack, true); + } + return true; + } + else{ + Potion potion = Potion.getPotionById(ThePotionRings.values()[stack.getItemDamage()].effectID); + for(EntityLivingBase entity : entities){ + if(entity.isPotionActive(potion)){ + //Sometimes make the effect switch to someone else + if(Util.RANDOM.nextInt(100) <= 0){ + break; + } + else{ + //Continue giving the entity that already has the potion effect the effect + //Otherwise, it will randomly switch around to other entities + this.effectEntity(entity, stack, true); + return true; + } + } + } + + //Give the effect to someone new if no one had it or it randomly switched + Collections.shuffle(entities); + this.effectEntity(entities.get(0), stack, true); + return true; + } + } + return false; + } + + @Override + public int getUsePerTick(ItemStack stack, TileEntity tile, int elapsedTicks){ + return 325; + } + + private void effectEntity(EntityLivingBase thePlayer, ItemStack stack, boolean canUseBasic){ + ThePotionRings effect = ThePotionRings.values()[stack.getItemDamage()]; + Potion potion = Potion.getPotionById(effect.effectID); + PotionEffect activeEffect = thePlayer.getActivePotionEffect(potion); + if(!effect.needsWaitBeforeActivating || (activeEffect == null || activeEffect.getDuration() <= 1)){ + if(!((ItemPotionRing)stack.getItem()).isAdvanced){ + if(canUseBasic){ + thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.normalAmplifier, true, false)); + } + } + else{ + thePlayer.addPotionEffect(new PotionEffect(potion, effect.activeTime, effect.advancedAmplifier, true, false)); + } + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 32d4a1b95..01ce41f0f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderCompost; +import de.ellpeck.actuallyadditions.mod.blocks.render.RenderDisplayStand; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; @@ -25,6 +26,7 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCompost; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityDisplayStand; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.FluidStateMapper; import de.ellpeck.actuallyadditions.mod.util.IColorProvidingItem; @@ -162,6 +164,7 @@ public class ClientProxy implements IProxy{ ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompost.class, new RenderCompost()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDisplayStand.class, new RenderDisplayStand()); //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png")); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 56bd2cc4d..320ecb70a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -91,6 +91,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist"); GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer"); GameRegistry.registerTileEntity(TileEntityBookletStand.class, ModUtil.MOD_ID+":tileEntityBookletStand"); + GameRegistry.registerTileEntity(TileEntityDisplayStand.class, ModUtil.MOD_ID+":tileEntityDisplayStand"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java new file mode 100644 index 000000000..091b9cc83 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java @@ -0,0 +1,140 @@ +/* + * This file ("TileEntityDisplayStand.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class TileEntityDisplayStand extends TileEntityInventoryBase implements IEnergyDisplay, IEnergyReceiver{ + + private EnergyStorage storage = new EnergyStorage(300000); + private int oldEnergy; + + public TileEntityDisplayStand(){ + super(1, "displayStand"); + } + + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote){ + if(this.slots[0] != null && !this.isRedstonePowered){ + IDisplayStandItem item = this.convertToDisplayStandItem(this.slots[0].getItem()); + if(item != null){ + int energy = item.getUsePerTick(this.slots[0], this, this.ticksElapsed); + if(this.storage.getEnergyStored() >= energy){ + if(item.update(this.slots[0], this, this.ticksElapsed)){ + this.storage.extractEnergy(energy, false); + } + } + } + } + + if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ + this.oldEnergy = this.storage.getEnergyStored(); + } + } + } + + @Override + public boolean shouldSyncSlots(){ + return true; + } + + @Override + public void markDirty(){ + super.markDirty(); + this.sendUpdate(); + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ + return true; + } + + @Override + public boolean canInsertItem(int index, ItemStack stack, EnumFacing direction){ + return this.isItemValidForSlot(index, stack); + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.writeSyncableNBT(compound, isForSync); + this.storage.writeToNBT(compound); + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.readSyncableNBT(compound, isForSync); + this.storage.readFromNBT(compound); + } + + private IDisplayStandItem convertToDisplayStandItem(Item item){ + if(item instanceof IDisplayStandItem){ + return (IDisplayStandItem)item; + } + else if(item instanceof ItemBlock){ + Block block = Block.getBlockFromItem(item); + if(block instanceof IDisplayStandItem){ + return (IDisplayStandItem)block; + } + } + return null; + } + + @Override + public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction){ + return true; + } + + @Override + public int getEnergy(){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergy(){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ + return from != EnumFacing.UP ? this.storage.receiveEnergy(maxReceive, simulate) : 0; + } + + @Override + public int getEnergyStored(EnumFacing from){ + return from != EnumFacing.UP ? this.storage.getEnergyStored() : 0; + } + + @Override + public int getMaxEnergyStored(EnumFacing from){ + return from != EnumFacing.UP ? this.storage.getMaxEnergyStored() : 0; + } + + @Override + public boolean canConnectEnergy(EnumFacing from){ + return from != EnumFacing.UP; + } + + @Override + public int getInventoryStackLimit(){ + return 1; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 4e1a7b651..67571056e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -127,11 +127,6 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } - @Override - public boolean isItemValidForSlot(int index, ItemStack stack){ - return false; - } - @Override public int getField(int id){ return 0; diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockDisplayStand.json b/src/main/resources/assets/actuallyadditions/blockstates/blockDisplayStand.json new file mode 100644 index 000000000..3540b7e6b --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockDisplayStand.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:half_slab", + "textures": { + "bottom": "actuallyadditions:blocks/blockDisplayStand", + "top": "#bottom", + "side": "actuallyadditions:blocks/blockDisplayStandSide" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 7f83ae618..0e719eeaf 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -209,6 +209,7 @@ tile.actuallyadditions.blockLaserRelayItemWhitelist.name=Advanced Item Laser Rel tile.actuallyadditions.blockItemViewer.name=Item Interface tile.actuallyadditions.blockImpureIron.name=Impure Iron tile.actuallyadditions.blockBookletStand.name=Wall-Mount Manual +tile.actuallyadditions.blockDisplayStand.name=Display Stand #ESD tile.actuallyadditions.blockInputter.name=ESD diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockDisplayStand.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDisplayStand.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d2fbe555c6e3bea4057ce76fd361c41622b72b GIT binary patch literal 486 zcmV@P)w|cF%0000ObVXQn zQ*UN;cVTj60B~VxZgehgWpp4kE-)@RY%_jN0003|Nkl7u~ zFTL~&`;wwoE0rxA`(-4Agv38mPsl`OIgAppXFN`vAm3GNekE!r@%9(u>&H3abUl^5 z2Xf@=Es_`Hr;c@dv7c26l6Zc9*{wSPKf~OcwT@2k$dDI ccjIaN2mLL*2d!UOKL7v#07*qoM6N<$f~GOJhyVZp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockDisplayStandSide.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockDisplayStandSide.png new file mode 100644 index 0000000000000000000000000000000000000000..c2cf32d38bdaf3c1794739c7ee66723f862d20da GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=G_YAk0{w5<>&kwgn@@yKdVAH{Z9pN364!{5;QX|b^2DN4hJwV*yb`^< z)Di^~Jp(<<9OF7apqlrdE{-7<{!1rV3mr1xaS8pHsW{Eq`LL)3r=*>+!-6OO#07S5 zJIZsgw>{}`#a{nOx@q60uS)C2L`$sK=-4f4t={n0J7?QWRo(LL{+jbsCDZ0k{tgzcI7Z|0*cCfACnDScSnaLmi z?Fn4=q7uc*MM586TAt%&=jq*fVv7U6!P9vMnT%V7UBhkHeXgisU&Hd}Vayk$19y0Q z9$sSk$?$zwiTsV-{@oh0N|>d@{3_I25B~PCt`>~{Yxq-cX7p`olNqMsSu2-p1bUsp M)78&qol`;+0PKyBIRF3v literal 0 HcmV?d00001 From dc7bd582e661e89471509ea00a446c136be7acbf Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 6 Jun 2016 21:29:21 +0200 Subject: [PATCH 243/322] Remove potion effect so that enough time doesn't cause two people to have the effect --- .../de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 97142335a..4391b2ec7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -135,6 +135,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi if(entity.isPotionActive(potion)){ //Sometimes make the effect switch to someone else if(Util.RANDOM.nextInt(100) <= 0){ + entity.removePotionEffect(potion); break; } else{ From 0b025fe249946aed862f78b8d4a57170d5e3c3f0 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 6 Jun 2016 22:09:23 +0200 Subject: [PATCH 244/322] Re-added invtweaks support for the storage crate --- .../mod/inventory/ContainerGiantChest.java | 2 + .../api/container/ChestContainer.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/main/java/invtweaks/api/container/ChestContainer.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index c802de8d4..84e109656 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -12,12 +12,14 @@ package de.ellpeck.actuallyadditions.mod.inventory; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; +import invtweaks.api.container.ChestContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +@ChestContainer(rowSize = 13, isLargeChest = true) public class ContainerGiantChest extends Container{ public final TileEntityGiantChest tileChest; diff --git a/src/main/java/invtweaks/api/container/ChestContainer.java b/src/main/java/invtweaks/api/container/ChestContainer.java new file mode 100644 index 000000000..9fa7dab7c --- /dev/null +++ b/src/main/java/invtweaks/api/container/ChestContainer.java @@ -0,0 +1,38 @@ +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 persistent storage component. Enables the Inventory Tweaks sorting + * buttons for this container. + */ +@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; + + // 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) + @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) + @interface IsLargeCallback { + } +} From 9a9ec02eefe994361c261db7e6fd105de174ec30 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 7 Jun 2016 23:17:06 +0200 Subject: [PATCH 245/322] Added item filters --- .../mod/creative/CreativeTab.java | 2 +- .../mod/inventory/ContainerBreaker.java | 2 +- .../mod/inventory/ContainerCanolaPress.java | 2 +- .../mod/inventory/ContainerCoalGenerator.java | 2 +- .../mod/inventory/ContainerCoffeeMachine.java | 2 +- .../mod/inventory/ContainerCrafter.java | 2 +- .../ContainerDirectionalBreaker.java | 2 +- .../mod/inventory/ContainerDrill.java | 12 +- .../mod/inventory/ContainerDropper.java | 2 +- .../mod/inventory/ContainerEnergizer.java | 2 +- .../mod/inventory/ContainerEnervator.java | 2 +- .../mod/inventory/ContainerFeeder.java | 2 +- .../inventory/ContainerFermentingBarrel.java | 2 +- .../mod/inventory/ContainerFilter.java | 258 ++++++++++++++++++ .../inventory/ContainerFluidCollector.java | 2 +- .../mod/inventory/ContainerFurnaceDouble.java | 2 +- .../mod/inventory/ContainerGiantChest.java | 2 +- .../mod/inventory/ContainerGrinder.java | 2 +- .../mod/inventory/ContainerInputter.java | 2 +- .../ContainerLaserRelayItemWhitelist.java | 2 +- .../mod/inventory/ContainerMiner.java | 2 +- .../mod/inventory/ContainerOilGenerator.java | 2 +- .../mod/inventory/ContainerPhantomPlacer.java | 2 +- .../inventory/ContainerRangedCollector.java | 2 +- .../mod/inventory/ContainerRepairer.java | 2 +- .../mod/inventory/ContainerXPSolidifier.java | 2 +- .../mod/inventory/GuiHandler.java | 7 +- .../mod/inventory/gui/GuiFilter.java | 49 ++++ .../mod/items/InitItems.java | 2 + .../mod/items/ItemDrill.java | 20 +- .../mod/items/ItemFilter.java | 60 ++++ .../mod/tile/TileEntityInputter.java | 28 +- .../TileEntityLaserRelayItemWhitelist.java | 90 ++++-- .../mod/tile/TileEntityRangedCollector.java | 13 +- .../assets/actuallyadditions/lang/en_US.lang | 6 +- .../models/item/itemFilter.json | 6 + .../textures/gui/guiFilter.png | Bin 0 -> 1724 bytes .../textures/items/itemFilter.png | Bin 0 -> 509 bytes 38 files changed, 493 insertions(+), 106 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemFilter.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/gui/guiFilter.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemFilter.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 3fb187cd1..087c750a3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -168,7 +168,7 @@ public class CreativeTab extends CreativeTabs{ this.list.add(UniversalBucket.getFilledBucket(ForgeModContainer.getInstance().universalBucket, InitFluids.fluidOil)); this.add(InitItems.itemPhantomConnector); - + this.add(InitItems.itemFilter); this.add(InitItems.itemWingsOfTheBats); this.add(InitItems.itemCoffeeSeed); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index 858ca5d3c..71c5c5c2d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -74,7 +74,7 @@ public class ContainerBreaker extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index eb980e3bf..8a666ba2a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -76,7 +76,7 @@ public class ContainerCanolaPress extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index 60773bd2f..89162aed5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -75,7 +75,7 @@ public class ContainerCoalGenerator extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index f59711d48..34902031a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -103,7 +103,7 @@ public class ContainerCoffeeMachine extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index b15018967..a57a4e66a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -74,7 +74,7 @@ public class ContainerCrafter extends Container{ return null; } - if(savedStack.stackSize == 0){ + if(savedStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index fe7181a50..b461964e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -74,7 +74,7 @@ public class ContainerDirectionalBreaker extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index 7f547b687..fb2213e5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -36,7 +36,7 @@ public class ContainerDrill extends Container{ this.inventory = inventory; for(int i = 0; i < SLOT_AMOUNT; i++){ - this.addSlotToContainer(new Slot(ContainerDrill.this.drillInventory, i, 44+i*18, 19){ + this.addSlotToContainer(new Slot(this.drillInventory, i, 44+i*18, 19){ @Override public boolean isItemValid(ItemStack stack){ return stack.getItem() instanceof ItemDrillUpgrade || stack.getItem() instanceof IEnergyContainerItem; @@ -60,10 +60,7 @@ public class ContainerDrill extends Container{ ItemStack stack = inventory.getCurrentItem(); if(stack != null && stack.getItem() instanceof ItemDrill){ - ItemStack[] slots = ((ItemDrill)stack.getItem()).getSlotsFromNBT(inventory.getCurrentItem()); - if(slots != null && slots.length > 0){ - this.drillInventory.slots = slots; - } + ItemDrill.loadSlotsFromNBT(this.drillInventory.slots, inventory.getCurrentItem()); } } @@ -103,7 +100,7 @@ public class ContainerDrill extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ @@ -134,7 +131,7 @@ public class ContainerDrill extends Container{ public void onContainerClosed(EntityPlayer player){ ItemStack stack = this.inventory.getCurrentItem(); if(stack != null && stack.getItem() instanceof ItemDrill){ - ((ItemDrill)stack.getItem()).writeSlotsToNBT(this.drillInventory.slots, this.inventory.getCurrentItem()); + ItemDrill.writeSlotsToNBT(this.drillInventory.slots, this.inventory.getCurrentItem()); } super.onContainerClosed(player); } @@ -148,7 +145,6 @@ public class ContainerDrill extends Container{ public ItemStack[] slots = new ItemStack[SLOT_AMOUNT]; - @Override public String getName(){ return "drill"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index 0143f19b1..7ac5ef2df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -74,7 +74,7 @@ public class ContainerDropper extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 97ed701d5..e99b39bd4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -111,7 +111,7 @@ public class ContainerEnergizer extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 14a9186ca..112e894b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -110,7 +110,7 @@ public class ContainerEnervator extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index f2511306e..f83139cd6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -69,7 +69,7 @@ public class ContainerFeeder extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index 2b5b55344..07090c987 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -64,7 +64,7 @@ public class ContainerFermentingBarrel extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java new file mode 100644 index 000000000..846e3d731 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java @@ -0,0 +1,258 @@ +/* + * This file ("ContainerFilter.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.inventory; + +import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; +import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable; +import de.ellpeck.actuallyadditions.mod.items.ItemDrill; +import de.ellpeck.actuallyadditions.mod.items.ItemFilter; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; + + +public class ContainerFilter extends Container{ + + public static final int SLOT_AMOUNT = 24; + + private final InventoryFilter filterInventory = new InventoryFilter(); + private final InventoryPlayer inventory; + + public ContainerFilter(InventoryPlayer inventory){ + this.inventory = inventory; + + for(int i = 0; i < 4; i++){ + for(int j = 0; j < 6; j++){ + this.addSlotToContainer(new SlotFilter(this.filterInventory, j+(i*6), 35+j*18, 10+i*18)); + } + } + + for(int i = 0; i < 3; i++){ + for(int j = 0; j < 9; j++){ + this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 94+i*18)); + } + } + for(int i = 0; i < 9; i++){ + if(i == inventory.currentItem){ + this.addSlotToContainer(new SlotImmovable(inventory, i, 8+i*18, 152)); + } + else{ + this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 152)); + } + } + + ItemStack stack = inventory.getCurrentItem(); + if(stack != null && stack.getItem() instanceof ItemFilter){ + ItemDrill.loadSlotsFromNBT(this.filterInventory.slots, inventory.getCurrentItem()); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot){ + final int inventoryStart = SLOT_AMOUNT; + final int inventoryEnd = inventoryStart+26; + final int hotbarStart = inventoryEnd+1; + final int hotbarEnd = hotbarStart+8; + + Slot theSlot = this.inventorySlots.get(slot); + + if(theSlot != null && theSlot.getHasStack()){ + ItemStack newStack = theSlot.getStack(); + ItemStack currentStack = newStack.copy(); + + //Other Slots in Inventory excluded + if(slot >= inventoryStart){ + //Shift from Inventory + // + if(slot >= inventoryStart && slot <= inventoryEnd){ + if(!this.mergeItemStack(newStack, hotbarStart, hotbarEnd+1, false)){ + return null; + } + } + else if(slot >= inventoryEnd+1 && slot < hotbarEnd+1 && !this.mergeItemStack(newStack, inventoryStart, inventoryEnd+1, false)){ + return null; + } + } + else if(!this.mergeItemStack(newStack, inventoryStart, hotbarEnd+1, false)){ + return null; + } + + if(newStack.stackSize == 0){ + theSlot.putStack(null); + } + else{ + theSlot.onSlotChanged(); + } + + if(newStack.stackSize == currentStack.stackSize){ + return null; + } + theSlot.onPickupFromSlot(player, newStack); + + return currentStack; + } + return null; + } + + @Override + public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ + if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ + //Calls the Filter's SlotClick function + return ((SlotFilter)this.getSlot(slotId)).slotClick(player); + } + else if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){ + return null; + } + else{ + return super.slotClick(slotId, dragType, clickTypeIn, player); + } + } + + @Override + public void onContainerClosed(EntityPlayer player){ + ItemStack stack = this.inventory.getCurrentItem(); + if(stack != null && stack.getItem() instanceof ItemFilter){ + ItemDrill.writeSlotsToNBT(this.filterInventory.slots, this.inventory.getCurrentItem()); + } + super.onContainerClosed(player); + } + + @Override + public boolean canInteractWith(EntityPlayer player){ + return this.filterInventory.isUseableByPlayer(player); + } + + public static class InventoryFilter implements IInventory{ + + public ItemStack[] slots = new ItemStack[SLOT_AMOUNT]; + + @Override + public String getName(){ + return "filter"; + } + + @Override + public int getInventoryStackLimit(){ + return 64; + } + + @Override + public void markDirty(){ + + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player){ + return true; + } + + @Override + public void openInventory(EntityPlayer player){ + + } + + @Override + public void closeInventory(EntityPlayer player){ + + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack){ + return true; + } + + @Override + public int getField(int id){ + return 0; + } + + @Override + public void setField(int id, int value){ + + } + + @Override + public int getFieldCount(){ + return 0; + } + + @Override + public void clear(){ + int length = this.slots.length; + this.slots = new ItemStack[length]; + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack){ + this.slots[i] = stack; + this.markDirty(); + } + + @Override + public int getSizeInventory(){ + return this.slots.length; + } + + @Override + public ItemStack getStackInSlot(int i){ + if(i < this.getSizeInventory()){ + return this.slots[i]; + } + return null; + } + + @Override + public ItemStack decrStackSize(int i, int j){ + if(this.slots[i] != null){ + ItemStack stackAt; + if(this.slots[i].stackSize <= j){ + stackAt = this.slots[i]; + this.slots[i] = null; + this.markDirty(); + return stackAt; + } + else{ + stackAt = this.slots[i].splitStack(j); + if(this.slots[i].stackSize <= 0){ + this.slots[i] = null; + } + this.markDirty(); + return stackAt; + } + } + return null; + } + + @Override + public ItemStack removeStackFromSlot(int index){ + ItemStack stack = this.slots[index]; + this.slots[index] = null; + return stack; + } + + @Override + public boolean hasCustomName(){ + return false; + } + + + @Override + public ITextComponent getDisplayName(){ + return new TextComponentTranslation(this.getName()); + } + } +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index 7624a2e5f..f622045a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -71,7 +71,7 @@ public class ContainerFluidCollector extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index 98a41acea..fdc5c6f20 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -88,7 +88,7 @@ public class ContainerFurnaceDouble extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 84e109656..2964b390e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -75,7 +75,7 @@ public class ContainerGiantChest extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index 462f5c065..3730ba761 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -99,7 +99,7 @@ public class ContainerGrinder extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 1a7eee3d7..23cbb2d74 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -86,7 +86,7 @@ public class ContainerInputter extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 79a71cddb..db269a3f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -74,7 +74,7 @@ public class ContainerLaserRelayItemWhitelist extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index 707823c7e..d7f1bff70 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -74,7 +74,7 @@ public class ContainerMiner extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index c5b43019f..9a1bbe2d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -63,7 +63,7 @@ public class ContainerOilGenerator extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index 69c980af0..ea7e57b2f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -74,7 +74,7 @@ public class ContainerPhantomPlacer extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 4742bc767..052834770 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -81,7 +81,7 @@ public class ContainerRangedCollector extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index 765fb50e4..adb34ed27 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -76,7 +76,7 @@ public class ContainerRepairer extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index 5dbbba39b..e67d4b50d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -67,7 +67,7 @@ public class ContainerXPSolidifier extends Container{ return null; } - if(newStack.stackSize == 0){ + if(newStack.stackSize <= 0){ theSlot.putStack(null); } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index b0aa01a77..fe80795ca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -74,6 +74,8 @@ public class GuiHandler implements IGuiHandler{ return new ContainerCoffeeMachine(entityPlayer.inventory, tile); case DRILL: return new ContainerDrill(entityPlayer.inventory); + case FILTER: + return new ContainerFilter(entityPlayer.inventory); case ENERGIZER: return new ContainerEnergizer(entityPlayer, tile); case ENERVATOR: @@ -140,6 +142,8 @@ public class GuiHandler implements IGuiHandler{ return new GuiCoffeeMachine(entityPlayer.inventory, tile, x, y, z, world); case DRILL: return new GuiDrill(entityPlayer.inventory); + case FILTER: + return new GuiFilter(entityPlayer.inventory); case ENERGIZER: return new GuiEnergizer(entityPlayer, tile); case ENERVATOR: @@ -194,7 +198,8 @@ public class GuiHandler implements IGuiHandler{ RANGED_COLLECTOR, MINER, BOOK_STAND, - LASER_RELAY_ITEM_WHITELIST; + LASER_RELAY_ITEM_WHITELIST, + FILTER(false); public final boolean checkTileEntity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java new file mode 100644 index 000000000..398971903 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFilter.java @@ -0,0 +1,49 @@ +/* + * This file ("GuiFilter.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.inventory.gui; + +import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiFilter extends GuiContainer{ + + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiFilter"); + + public GuiFilter(InventoryPlayer inventory){ + super(new ContainerFilter(inventory)); + this.xSize = 176; + this.ySize = 90+86; + } + + @Override + public void drawGuiContainerForegroundLayer(int x, int y){ + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, "container."+ModUtil.MOD_ID+".filter"); + } + + @Override + public void drawGuiContainerBackgroundLayer(float f, int x, int y){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + + this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+90, 0, 0, 176, 86); + + this.mc.getTextureManager().bindTexture(RES_LOC); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 90); + } +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 29ee5d294..96559cc28 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -208,12 +208,14 @@ public class InitItems{ public static Item itemPaxelCrystalWhite; public static Item itemWaterBowl; + public static Item itemFilter; public static Item itemRarmorModuleReconstructor; public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemFilter = new ItemFilter("itemFilter"); itemWaterBowl = new ItemWaterBowl("itemWaterBowl"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 47e6ad857..9338bf763 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -126,7 +126,8 @@ public class ItemDrill extends ItemEnergy{ return null; } - ItemStack[] slots = this.getSlotsFromNBT(stack); + ItemStack[] slots = new ItemStack[ContainerDrill.SLOT_AMOUNT]; + loadSlotsFromNBT(slots, stack); if(slots != null && slots.length > 0){ for(ItemStack slotStack : slots){ if(slotStack != null && slotStack.getItem() instanceof ItemDrillUpgrade){ @@ -143,18 +144,12 @@ public class ItemDrill extends ItemEnergy{ * Gets all of the Slots from NBT * * @param stack The Drill - * @return All of the Slots */ - public ItemStack[] getSlotsFromNBT(ItemStack stack){ + public static void loadSlotsFromNBT(ItemStack[] slots, ItemStack stack){ NBTTagCompound compound = stack.getTagCompound(); - if(compound == null){ - return null; + if(compound != null){ + TileEntityInventoryBase.loadSlots(slots, compound); } - - ItemStack[] slots = new ItemStack[ContainerDrill.SLOT_AMOUNT]; - TileEntityInventoryBase.loadSlots(slots, compound); - - return slots; } @@ -183,7 +178,8 @@ public class ItemDrill extends ItemEnergy{ //Checks for Energy Containers in the Upgrade Slots and charges the Drill from them @Override public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5){ - ItemStack[] slots = this.getSlotsFromNBT(stack); + ItemStack[] slots = new ItemStack[ContainerDrill.SLOT_AMOUNT]; + loadSlotsFromNBT(slots, stack); if(slots != null && slots.length > 0){ for(ItemStack slotStack : slots){ if(slotStack != null && slotStack.getItem() instanceof IEnergyContainerItem){ @@ -395,7 +391,7 @@ public class ItemDrill extends ItemEnergy{ * @param slots The Slots * @param stack The Drill */ - public void writeSlotsToNBT(ItemStack[] slots, ItemStack stack){ + public static void writeSlotsToNBT(ItemStack[] slots, ItemStack stack){ NBTTagCompound compound = stack.getTagCompound(); if(compound == null){ compound = new NBTTagCompound(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java new file mode 100644 index 000000000..e94fb72e4 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java @@ -0,0 +1,60 @@ +/* + * This file ("ItemFilter.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; +import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; +import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; +import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemFilter extends ItemBase{ + + public ItemFilter(String name){ + super(name); + this.setMaxStackSize(1); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.UNCOMMON; + } + + @Override + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + if(!world.isRemote){ + player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.FILTER.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); + } + return new ActionResult(EnumActionResult.PASS, stack); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced){ + ItemStack[] slots = new ItemStack[ContainerFilter.SLOT_AMOUNT]; + ItemDrill.loadSlotsFromNBT(slots, stack); + if(slots != null && slots.length > 0){ + for(ItemStack slot : slots){ + if(slot != null && slot.getItem() != null){ + tooltip.add(slot.getItem().getItemStackDisplayName(slot)); + } + } + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 221b70b05..6a7d66e08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; +import com.sun.org.apache.bcel.internal.generic.PUTFIELD; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.network.gui.INumberReactor; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -265,31 +266,8 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt * @return If the Item is filtered correctly */ private boolean checkBothFilters(ItemStack stack, boolean output){ - return this.checkFilter(stack, !output, output ? this.isPutWhitelist : this.isPullWhitelist); - } - - /** - * Checks the Whitelist/Blacklist to see if Item fits - * - * @param stack The Stack to check for - * @param isPull If we're pulling or putting - * @param isWhitelist If it's set to white- or Blacklist - * @return Is Item on White-/Blacklist? - */ - private boolean checkFilter(ItemStack stack, boolean isPull, boolean isWhitelist){ - if(!this.isAdvanced){ - return true; - } - - int slotStart = isPull ? PULL_FILTER_START : PUT_FILTER_START; - int slotStop = slotStart+12; - - for(int i = slotStart; i < slotStop; i++){ - if(this.slots[i] != null && this.slots[i].isItemEqual(stack)){ - return isWhitelist; - } - } - return !isWhitelist; + int slotStart = output ? PUT_FILTER_START : PULL_FILTER_START; + return TileEntityLaserRelayItemWhitelist.checkFilter(stack, output ? this.isPutWhitelist : this.isPullWhitelist, this.slots, slotStart, slotStart+12); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index c8226572e..85385c94d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -10,8 +10,10 @@ package de.ellpeck.actuallyadditions.mod.tile; +import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; +import de.ellpeck.actuallyadditions.mod.items.ItemDrill; +import de.ellpeck.actuallyadditions.mod.items.ItemFilter; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -20,7 +22,6 @@ import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentTranslation; import net.minecraftforge.items.IItemHandler; -import java.util.Arrays; import java.util.List; public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem implements IButtonReactor{ @@ -164,19 +165,8 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem @Override public boolean isWhitelisted(ItemStack stack, boolean output){ - return this.checkFilter(stack, !output, output ? this.isRightWhitelist : this.isLeftWhitelist); - } - - private boolean checkFilter(ItemStack stack, boolean left, boolean isWhitelist){ - int slotStart = left ? 0 : 12; - int slotStop = slotStart+12; - - for(int i = slotStart; i < slotStop; i++){ - if(this.slots[i] != null && this.slots[i].isItemEqual(stack)){ - return isWhitelist; - } - } - return !isWhitelist; + int slotStart = output ? 12 : 0; + return checkFilter(stack, output ? this.isRightWhitelist : this.isLeftWhitelist, this.slots, slotStart, slotStart+12); } @Override @@ -189,6 +179,30 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem compound.setBoolean("RightWhitelist", this.isRightWhitelist); } + public static boolean checkFilter(ItemStack stack, boolean isWhitelist, ItemStack[] slots, int start, int end){ + if(stack != null){ + for(int i = start; i < end; i++){ + if(slots[i] != null){ + if(slots[i].isItemEqual(stack)){ + return isWhitelist; + } + else if(slots[i].getItem() instanceof ItemFilter){ + ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT]; + ItemDrill.loadSlotsFromNBT(filterSlots, slots[i]); + if(filterSlots != null && filterSlots.length > 0){ + for(ItemStack filterSlot : filterSlots){ + if(filterSlot != null && filterSlot.isItemEqual(stack)){ + return isWhitelist; + } + } + } + } + } + } + } + return !isWhitelist; + } + @Override public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.readSyncableNBT(compound, isForSync); @@ -219,20 +233,52 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem int slotStart = output ? 12 : 0; int slotStop = slotStart+12; + for(int i = 0; i < this.slots.length; i++){ + if(this.slots[i] != null){ + if(this.slots[i].getItem() instanceof ItemFilter){ + ItemDrill.writeSlotsToNBT(new ItemStack[ContainerFilter.SLOT_AMOUNT], this.slots[i]); + } + else{ + this.slots[i] = null; + } + } + } + List handlers = this.getAllHandlersAround(); for(IItemHandler handler : handlers){ for(int i = 0; i < handler.getSlots(); i++){ ItemStack stack = handler.getStackInSlot(i); if(stack != null){ - if(!ItemUtil.contains(Arrays.copyOfRange(this.slots, slotStart, slotStop), stack, false)){ - for(int j = slotStart; j < slotStop; j++){ - if(this.slots[j] == null || this.slots[j].stackSize <= 0){ - ItemStack whitelistStack = stack.copy(); - whitelistStack.stackSize = 1; - this.slots[j] = whitelistStack; - break; + ItemStack copy = stack.copy(); + copy.stackSize = 1; + + for(int k = slotStart; k < slotStop; k++){ + if(this.slots[k] != null){ + if(this.slots[k].getItem() instanceof ItemFilter){ + ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT]; + ItemDrill.loadSlotsFromNBT(filterSlots, this.slots[k]); + + boolean did = false; + if(filterSlots != null && filterSlots.length > 0){ + for(int j = 0; j < filterSlots.length; j++){ + if(filterSlots[j] == null || filterSlots[j].stackSize <= 0){ + filterSlots[j] = copy; + did = true; + break; + } + } + } + + if(did){ + ItemDrill.writeSlotsToNBT(filterSlots, this.slots[k]); + break; + } } } + else{ + this.slots[k] = copy; + break; + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index 7fe3f936b..8a67053b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -55,7 +55,7 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement for(EntityItem item : items){ if(!item.isDead && item.getEntityItem() != null){ ItemStack toAdd = item.getEntityItem().copy(); - if(this.checkFilter(toAdd)){ + if(TileEntityLaserRelayItemWhitelist.checkFilter(toAdd, this.isWhitelist, this.slots, WHITELIST_START, WHITELIST_START+12)){ ArrayList checkList = new ArrayList(); checkList.add(toAdd); if(WorldUtil.addToInventory(this, 0, WHITELIST_START, checkList, EnumFacing.UP, false, true)){ @@ -74,17 +74,6 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement } } - private boolean checkFilter(ItemStack stack){ - int slotStop = WHITELIST_START+12; - - for(int i = WHITELIST_START; i < slotStop; i++){ - if(this.slots[i] != null && this.slots[i].isItemEqual(stack)){ - return this.isWhitelist; - } - } - return !this.isWhitelist; - } - @Override public boolean isItemValidForSlot(int i, ItemStack stack){ return false; diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 0e719eeaf..0c413a3b7 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -490,6 +490,7 @@ item.actuallyadditions.itemSpawnerChanger.name=Spawner Changer item.actuallyadditions.itemMiscSpawnerShard.name=Spawner Shards item.actuallyadditions.itemMinecartFireworkBox.name=Firework Box Cart item.actuallyadditions.itemWaterBowl.name=Bowl of Water +item.actuallyadditions.itemFilter.name=Item Filter #Tooltips tooltip.actuallyadditions.onSuffix.desc=On @@ -542,10 +543,10 @@ info.actuallyadditions.gui.coffee=Coffee info.actuallyadditions.gui.ok=Ok info.actuallyadditions.gui.the=the info.actuallyadditions.gui.smart=Smart Whitelist -info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventories adjacent to this relay will be added to this part of the white- or blacklist. +info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventories adjacent to this relay will be added to this part of the white- or blacklist. Adding Item Filters to the list before will cause them to also be filled. Caution: Non-Item Filters previously added to the list will be removed and Item Filters will be cleared! info.actuallyadditions.inputter.info.1=This is the first Slot in the connected Inventory to

at. info.actuallyadditions.inputter.info.2=This is the slot after the last Slot in the connected Inventory to

at. What that means: If you, for example, write 2 in the field to the left and 5 in this one, it will

at Slot 2, 3, and 4. -info.actuallyadditions.inputter.whitelistInfo=When pressing this, this side's whitelist mode will be changed. To let all items through, an empty blacklist can be used, to let no items through, an empty whitelist can be used. To configure certain items, place them in the slots. +info.actuallyadditions.inputter.whitelistInfo=When pressing this, this side's whitelist mode will be changed. To let all items through, an empty blacklist can be used, to let no items through, an empty whitelist can be used. To configure certain items, place them or configured Item Filters in the slots. info.actuallyadditions.noLens=No Lens info.actuallyadditions.booklet.manualName.1=Actually Additions info.actuallyadditions.booklet.manualName.2=Manual @@ -586,6 +587,7 @@ container.actuallyadditions.directionalBreaker.name=Long-Range Breaker container.actuallyadditions.rangedCollector.name=Ranged Collector container.actuallyadditions.miner.name=Vertical Digger container.actuallyadditions.laserRelayItemWhitelist.name=Laser Relay +container.actuallyadditions.filter.name=Item Filter #Update Information info.actuallyadditions.update.generic=[{"text":"There is an Update for "},{"text":"Actually Additions ","color":"dark_green"},{"text":"available!","color":"none"}] diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemFilter.json b/src/main/resources/assets/actuallyadditions/models/item/itemFilter.json new file mode 100644 index 000000000..2f3a59911 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemFilter.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemFilter" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiFilter.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiFilter.png new file mode 100644 index 0000000000000000000000000000000000000000..664ff5067316d10254de6ee5bc8ab02a8d4f6e18 GIT binary patch literal 1724 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6&2?&#~tz_78O`%fY(kk47* z5n0T@z_%8J8TsBfqyq&dN?apKg7ec#$`gxH8440J^GfvcQcDy}^bGVYbByc!7#P^B zJY5_^D&pSWaLkK#7hnmve@gx1$`bwf(~evBO*pVpQDHKdmHd0gtq&K8znaCiGXMX^ z_@dtqU%P*wo_GH`Z~g992k-v<^YgOcgZOn-d%QiL%=`KA@o^RF`gq$vj~TXHI#K(G z;X=&$`;0rPWf*3?{%Orn-p}k%Y+KL%;9Vg@#=7V48SdEfF`WJS=REs^-{0T+KY#mn zZQZ|{Gd^3)yj(WJg2Cka=lU9kpf%}2&*pqSWtrRF$?Rafv@>khk!I`k$8)wFKEk+Q z<|P+x-$w`MZZ7n@od~qgCv(wMwT}UIY5H!tq#}36Qu_H8Sv8__3h}?2(_4ItPnf+S%}aQ#Nhf>xxnl!o z{Ym$Y^HR?xub&0+L3plQJ#&SbX8G?wn+=~A8bSOC3{CX|^HWAnsGvv6lf@C|jh=4| zKMRT1)n@(s8Es}y*rb&OUyhVV>`) zyLSI`&Q#7h0|~p=KYw$6P#;D)h)}4Ymmfbhu5CV3`6d)n20UAJcBe&AKe#+9XLu*a z-tesIAK!tyk1z>%2XskIMF-yt761+}7)&kS0000ObVXQn zQ*UN;cVTj60B~VxZgehgWpp4kE-)@RY%_jN0004KNkld(+6VpkaOYxqYvFM=KIY*D+wE_zwrlVad_rqA z(P*fUWa)_0hMPApSKBq{x9eQpycy6|i{}2Ti7SA7!D; znOS-U^oK#Rx|EXrpjpzXmHp>qNvBqp@AL2n_YRrJEv8p%00000NkvXXu0mjf$i3cn literal 0 HcmV?d00001 From 470e7b5518d6830af993c01ac26fd7ba3c9dabf8 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 7 Jun 2016 23:18:30 +0200 Subject: [PATCH 246/322] Only clear slots on right side! --- .../mod/tile/TileEntityLaserRelayItemWhitelist.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 85385c94d..62e14241d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -233,7 +233,7 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem int slotStart = output ? 12 : 0; int slotStop = slotStart+12; - for(int i = 0; i < this.slots.length; i++){ + for(int i = slotStart; i < slotStop; i++){ if(this.slots[i] != null){ if(this.slots[i].getItem() instanceof ItemFilter){ ItemDrill.writeSlotsToNBT(new ItemStack[ContainerFilter.SLOT_AMOUNT], this.slots[i]); From 22e886ded2b9fd22cadc17f4595fd0fead4f6b63 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 7 Jun 2016 23:22:26 +0200 Subject: [PATCH 247/322] Fixed a crash when having phantom liquifaces connected to non-tileentities Closes #111 --- .../mod/tile/TileEntityPhantomLiquiface.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index 1685db6da..f5d968757 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; @@ -37,6 +38,12 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface{ @Override public boolean isBoundThingInRange(){ - return super.isBoundThingInRange() && this.worldObj.getTileEntity(this.boundPosition).hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + if(super.isBoundThingInRange()){ + TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); + if(tile != null){ + return tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + } + } + return false; } } From 1547fdaa9e148d834374e5e5499a303ad6031ee9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 8 Jun 2016 18:57:57 +0200 Subject: [PATCH 248/322] Made player interface display the amount of RF it has --- .../mod/tile/TileEntityPlayerInterface.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index 629dfb84f..efa5ae58c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -20,7 +20,7 @@ import net.minecraft.util.EnumFacing; import java.util.UUID; -public class TileEntityPlayerInterface extends TileEntityInventoryBase implements IEnergyReceiver{ +public class TileEntityPlayerInterface extends TileEntityInventoryBase implements IEnergyReceiver, IEnergyDisplay{ public static final int DEFAULT_RANGE = 32; public UUID connectedPlayer; @@ -206,4 +206,14 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } + + @Override + public int getEnergy(){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergy(){ + return this.storage.getMaxEnergyStored(); + } } From ddaadd25d5eacbeec3b9cbc9df54ba1477685a2c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 8 Jun 2016 19:11:06 +0200 Subject: [PATCH 249/322] Made damage sources display the player's name --- .../de/ellpeck/actuallyadditions/mod/misc/DamageSources.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java index 6c4213b74..ab87f57af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DamageSources.java @@ -32,6 +32,6 @@ public class DamageSources extends DamageSource{ @Override public ITextComponent getDeathMessage(EntityLivingBase entity){ String locTag = "death."+ModUtil.MOD_ID+"."+this.damageType+"."+(Util.RANDOM.nextInt(this.messageCount)+1); - return new TextComponentTranslation(String.format(locTag, entity.getName())); + return new TextComponentTranslation(locTag, entity.getName()); } } From 75d43d88b425896c8639185a71326dce34f0a4bd Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 8 Jun 2016 21:09:41 +0200 Subject: [PATCH 250/322] Added a config option to only display the laser relay particles when holding a laser wrench. Closes #113 --- .../mod/config/values/ConfigBoolValues.java | 1 + .../mod/tile/TileEntityLaserRelay.java | 21 +++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index f0f2f6798..c5097b173 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -52,6 +52,7 @@ public enum ConfigBoolValues{ BOOKLET_TEXT_TO_FILE("Booklet Text to File", ConfigCategories.OTHER, false, "Should the entire text of the booklet be put into a new file in the Minecraft Folder on startup or resource reload. This is for debug purposes only and shouldn't really ever be needed."), WATER_BOWL("Water Bowl", ConfigCategories.OTHER, true, "If right-clicking a bowl on water should create a water bowl"), + LASER_WRENCH_HOLDING_PARTICLES("Laser Wrench Holding Particles", ConfigCategories.OTHER, false, "If particles of laser devices should only render when holding a Laser Wrench"), LESS_SOUND("Less Sound", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less sounds"), LESS_PARTICLES("Less Particles", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less particles"), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 38c2f630c..97519184a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -11,12 +11,16 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.items.ItemLaserWrench; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.ConnectionPair; import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import io.netty.util.internal.ConcurrentSet; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.BlockPos; @@ -83,12 +87,17 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ @SideOnly(Side.CLIENT) public void renderParticles(){ if(Util.RANDOM.nextInt(ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 16 : 8) == 0){ - BlockPos thisPos = this.pos; - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(thisPos, this.worldObj); - if(network != null){ - for(ConnectionPair aPair : network.connections){ - if(aPair.contains(thisPos) && PosUtil.areSamePos(thisPos, aPair.positions[0])){ - PacketParticle.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if(player != null){ + ItemStack stack = player.getHeldItemMainhand(); + if(!ConfigBoolValues.LASER_WRENCH_HOLDING_PARTICLES.isEnabled() || (stack != null && stack.getItem() instanceof ItemLaserWrench)){ + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); + if(network != null){ + for(ConnectionPair aPair : network.connections){ + if(aPair.contains(this.pos) && PosUtil.areSamePos(this.pos, aPair.positions[0])){ + PacketParticle.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + } + } } } } From 12de29805752dc4f8c3dedf9607bc32990bd184d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 8 Jun 2016 23:03:36 +0200 Subject: [PATCH 251/322] Fixed miner sometimes crashing when placed next to certain blocks Closes #114 --- .../mod/tile/TileEntityMiner.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 6c394eddb..b7b798e2e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -139,21 +139,24 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR return true; } else{ - int[] ids = OreDictionary.getOreIDs(new ItemStack(block, 1, meta)); - for(int id : ids){ - String name = OreDictionary.getOreName(id); - if(name.startsWith("ore") || name.startsWith("denseore")){ - return true; - } - } - - String reg = block.getRegistryName().toString(); - if(!reg.isEmpty()){ - for(String string : ConfigStringListValues.MINER_EXTRA_WHITELIST.getValue()){ - if(reg.equals(string)){ + ItemStack stack = new ItemStack(block, 1, meta); + if(stack != null){ + int[] ids = OreDictionary.getOreIDs(stack); + for(int id : ids){ + String name = OreDictionary.getOreName(id); + if(name.startsWith("ore") || name.startsWith("denseore")){ return true; } } + + String reg = block.getRegistryName().toString(); + if(!reg.isEmpty()){ + for(String string : ConfigStringListValues.MINER_EXTRA_WHITELIST.getValue()){ + if(reg.equals(string)){ + return true; + } + } + } } } } From e944ef6bbfe2d17894de8116503abc40eccf2c5b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 8 Jun 2016 23:04:06 +0200 Subject: [PATCH 252/322] This makes more sense. --- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index b7b798e2e..ef662df16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -140,7 +140,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } else{ ItemStack stack = new ItemStack(block, 1, meta); - if(stack != null){ + if(stack.getItem() != null){ int[] ids = OreDictionary.getOreIDs(stack); for(int id : ids){ String name = OreDictionary.getOreName(id); From 63de88464b586c474313ca0a111db7258207a23d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 9 Jun 2016 17:39:01 +0200 Subject: [PATCH 253/322] Filter and Display stand recipe and docs --- .../actuallyadditions/mod/booklet/InitBooklet.java | 2 ++ .../mod/config/values/ConfigCrafting.java | 4 +++- .../actuallyadditions/mod/crafting/BlockCrafting.java | 11 +++++++++++ .../actuallyadditions/mod/crafting/ItemCrafting.java | 10 ++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 9 ++++++++- 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 351532e58..4543ce866 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -119,6 +119,7 @@ public class InitBooklet{ new BookletChapter("repairer", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockItemRepairer), new PageCrafting(1, BlockCrafting.recipeRepairer).addTextReplacement("", TileEntityItemRepairer.ENERGY_USE)); new BookletChapter("longRangeBreaker", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockDirectionalBreaker), new PageTextOnly(1).addTextReplacement("", TileEntityDirectionalBreaker.ENERGY_USE).addTextReplacement("", TileEntityDirectionalBreaker.RANGE), new PageCrafting(2, BlockCrafting.recipeDirectionalBreaker).setPageStacksWildcard()); new BookletChapter("playerInterface", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockPlayerInterface), new PageTextOnly(1).addTextReplacement("", TileEntityPlayerInterface.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipePlayerInterface).setNoText()).setSpecial(); + new BookletChapter("displayStand", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockDisplayStand), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeDisplayStand).setNoText()).setSpecial(); //RF Generating Blocks new BookletChapter("solarPanel", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFurnaceSolar), new PageTextOnly(1).addTextReplacement("", TileEntityFurnaceSolar.PRODUCE), new PageCrafting(2, BlockCrafting.recipeSolar).setNoText()); @@ -146,6 +147,7 @@ public class InitBooklet{ } new BookletChapter("potionRings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemPotionRing), potionRingPages.toArray(new BookletPage[potionRingPages.size()])); new BookletChapter("spawnerChanger", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemSpawnerChanger), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeSpawnerChanger).setNoText()); + new BookletChapter("itemFilter", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitItems.itemFilter), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeFilter).setNoText()).setImportant(); //RF Using Items new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(3, ItemCrafting.recipesDrillColoring), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java index 6e730e6a5..e10f087b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigCrafting.java @@ -161,7 +161,9 @@ public enum ConfigCrafting{ FIREWORK_BOX("Firework Box", ConfigCategories.BLOCKS_CRAFTING), ENDER_STAR("Ender Star", ConfigCategories.ITEMS_CRAFTING), SPAWNER_CHANGER("Spawner Changer", ConfigCategories.ITEMS_CRAFTING), - ITEM_INTERFACE("Item Interface", ConfigCategories.BLOCKS_CRAFTING); + ITEM_INTERFACE("Item Interface", ConfigCategories.BLOCKS_CRAFTING), + DISPLAY_STAND("Display Stand", ConfigCategories.BLOCKS_CRAFTING), + FILTER("Item Filter", ConfigCategories.ITEMS_CRAFTING); public final String name; public final String category; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index 2c2374221..d4598cf78 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -87,6 +87,7 @@ public class BlockCrafting{ public static IRecipe recipeItemInterface; public static IRecipe recipeBookStand; public static IRecipe recipePlayerInterface; + public static IRecipe recipeDisplayStand; public static void init(){ @@ -104,6 +105,16 @@ public class BlockCrafting{ recipeFireworkBox = RecipeUtil.lastIRecipe(); } + //Display Stand + if(ConfigCrafting.DISPLAY_STAND.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockDisplayStand), + " R ", "EEE", "GGG", + 'R', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL_ADVANCED.ordinal()), + 'E', new ItemStack(InitBlocks.blockTestifiBucksGreenWall), + 'G', new ItemStack(InitBlocks.blockTestifiBucksWhiteWall))); + recipeDisplayStand = RecipeUtil.lastIRecipe(); + } + //Miner if(ConfigCrafting.MINER.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockMiner), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 858e31c46..79153cf4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -85,6 +85,7 @@ public class ItemCrafting{ public static IRecipe recipeEnderStar; public static IRecipe recipeRarmorModuleReconstructor; public static IRecipe recipeSpawnerChanger; + public static IRecipe recipeFilter; public static void init(){ @@ -117,6 +118,15 @@ public class ItemCrafting{ recipeChestToCrateUpgrade = RecipeUtil.lastIRecipe(); } + //Filter + if(ConfigCrafting.FILTER.isEnabled()){ + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemFilter), + "III", "IQI", "III", + 'I', new ItemStack(Blocks.IRON_BARS), + 'Q', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); + recipeFilter = RecipeUtil.lastIRecipe(); + } + //Crate Keeper if(ConfigCrafting.CRATE_KEEPER.isEnabled()){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemCrateKeeper), diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 0c413a3b7..436e1cf78 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -892,4 +892,11 @@ booklet.actuallyadditions.chapter.waterBowl.name=Bowl of Water booklet.actuallyadditions.chapter.waterBowl.text.1=The Bowl of Water can be obtained by right-cliking a bowl on water anywhere in the world. When the Bowl of Water is then right-clicked onto a block, the water will be placed, much like a Bucket. This can be used, for example, for early game farms. booklet.actuallyadditions.chapter.playerInterface.name=Player Interface -booklet.actuallyadditions.chapter.playerInterface.text.1=The Player Interface works in a similar way to the Phantomface, except it is connected to a player instead of a block, and the connection is established by placing it down. When inputting items, they will move to the player's inventory. Also, when inputting RF, it will charge the items in the player's inventory. It has a default range of blocks, however, it can be expanded by placing up to 3 Phantom Boosters on top of it. \ No newline at end of file +booklet.actuallyadditions.chapter.playerInterface.text.1=The Player Interface works in a similar way to the Phantomface, except it is connected to a player instead of a block, and the connection is established by placing it down. When inputting items, they will move to the player's inventory. Also, when inputting RF, it will charge the items in the player's inventory. It has a default range of blocks, however, it can be expanded by placing up to 3 Phantom Boosters on top of it. + +booklet.actuallyadditions.chapter.displayStand.name=Display Stand +booklet.actuallyadditions.chapter.displayStand.text.1=The Display Stand is a block that can, for one, display any item or block by right-clicking with it onto the display stand. It will then be floating around on top. To take it out of there again, just right-click with an empty hand. The other feature, however, is that some items can be put onto it, having special effects. This, however, will require the stand to get RF. Read more on the next page. +booklet.actuallyadditions.chapter.displayStand.text.2=The Leaf Blower and Advanced Leaf Blower can be placed onto the display stand, resulting in the grass and leaves around it to be blown away. Potion Rings can be placed onto the display stand. The normal version will give the specified potion effect to only one living entity in a small area, while the advanced version will give a potion effect to all living entities in a big area while using up a significant amount of RF. + +booklet.actuallyadditions.chapter.itemFilter.name=Item Filter +booklet.actuallyadditions.chapter.itemFilter.text.1=The Item Filter can be used in Advanced Item Laser Relays, ESDs and Ranged Collectors to enlargen the size of their whitelist. This can be done by right-clicking with the filter in hand and placing items to be filtered inside of it. The filter can then be placed into any whitelist slot in the desired machine. For more information on this, hover over the whitelist buttons in the GUIs of whitelistable machines! \ No newline at end of file From 527c1533e40c80e97a01530341ef45202a631929 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 9 Jun 2016 17:49:26 +0200 Subject: [PATCH 254/322] r41! --- build.gradle | 2 +- update/changelog.md | 15 +++++++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 7000c4cc8..129760455 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r40" +version = "1.9.4-r41" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index b914f8f81..a81c2967b 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,18 @@ +# 1.9.4-r41 +* Changed white- and blacklists of laser relays and ESDs to be for putting and pulling. Check them in your world, they might all not work like you want them to anymore! +* Added item filters +* Made ESD's whitelist be a blacklist by default when placing it down +* Added display stand +* Made leaf blower work on display stand +* Made potion rings work on display stand +* Re-add invtweaks support for the storage crate +* Fixed a crash when having phantom liquifaces connected to a non-tileentity +* Made player interface display the amount of RF it has stored +* Made damage source from Reconstructor display properly +* Added a config option to only display the laser relay particles when holding a laser wrench +* Fixed miner sometimes crashing when placed next to certain blocks +* + # 1.9.4-r40 * Fixed a bug with Laser Relays sometimes randomly disconnecting on chunk load ### You only need this when you have been or are wanting to use Laser Relays of any sort. This version fixes a hideous bug that caused them to randomly disconnect when re-loading chunks for a reason that makes absolutely no sense to me and the people I asked. If you want to know what the bug was, [click here](https://github.com/Ellpeck/ActuallyAdditions/commit/d46bb306d87da57ea180afcd9e6cc00fc96637ef). Again, sorry for the amount of updates, this has just been driving me crazy. diff --git a/update/updateVersions.properties b/update/updateVersions.properties index a1305ea9f..1d29eb425 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=40 \ No newline at end of file +1.9.4=41 \ No newline at end of file From ccb162820b5a6762fb1ffdcce124b898f8ab5f9c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 9 Jun 2016 21:14:43 +0200 Subject: [PATCH 255/322] This is going to make Booty Toast sad. --- .../de/ellpeck/actuallyadditions/mod/items/ItemDrill.java | 6 ++++++ update/changelog.md | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 9338bf763..b417aa025 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -382,6 +382,12 @@ public class ItemDrill extends ItemEnergy{ efficiency += 8.0F; } } + if(this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.THREE_BY_THREE)){ + efficiency *= 0.5F; + if(this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FIVE_BY_FIVE)){ + efficiency *= 0.35F; + } + } return efficiency; } diff --git a/update/changelog.md b/update/changelog.md index a81c2967b..d88768380 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -11,7 +11,6 @@ * Made damage source from Reconstructor display properly * Added a config option to only display the laser relay particles when holding a laser wrench * Fixed miner sometimes crashing when placed next to certain blocks -* # 1.9.4-r40 * Fixed a bug with Laser Relays sometimes randomly disconnecting on chunk load From 4b8d85fd1145298e80a7be3f16b864b5450b83c9 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 9 Jun 2016 23:43:54 +0200 Subject: [PATCH 256/322] Fixed a bug with a non-advanced ESD crashing once trying to put items through it. Yes, really. --- .../actuallyadditions/mod/tile/TileEntityInputter.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 6a7d66e08..9d2b4dcde 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -266,8 +266,13 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt * @return If the Item is filtered correctly */ private boolean checkBothFilters(ItemStack stack, boolean output){ - int slotStart = output ? PUT_FILTER_START : PULL_FILTER_START; - return TileEntityLaserRelayItemWhitelist.checkFilter(stack, output ? this.isPutWhitelist : this.isPullWhitelist, this.slots, slotStart, slotStart+12); + if(!this.isAdvanced){ + return true; + } + else{ + int slotStart = output ? PUT_FILTER_START : PULL_FILTER_START; + return TileEntityLaserRelayItemWhitelist.checkFilter(stack, output ? this.isPutWhitelist : this.isPullWhitelist, this.slots, slotStart, slotStart+12); + } } /** From a26db02ebe5e506085114f85b1f5ec4d86058ff1 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 10 Jun 2016 13:57:52 +0200 Subject: [PATCH 257/322] Changed ESD to allow higher numbers of slots and also have no limit on the max number to input so that you can basically make it pull from infinitely many slots if the amount of slots present is able to change --- .../mod/inventory/ContainerInputter.java | 4 +- .../mod/inventory/gui/GuiInputter.java | 48 +++++++++--------- .../mod/tile/TileEntityInputter.java | 34 +++++++------ .../textures/gui/guiInputter.png | Bin 3900 -> 3842 bytes .../textures/gui/guiInputterAdvanced.png | Bin 1997 -> 2662 bytes 5 files changed, 44 insertions(+), 42 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 23cbb2d74..87a82485e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -46,11 +46,11 @@ public class ContainerInputter extends Container{ for(int i = 0; i < 3; i++){ for(int j = 0; j < 9; j++){ - this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 97+i*18+(isAdvanced ? GuiInputter.OFFSET_ADVANCED : 0))); + this.addSlotToContainer(new Slot(inventory, j+i*9+9, 8+j*18, 101+i*18+(isAdvanced ? GuiInputter.OFFSET_ADVANCED : 0))); } } for(int i = 0; i < 9; i++){ - this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 155+(isAdvanced ? GuiInputter.OFFSET_ADVANCED : 0))); + this.addSlotToContainer(new Slot(inventory, i, 8+i*18, 159+(isAdvanced ? GuiInputter.OFFSET_ADVANCED : 0))); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index d586d4b19..e48a212a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -40,7 +40,7 @@ import java.util.List; public class GuiInputter extends GuiContainer{ public static final int OFFSET_ADVANCED = 12+36; - public static final String[] sideString = new String[]{ + public static final String[] SIDES = new String[]{ StringUtil.localize("info."+ModUtil.MOD_ID+".gui.disabled"), StringUtil.localize("info."+ModUtil.MOD_ID+".gui.up"), StringUtil.localize("info."+ModUtil.MOD_ID+".gui.down"), @@ -48,8 +48,8 @@ public class GuiInputter extends GuiContainer{ StringUtil.localize("info."+ModUtil.MOD_ID+".gui.east"), StringUtil.localize("info."+ModUtil.MOD_ID+".gui.south"), StringUtil.localize("info."+ModUtil.MOD_ID+".gui.west")}; - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiInputter"); - private static final ResourceLocation resLocAdvanced = AssetUtil.getGuiLocation("guiInputterAdvanced"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiInputter"); + private static final ResourceLocation RES_LOC_ADVANCED = AssetUtil.getGuiLocation("guiInputterAdvanced"); public final TileEntityInputter tileInputter; private final int x; private final int y; @@ -71,7 +71,7 @@ public class GuiInputter extends GuiContainer{ this.z = z; this.world = world; this.xSize = 176; - this.ySize = 93+86+(isAdvanced ? OFFSET_ADVANCED : 0); + this.ySize = 97+86+(isAdvanced ? OFFSET_ADVANCED : 0); this.isAdvanced = isAdvanced; } @@ -80,18 +80,18 @@ public class GuiInputter extends GuiContainer{ public void initGui(){ super.initGui(); - this.fieldPullStart = new GuiTextField(3000, this.fontRendererObj, this.guiLeft+13, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); - this.fieldPullStart.setMaxStringLength(4); + this.fieldPullStart = new GuiTextField(3000, this.fontRendererObj, this.guiLeft+6, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 34, 8); + this.fieldPullStart.setMaxStringLength(5); this.fieldPullStart.setEnableBackgroundDrawing(false); - this.fieldPullEnd = new GuiTextField(3001, this.fontRendererObj, this.guiLeft+50, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); - this.fieldPullEnd.setMaxStringLength(4); + this.fieldPullEnd = new GuiTextField(3001, this.fontRendererObj, this.guiLeft+50, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 34, 8); + this.fieldPullEnd.setMaxStringLength(5); this.fieldPullEnd.setEnableBackgroundDrawing(false); - this.fieldPutStart = new GuiTextField(3002, this.fontRendererObj, this.guiLeft+98, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); - this.fieldPutStart.setMaxStringLength(4); + this.fieldPutStart = new GuiTextField(3002, this.fontRendererObj, this.guiLeft+91, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 34, 8); + this.fieldPutStart.setMaxStringLength(5); this.fieldPutStart.setEnableBackgroundDrawing(false); - this.fieldPutEnd = new GuiTextField(3004, this.fontRendererObj, this.guiLeft+135, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 27, 8); - this.fieldPutEnd.setMaxStringLength(4); + this.fieldPutEnd = new GuiTextField(3004, this.fontRendererObj, this.guiLeft+135, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0), 34, 8); + this.fieldPutEnd.setMaxStringLength(5); this.fieldPutEnd.setEnableBackgroundDrawing(false); SmallerButton buttonSidePutP = new SmallerButton(0, this.guiLeft+155, this.guiTop+43+(this.isAdvanced ? OFFSET_ADVANCED : 0), ">"); @@ -112,7 +112,7 @@ public class GuiInputter extends GuiContainer{ this.buttonList.add(this.whitelistPull); } - this.buttonList.add(new TinyButton(TileEntityInputter.OKAY_BUTTON_ID, this.guiLeft+84, this.guiTop+80+(this.isAdvanced ? OFFSET_ADVANCED : 0))); + this.buttonList.add(new TinyButton(TileEntityInputter.OKAY_BUTTON_ID, this.guiLeft+84, this.guiTop+91+(this.isAdvanced ? OFFSET_ADVANCED : 0))); } @Override @@ -143,16 +143,16 @@ public class GuiInputter extends GuiContainer{ int newTopOffset = this.guiTop+(this.isAdvanced ? OFFSET_ADVANCED : 0); //Info Mode on! - if(x >= this.guiLeft+11 && y >= newTopOffset+65 && x <= this.guiLeft+11+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+4 && y >= newTopOffset+65 && x <= this.guiLeft+4+38 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull")), 200), x, y); } - if(x >= this.guiLeft+96 && y >= newTopOffset+65 && x <= this.guiLeft+96+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+89 && y >= newTopOffset+65 && x <= this.guiLeft+89+38 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.1").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put")), 200), x, y); } - if(x >= this.guiLeft+48 && y >= newTopOffset+65 && x <= this.guiLeft+48+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+48 && y >= newTopOffset+65 && x <= this.guiLeft+48+38 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.pull")), 200), x, y); } - if(x >= this.guiLeft+133 && y >= newTopOffset+65 && x <= this.guiLeft+133+31 && y <= newTopOffset+65+12){ + if(x >= this.guiLeft+133 && y >= newTopOffset+65 && x <= this.guiLeft+133+38 && y <= newTopOffset+65+12){ this.drawHoveringText(this.fontRendererObj.listFormattedStringToWidth(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".inputter.info.2").replace("

", StringUtil.localize("info."+ModUtil.MOD_ID+".gui.put")), 200), x, y); } } @@ -167,20 +167,20 @@ public class GuiInputter extends GuiContainer{ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); - this.drawTexturedModalRect(this.guiLeft, this.guiTop+93+(this.isAdvanced ? OFFSET_ADVANCED : 0), 0, 0, 176, 86); + this.drawTexturedModalRect(this.guiLeft, this.guiTop+97+(this.isAdvanced ? OFFSET_ADVANCED : 0), 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(this.isAdvanced ? resLocAdvanced : resLoc); - this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93+(this.isAdvanced ? OFFSET_ADVANCED : 0)); + this.mc.getTextureManager().bindTexture(this.isAdvanced ? RES_LOC_ADVANCED : RES_LOC); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 97+(this.isAdvanced ? OFFSET_ADVANCED : 0)); this.fontRendererObj.drawString("INBOUND", this.guiLeft+23+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); this.fontRendererObj.drawString("OUTBOUND", this.guiLeft+104+3, this.guiTop+32+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(sideString[this.tileInputter.sideToPull+1], this.guiLeft+24+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(sideString[this.tileInputter.sideToPut+1], this.guiLeft+109+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(SIDES[this.tileInputter.sideToPull+1], this.guiLeft+24+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); + this.fontRendererObj.drawString(SIDES[this.tileInputter.sideToPut+1], this.guiLeft+109+1, this.guiTop+45+3+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT); - this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutStart), this.guiLeft+99, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); + this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutStart), this.guiLeft+92, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutEnd), this.guiLeft+136, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); - this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullStart), this.guiLeft+14, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); + this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullStart), this.guiLeft+7, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullEnd), this.guiLeft+51, this.guiTop+67+(this.isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE); this.fieldPutStart.drawTextBox(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 9d2b4dcde..67badc6ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import com.sun.org.apache.bcel.internal.generic.PUTFIELD; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.network.gui.INumberReactor; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -63,17 +62,17 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt public void onNumberReceived(int text, int textID, EntityPlayer player){ if(text != -1){ if(textID == 0){ - this.slotToPutStart = this.placeToPut instanceof IInventory ? Math.max(Math.min(text, ((IInventory)this.placeToPut).getSizeInventory()-1), 0) : text; + this.slotToPutStart = Math.max(text, 0); } if(textID == 1){ - this.slotToPutEnd = this.placeToPut instanceof IInventory ? Math.max(Math.min(text, ((IInventory)this.placeToPut).getSizeInventory()), 0) : text; + this.slotToPutEnd = Math.max(text, 0); } if(textID == 2){ - this.slotToPullStart = this.placeToPull instanceof IInventory ? Math.max(Math.min(text, ((IInventory)this.placeToPull).getSizeInventory()-1), 0) : text; + this.slotToPullStart = Math.max(text, 0); } if(textID == 3){ - this.slotToPullEnd = this.placeToPull instanceof IInventory ? Math.max(Math.min(text, ((IInventory)this.placeToPull).getSizeInventory()), 0) : text; + this.slotToPullEnd = Math.max(text, 0); } } this.markDirty(); @@ -279,20 +278,23 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt * Sets all of the relevant variables */ public void initVars(){ + if(this.sideToPull != -1){ + this.placeToPull = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionBySidesInOrder(this.sideToPull), this.worldObj, this.pos); - //Gets the Place to put and Pull - this.placeToPull = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionBySidesInOrder(this.sideToPull), this.worldObj, this.pos); - this.placeToPut = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionBySidesInOrder(this.sideToPut), this.worldObj, this.pos); - - //Resets the Variables - if(this.placeToPull instanceof IInventory){ - if(this.slotToPullEnd <= 0){ - this.slotToPullEnd = ((IInventory)this.placeToPull).getSizeInventory(); + if(this.placeToPull instanceof IInventory){ + if(this.slotToPullEnd <= 0){ + this.slotToPullEnd = ((IInventory)this.placeToPull).getSizeInventory(); + } } } - if(this.placeToPut instanceof IInventory){ - if(this.slotToPutEnd <= 0){ - this.slotToPutEnd = ((IInventory)this.placeToPut).getSizeInventory(); + + if(this.sideToPut != -1){ + this.placeToPut = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionBySidesInOrder(this.sideToPut), this.worldObj, this.pos); + + if(this.placeToPut instanceof IInventory){ + if(this.slotToPutEnd <= 0){ + this.slotToPutEnd = ((IInventory)this.placeToPut).getSizeInventory(); + } } } } diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiInputter.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiInputter.png index 9b4bc4d364488caec065cbb02fa7b8ba81e8be24..a5aadf9a0e5cb9ea7d369c7c11439b8d257b0e53 100644 GIT binary patch literal 3842 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 diff --git a/src/main/resources/assets/actuallyadditions/textures/gui/guiInputterAdvanced.png b/src/main/resources/assets/actuallyadditions/textures/gui/guiInputterAdvanced.png index 67673f12189cc1d2caf62116fa54a435fb7fc069..7f42011c4faa87fb1f7b3bfe98c558a3ceba9714 100644 GIT binary patch literal 2662 zcmd5;X;4#F7=1yp7!Zp!2skJmYpX;kOQ}PV#RZp^0+l5!LW~$FVj+bqjDu|Ks!CauW6VdS8sSTco>Oaw@T_(ZZ}B9UzOg`<y$8=+EBO!2_zv2%5ngLPDHtDI`-XDkF*({}bCCnGYkpdy?Rij-m4+g?}B&@C3 zHnV41pq{D51?>6vNW@&9<-Hz!t=0w_npluxEh!$Qs($Mw3R?pr2cvq1H;Ztu3HSbi zKyjyE*ntmODv$au1Da4r&1Z!y6%z@Xc0o?*kca%;KsK}X21N5Zja>yEKanUQ4}W#T zs6DxWNOfAUdxOp{=>Se$DrU*%3l;{RE^-`)klVV(5>ZX`vgoS1M~E7kV6otvE8OxW zInf>p;bg62dSm&L_+G@Df?Y~*Tv@)Pov~7fX-A3doP_;aX{>vd?-*!7$|lEMU@_ka z_MT-skd3>qr-H^X7^$aHh4XV0dCUpm)j=HnxCBU(!MPYCQ z|1(4V>;7#`Xkv?J^v2v}=qQq~#-!d3y%pq2EC63aMCU~}Zt^tvl?&A6BI;18F@Pda z&yv7sWCJ1&i5v$kHbQiEW|_X@;Zda3ZyQ8p>7%I`^N7&3Cn!8Am7vVL#1(NM(kDL8 z)@db$Gk%h@!6kYGR)M_?O$F19>!(lReD%7iD#{@t`l238j1STi!HE8P7d`0KY@}aO zYB}k|3!;|bjs@aHtw4aj|9x078Z78IB<+kh@=G`vHD&@GVQuF$Cusm8)$$d4LgsN5*wI1 zQT3A4Hd}r1_SUsPxw`r?ia=)mW=c_BhC&6CUN16lriUWCPA_l0-Hc7#I&L}iI3!tdV|eW zA|D>3N@+wxAVN;$w39lHQpfchpw=frTn^+JYK6@w<=LLrO`9upgK(vM&LLJ9n!3{H6CJIiPY;c561Pw8?gBpgc{`3X}PLSGSsH(*K|IF zVi;9I6W$=$ERV|1&96LS5PLt#JDGp^ z+Xt_=QqOEH&k-JyJr&5__^+t?81M?f0y@h z!i`%Xvfw{&(EoEAWf``tx~bW~z*O*V6UZdS8+IYZ-=A%oH8*-M)3dv!-=7(+llr}~ zyd~=D8xf$iMR_F9KMf2y@~bT0q?%f@!fjVzxZR%h?p{pT=3?cB>%KsrJ-Cw!vXN;+ zEj!%i9b5_w(Yq86yjLyV*CrRQh2jWb2EU8b8Ejs=F%?wCGksW- z$&|zP;Vb*r`^Prtefe?eEkm3MC_Ia&t2QtwGi*{?V@R zTrXSD;k@f-ujzJ@3;r+iT5@nuNM nVKPV-ZjhWkM5Nlvto|}yHj|hB@$7aHsI2vL^>bP0l+XkKrL~Bf From 1b40bd3568b7981f139738da6d6245fd8e74c59c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 10 Jun 2016 17:53:11 +0200 Subject: [PATCH 258/322] Only add things to smart item laser relay whitelist when they aren't on it yet --- .../TileEntityLaserRelayItemWhitelist.java | 53 ++++++++----------- .../assets/actuallyadditions/lang/en_US.lang | 2 +- 2 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 62e14241d..1c0910207 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -233,17 +233,6 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem int slotStart = output ? 12 : 0; int slotStop = slotStart+12; - for(int i = slotStart; i < slotStop; i++){ - if(this.slots[i] != null){ - if(this.slots[i].getItem() instanceof ItemFilter){ - ItemDrill.writeSlotsToNBT(new ItemStack[ContainerFilter.SLOT_AMOUNT], this.slots[i]); - } - else{ - this.slots[i] = null; - } - } - } - List handlers = this.getAllHandlersAround(); for(IItemHandler handler : handlers){ for(int i = 0; i < handler.getSlots(); i++){ @@ -252,32 +241,34 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem ItemStack copy = stack.copy(); copy.stackSize = 1; - for(int k = slotStart; k < slotStop; k++){ - if(this.slots[k] != null){ - if(this.slots[k].getItem() instanceof ItemFilter){ - ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT]; - ItemDrill.loadSlotsFromNBT(filterSlots, this.slots[k]); + if(!checkFilter(copy, true, this.slots, slotStart, slotStop)){ + for(int k = slotStart; k < slotStop; k++){ + if(this.slots[k] != null){ + if(this.slots[k].getItem() instanceof ItemFilter){ + ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT]; + ItemDrill.loadSlotsFromNBT(filterSlots, this.slots[k]); - boolean did = false; - if(filterSlots != null && filterSlots.length > 0){ - for(int j = 0; j < filterSlots.length; j++){ - if(filterSlots[j] == null || filterSlots[j].stackSize <= 0){ - filterSlots[j] = copy; - did = true; - break; + boolean did = false; + if(filterSlots != null && filterSlots.length > 0){ + for(int j = 0; j < filterSlots.length; j++){ + if(filterSlots[j] == null || filterSlots[j].stackSize <= 0){ + filterSlots[j] = copy; + did = true; + break; + } } } - } - if(did){ - ItemDrill.writeSlotsToNBT(filterSlots, this.slots[k]); - break; + if(did){ + ItemDrill.writeSlotsToNBT(filterSlots, this.slots[k]); + break; + } } } - } - else{ - this.slots[k] = copy; - break; + else{ + this.slots[k] = copy; + break; + } } } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 436e1cf78..ab1a733ea 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -543,7 +543,7 @@ info.actuallyadditions.gui.coffee=Coffee info.actuallyadditions.gui.ok=Ok info.actuallyadditions.gui.the=the info.actuallyadditions.gui.smart=Smart Whitelist -info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventories adjacent to this relay will be added to this part of the white- or blacklist. Adding Item Filters to the list before will cause them to also be filled. Caution: Non-Item Filters previously added to the list will be removed and Item Filters will be cleared! +info.actuallyadditions.gui.smartInfo=When pressing this, all items from inventories adjacent to this relay will be added to this part of the white- or blacklist. Adding Item Filters to the list before will cause them to also be filled. info.actuallyadditions.inputter.info.1=This is the first Slot in the connected Inventory to

at. info.actuallyadditions.inputter.info.2=This is the slot after the last Slot in the connected Inventory to

at. What that means: If you, for example, write 2 in the field to the left and 5 in this one, it will

at Slot 2, 3, and 4. info.actuallyadditions.inputter.whitelistInfo=When pressing this, this side's whitelist mode will be changed. To let all items through, an empty blacklist can be used, to let no items through, an empty whitelist can be used. To configure certain items, place them or configured Item Filters in the slots. From 19d764688fface6a708b6d7f8387bdf7d6011995 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 10 Jun 2016 21:52:37 +0200 Subject: [PATCH 259/322] Re-add IFluidHandler since apparently everyone's moaning about EnderIO not getting their shit together --- .../api/internal/IBookletGui.java | 1 - .../mod/blocks/BlockAtomicReconstructor.java | 1 - .../mod/blocks/BlockBookletStand.java | 5 -- .../mod/blocks/BlockCoffeeMachine.java | 4 -- .../mod/blocks/BlockColoredLamp.java | 2 +- .../mod/blocks/BlockCompost.java | 5 -- .../mod/blocks/BlockCrystal.java | 2 +- .../mod/blocks/BlockDisplayStand.java | 1 - .../mod/blocks/BlockFishingNet.java | 4 -- .../mod/blocks/BlockFurnaceSolar.java | 4 -- .../mod/blocks/BlockGreenhouseGlass.java | 3 - .../mod/blocks/BlockLampPowerer.java | 1 - .../mod/blocks/BlockLaserRelay.java | 2 - .../mod/blocks/BlockMiner.java | 1 - .../mod/blocks/BlockMisc.java | 2 +- .../mod/blocks/BlockPhantom.java | 3 - .../mod/blocks/BlockPhantomBooster.java | 4 -- .../mod/blocks/BlockSlabs.java | 7 --- .../mod/blocks/BlockSmileyCloud.java | 2 - .../mod/blocks/BlockWallAA.java | 11 ---- .../mod/blocks/BlockWildPlant.java | 4 +- .../mod/blocks/base/BlockBase.java | 2 - .../mod/blocks/base/BlockBushBase.java | 2 - .../mod/blocks/base/BlockContainerBase.java | 5 -- .../mod/blocks/base/BlockStair.java | 1 - .../mod/booklet/BookletUtils.java | 3 - .../mod/booklet/GuiBooklet.java | 1 - .../mod/booklet/GuiBookletStand.java | 1 - .../mod/booklet/button/BookmarkButton.java | 1 - .../mod/booklet/button/TexturedButton.java | 1 - .../booklet/chapter/BookletChapterCoffee.java | 1 - .../chapter/BookletChapterCrusher.java | 1 - .../booklet/entry/BookletEntryAllSearch.java | 1 - .../mod/booklet/page/PageCoffeeRecipe.java | 1 - .../mod/booklet/page/PageCrafting.java | 1 - .../mod/booklet/page/PageCrusherRecipe.java | 1 - .../mod/booklet/page/PageFurnace.java | 1 - .../mod/booklet/page/PageReconstructor.java | 1 - .../mod/config/GuiFactory.java | 1 - .../mod/event/TooltipEvent.java | 1 - .../mod/gen/JamVillagerTradeHandler.java | 1 - .../actuallyadditions/mod/gen/OreGen.java | 1 - .../gen/VillageComponentCustomCropField.java | 2 - .../mod/gen/VillageComponentJamHouse.java | 2 - .../mod/inventory/gui/GuiCoffeeMachine.java | 1 - .../mod/inventory/gui/GuiInputter.java | 2 - .../mod/inventory/gui/GuiMiner.java | 1 - .../mod/inventory/gui/GuiRangedCollector.java | 2 - .../mod/inventory/gui/GuiSmileyCloud.java | 1 - .../mod/inventory/gui/GuiXPSolidifier.java | 1 - .../mod/items/ItemAllToolAA.java | 2 - .../mod/items/ItemBooklet.java | 1 - .../mod/items/ItemCoffee.java | 1 - .../mod/items/ItemCrystal.java | 2 +- .../mod/items/ItemDrill.java | 5 -- .../actuallyadditions/mod/items/ItemDust.java | 2 +- .../mod/items/ItemFoods.java | 2 +- .../actuallyadditions/mod/items/ItemJams.java | 2 +- .../mod/items/ItemKnife.java | 1 - .../mod/items/ItemLaserWrench.java | 1 - .../mod/items/ItemMagnetRing.java | 1 - .../actuallyadditions/mod/items/ItemMisc.java | 2 +- .../mod/items/ItemPhantomConnector.java | 1 - .../mod/items/ItemPotionRing.java | 3 +- .../mod/items/base/ItemEnergy.java | 2 - .../mod/network/PacketBookletStandButton.java | 1 - .../mod/network/PacketParticle.java | 1 - .../mod/network/PacketUpdateTileEntity.java | 1 - .../mod/network/gui/PacketGuiButton.java | 1 - .../mod/network/gui/PacketGuiNumber.java | 1 - .../mod/network/gui/PacketGuiString.java | 1 - .../mod/proxy/ClientProxy.java | 1 - .../mod/proxy/ServerProxy.java | 1 - .../mod/recipe/FuelHandler.java | 1 - .../tile/TileEntityAtomicReconstructor.java | 1 - .../mod/tile/TileEntityBreaker.java | 2 - .../mod/tile/TileEntityCanolaPress.java | 63 +++++++++++++++++-- .../mod/tile/TileEntityCoalGenerator.java | 1 - .../mod/tile/TileEntityCoffeeMachine.java | 63 +++++++++++++++++-- .../tile/TileEntityDirectionalBreaker.java | 2 - .../mod/tile/TileEntityDropper.java | 1 - .../mod/tile/TileEntityFeeder.java | 1 - .../mod/tile/TileEntityFermentingBarrel.java | 63 +++++++++++++++++-- .../mod/tile/TileEntityFluidCollector.java | 63 +++++++++++++++++-- .../mod/tile/TileEntityFurnaceDouble.java | 1 - .../mod/tile/TileEntityGrinder.java | 1 - .../mod/tile/TileEntityHeatCollector.java | 1 - .../mod/tile/TileEntityItemRepairer.java | 1 - .../tile/TileEntityLavaFactoryController.java | 1 - .../mod/tile/TileEntityLeafGenerator.java | 1 - .../mod/tile/TileEntityOilGenerator.java | 62 ++++++++++++++++-- .../mod/tile/TileEntityPhantomPlacer.java | 1 - .../tile/TileEntityPhantomRedstoneface.java | 1 - .../mod/tile/TileEntityRangedCollector.java | 1 - .../actuallyadditions/mod/util/PosUtil.java | 3 - .../mod/util/StringUtil.java | 2 - .../actuallyadditions/mod/util/Util.java | 6 +- .../actuallyadditions/mod/util/WorldUtil.java | 1 - 98 files changed, 304 insertions(+), 186 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java index 1081d84da..8c4f20ff7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java @@ -29,7 +29,6 @@ public interface IBookletGui{ * * @param renderTransferButton if the "show more info"-text and clickable part should exist- */ - @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) void renderTooltipAndTransferButton(BookletPage from, ItemStack stack, int x, int y, boolean renderTransferButton, boolean mousePressed); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index b005fa7d4..3f3aa0c95 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -56,7 +56,6 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java index 3275c8d13..c389764aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java @@ -43,7 +43,6 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -@SuppressWarnings("deprecation") public class BlockBookletStand extends BlockContainerBase implements IHudDisplay{ private static final PropertyInteger META = PropertyInteger.create("meta", 0, 3); @@ -61,8 +60,6 @@ public class BlockBookletStand extends BlockContainerBase implements IHudDisplay this.setSoundType(SoundType.WOOD); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ int meta = this.getMetaFromState(state); @@ -79,13 +76,11 @@ public class BlockBookletStand extends BlockContainerBase implements IHudDisplay return super.getBoundingBox(state, source, pos); } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index e56f93f2c..a5ea017b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -46,20 +46,16 @@ public class BlockCoffeeMachine extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 09f076885..78911d8b4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -103,7 +103,7 @@ public class BlockColoredLamp extends BlockBase{ return new ItemStack(InitBlocks.blockColoredLamp, 1, this.getMetaFromState(state)); } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allLampTypes.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java index 9779841e2..8be3e66eb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCompost.java @@ -56,14 +56,11 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ this.setSoundType(SoundType.WOOD); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } - @SuppressWarnings("deprecation") @Override public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn){ addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_LEGS); @@ -73,13 +70,11 @@ public class BlockCompost extends BlockContainerBase implements IHudDisplay{ addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_WALL_SOUTH); } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index ec7f704f8..c1da939bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -45,7 +45,7 @@ public class BlockCrystal extends BlockBase{ return this.getMetaFromState(state); } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allCrystals.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java index ca0fa8957..85d95d5c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDisplayStand.java @@ -70,7 +70,6 @@ public class BlockDisplayStand extends BlockContainerBase{ } } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java index 552528da6..25640345d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFishingNet.java @@ -35,8 +35,6 @@ public class BlockFishingNet extends BlockContainerBase{ this.setSoundType(SoundType.WOOD); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; @@ -48,13 +46,11 @@ public class BlockFishingNet extends BlockContainerBase{ return new TileEntityFishingNet(); } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java index be1d10359..587a52f97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceSolar.java @@ -35,8 +35,6 @@ public class BlockFurnaceSolar extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; @@ -48,13 +46,11 @@ public class BlockFurnaceSolar extends BlockContainerBase{ return new TileEntityFurnaceSolar(); } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java index 9e4adbfa4..4070549d4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGreenhouseGlass.java @@ -37,13 +37,11 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ @@ -54,7 +52,6 @@ public class BlockGreenhouseGlass extends BlockContainerBase{ } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index afc3b10aa..7b28c56be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -38,7 +38,6 @@ public class BlockLampPowerer extends BlockBase{ this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") @Override public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){ this.updateLamp(worldIn, pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index f35fd68df..63703a849 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -46,13 +46,11 @@ public class BlockLaserRelay extends BlockContainerBase{ this.type = type; } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java index ddc3b1d55..cfed5206d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMiner.java @@ -44,7 +44,6 @@ public class BlockMiner extends BlockContainerBase implements IHudDisplay{ this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java index b7e7e7d87..b535656bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockMisc.java @@ -45,7 +45,7 @@ public class BlockMisc extends BlockBase{ return this.getMetaFromState(state); } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ for(int j = 0; j < ALL_MISC_BLOCKS.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index 5beafafa6..f38c76e9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -52,13 +52,11 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") @Override public boolean canProvidePower(IBlockState state){ return this.type == Type.REDSTONEFACE; } - @SuppressWarnings("deprecation") @Override public int getWeakPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ if(this.type == Type.REDSTONEFACE){ @@ -70,7 +68,6 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ return super.getWeakPower(state, world, pos, side); } - @SuppressWarnings("deprecation") @Override public int getStrongPower(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side){ if(this.type == Type.REDSTONEFACE){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java index 0b1f6ab03..e78749fae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantomBooster.java @@ -35,20 +35,16 @@ public class BlockPhantomBooster extends BlockContainerBase{ this.setSoundType(SoundType.STONE); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return AABB; } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java index f0d1a244c..95d1ae4a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSlabs.java @@ -44,7 +44,6 @@ public class BlockSlabs extends BlockBase{ this(name, fullBlock, 0); } - @SuppressWarnings("deprecation") public BlockSlabs(String name, Block fullBlock, int meta){ super(fullBlock.getMaterial(fullBlock.getDefaultState()), name); this.setHardness(1.5F); @@ -72,7 +71,6 @@ public class BlockSlabs extends BlockBase{ this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); }*/ - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; @@ -90,8 +88,6 @@ public class BlockSlabs extends BlockBase{ return this.getStateFromMeta(meta); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ return state.getValue(META) == 1 ? AABB_TOP_HALF : AABB_BOTTOM_HALF; @@ -120,8 +116,6 @@ public class BlockSlabs extends BlockBase{ this.setMaxDamage(0); } - @SuppressWarnings("deprecation") - @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ if(stack.stackSize != 0 && playerIn.canPlayerEdit(pos.offset(facing), facing, stack)){ @@ -164,7 +158,6 @@ public class BlockSlabs extends BlockBase{ return worldIn.getBlockState(pos.offset(side)).getBlock() == this.block || super.canPlaceBlockOnSide(worldIn, pos, side, player, stack); } - @SuppressWarnings("deprecation") private boolean tryPlace(EntityPlayer player, ItemStack stack, World worldIn, BlockPos pos){ IBlockState iblockstate = worldIn.getBlockState(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 5feafb6aa..9bcb1410e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -50,13 +50,11 @@ public class BlockSmileyCloud extends BlockContainerBase{ this.setTickRandomly(true); } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index 9f7ebac68..a00533333 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -44,7 +44,6 @@ public class BlockWallAA extends BlockBase{ } - @SuppressWarnings("deprecation") public BlockWallAA(String name, Block base, int meta){ super(base.getMaterial(base.getDefaultState()), name); this.meta = meta; @@ -78,8 +77,6 @@ public class BlockWallAA extends BlockBase{ return i; } - @SuppressWarnings("deprecation") - @Override public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos){ boolean flag = this.canConnectTo(worldIn, pos.north()); @@ -90,7 +87,6 @@ public class BlockWallAA extends BlockBase{ return state.withProperty(BlockWall.UP, !flag4 || !worldIn.isAirBlock(pos.up())).withProperty(BlockWall.NORTH, flag).withProperty(BlockWall.EAST, flag1).withProperty(BlockWall.SOUTH, flag2).withProperty(BlockWall.WEST, flag3); } - @SuppressWarnings("deprecation") @Override public boolean isFullCube(IBlockState state){ return false; @@ -101,29 +97,24 @@ public class BlockWallAA extends BlockBase{ return false; } - @SuppressWarnings("deprecation") @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side){ return side != EnumFacing.DOWN || super.shouldSideBeRendered(blockState, blockAccess, pos, side); } - @SuppressWarnings("deprecation") - @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ state = this.getActualState(state, source, pos); return AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(state)]; } - @SuppressWarnings("deprecation") @Override public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos){ blockState = this.getActualState(blockState, worldIn, pos); return CLIP_AABB_BY_INDEX[yesThisIsCopyPastedFromBlockWallAndIHaveNoIdeaWhatThisMethodDoes(blockState)]; } - @SuppressWarnings("deprecation") @Override public boolean isOpaqueCube(IBlockState state){ return false; @@ -134,14 +125,12 @@ public class BlockWallAA extends BlockBase{ return this.meta; } - @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ list.add(new ItemStack(item, 1, 0)); } - @SuppressWarnings("deprecation") public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos){ Block block = PosUtil.getBlock(pos, worldIn); IBlockState state = worldIn.getBlockState(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 66a17ce80..8985d9a97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -62,7 +62,7 @@ public class BlockWildPlant extends BlockBushBase{ return metadata >= allWildPlants.length ? null : new ItemStack(((BlockPlant)allWildPlants[metadata].wildVersionOf).seedItem); } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allWildPlants.length; j++){ @@ -70,8 +70,6 @@ public class BlockWildPlant extends BlockBushBase{ } } - @SuppressWarnings("deprecation") - @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ int metadata = PosUtil.getMetadata(state); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 5972d1455..450cb05db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -57,8 +57,6 @@ public class BlockBase extends Block{ return EnumRarity.COMMON; } - @SuppressWarnings("deprecation") - @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index f5098f9c1..fbdc95ce8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -57,8 +57,6 @@ public class BlockBushBase extends BlockBush{ return EnumRarity.COMMON; } - @SuppressWarnings("deprecation") - @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 7d1e6c5b0..641941389 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -126,8 +126,6 @@ public abstract class BlockContainerBase extends BlockContainer{ return false; } - @SuppressWarnings("deprecation") - @Override public IBlockState getStateFromMeta(int meta){ return this.getMetaProperty() == null ? super.getStateFromMeta(meta) : this.getDefaultState().withProperty(this.getMetaProperty(), meta); @@ -148,7 +146,6 @@ public abstract class BlockContainerBase extends BlockContainer{ } } - @SuppressWarnings("deprecation") @Override public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn){ this.updateRedstoneState(worldIn, pos); @@ -222,13 +219,11 @@ public abstract class BlockContainerBase extends BlockContainer{ } } - @SuppressWarnings("deprecation") @Override public boolean hasComparatorInputOverride(IBlockState state){ return true; } - @SuppressWarnings("deprecation") @Override public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos){ TileEntity tile = world.getTileEntity(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index 57416e9ba..d2c60f4e0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -26,7 +26,6 @@ public class BlockStair extends BlockStairs{ this(block, name, 0); } - @SuppressWarnings("deprecation") public BlockStair(Block block, String name, int meta){ super(block.getStateFromMeta(meta)); this.name = name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index ac2ff24be..06f117d39 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -188,7 +188,6 @@ public class BookletUtils{ /** * Draws all of the hovering texts for the buttons that need explanation in the booklet */ - @SuppressWarnings("unchecked") public static void doHoverTexts(GuiBooklet booklet, int mouseX, int mouseY){ //Update all of the buttons' hovering texts for(Object button : booklet.getButtonList()){ @@ -206,7 +205,6 @@ public class BookletUtils{ /** * Updates the search bar, should be called when it is getting typed into */ - @SuppressWarnings("unchecked") public static void updateSearchBar(GuiBooklet booklet){ if(booklet.currentEntrySet.getCurrentEntry() instanceof BookletEntryAllSearch){ BookletEntryAllSearch currentEntry = (BookletEntryAllSearch)booklet.currentEntrySet.getCurrentEntry(); @@ -241,7 +239,6 @@ public class BookletUtils{ return false; } - @SuppressWarnings("unchecked") public static void openIndexEntry(GuiBooklet booklet, IBookletEntry entry, int page, boolean resetTextField){ booklet.searchField.setVisible(entry instanceof BookletEntryAllSearch); booklet.searchField.setFocused(entry instanceof BookletEntryAllSearch); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 0b43234ab..3b9e272ff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -285,7 +285,6 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ } } - @SuppressWarnings("unchecked") @Override public void initGui(){ this.guiLeft = (this.width-this.xSize)/2; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java index b7fc142c4..a6720ffde 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java @@ -40,7 +40,6 @@ public class GuiBookletStand extends GuiBooklet{ super.actionPerformed(button); } - @SuppressWarnings("unchecked") @Override public void initGui(){ super.initGui(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index da0891eb5..9f45b0b36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -80,7 +80,6 @@ public class BookmarkButton extends GuiButton{ } } - @SuppressWarnings("unchecked") public void drawHover(int mouseX, int mouseY){ ArrayList list = new ArrayList(); if(this.assignedEntry.entry != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index 85ec24e59..eea52d598 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -31,7 +31,6 @@ public class TexturedButton extends GuiButton{ this(id, x, y, texturePosX, texturePosY, width, height, new ArrayList()); } - @SuppressWarnings("unchecked") public TexturedButton(int id, int x, int y, int texturePosX, int texturePosY, int width, int height, List hoverTextList){ super(id, x, y, width, height, ""); this.texturePosX = texturePosX; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java index 1a381fd22..a48b5464e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCoffee.java @@ -28,7 +28,6 @@ public class BookletChapterCoffee extends BookletChapter{ super(unlocalizedName, entry, displayStack, getPages(pages)); } - @SuppressWarnings("unchecked") private static BookletPage[] getPages(BookletPage... pages){ ArrayList allPages = new ArrayList(); allPages.addAll(Arrays.asList(pages)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java index 3cd608e5e..f3999a35b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java @@ -26,7 +26,6 @@ public class BookletChapterCrusher extends BookletChapter{ super(unlocalizedName, entry, displayStack, getPages(pages)); } - @SuppressWarnings("unchecked") private static BookletPage[] getPages(BookletPage... pages){ ArrayList allPages = new ArrayList(); allPages.addAll(Arrays.asList(pages)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java index e82c7e744..cfcd4a0e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/entry/BookletEntryAllSearch.java @@ -29,7 +29,6 @@ public class BookletEntryAllSearch extends BookletEntry{ this.chapters = (ArrayList)this.allChapters.clone(); } - @SuppressWarnings("unchecked") @Override public void addChapter(IBookletChapter chapter){ this.allChapters.add(chapter); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java index 67f7005c8..f80b9b786 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java @@ -41,7 +41,6 @@ public class PageCoffeeRecipe extends BookletPageAA{ gui.drawRect(gui.getGuiLeft()+19, gui.getGuiTop()+20, 146, 94, 99, 60); } - @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index 39f675063..b0e6bcdeb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -57,7 +57,6 @@ public class PageCrafting extends BookletPageAA{ } } - @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index f54d35e46..c841f8596 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -48,7 +48,6 @@ public class PageCrusherRecipe extends BookletPageAA{ } } - @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index 4e3ba0f8c..93018eaa6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -51,7 +51,6 @@ public class PageFurnace extends BookletPageAA{ } } - @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index d32249837..8e78062a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -52,7 +52,6 @@ public class PageReconstructor extends BookletPageAA{ } } - @SuppressWarnings("unchecked") @Override @SideOnly(Side.CLIENT) public void render(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java index 5b5da4615..d9730cb23 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/GuiFactory.java @@ -16,7 +16,6 @@ import net.minecraftforge.fml.client.IModGuiFactory; import java.util.Set; -@SuppressWarnings("unused") public class GuiFactory implements IModGuiFactory{ @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java index da16ff8ea..9400c2a24 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java @@ -29,7 +29,6 @@ public class TooltipEvent{ private static final String ADVANCED_INFO_TEXT_PRE = TextFormatting.DARK_GRAY+" "; private static final String ADVANCED_INFO_HEADER_PRE = TextFormatting.GRAY+" -"; - @SuppressWarnings("unchecked") @SubscribeEvent public void onTooltipEvent(ItemTooltipEvent event){ //Advanced Item Info diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index 7cf052655..a02677ed7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -49,7 +49,6 @@ public class JamVillagerTradeHandler{ } //@Override - @SuppressWarnings("all") public void manipulateTradesForVillager(EntityVillager villager, MerchantRecipeList recipeList, Random rand){ for(int trade = 0; trade < trades.size(); trade++){ for(int want = 0; want < trades.get(trade).wants.size(); want++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 803957b7d..f7aa7b7b6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -65,7 +65,6 @@ public class OreGen implements IWorldGenerator{ } } - @SuppressWarnings("deprecation") public void addOreSpawn(Block block, int meta, Block blockIn, World world, Random random, int blockXPos, int blockZPos, int maxVeinSize, int chancesToSpawn, int minY, int maxY){ if(maxY > minY){ int yDiff = maxY-minY; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index 2e7cb0de7..19ce4ab0a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -32,7 +32,6 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous private int averageGroundLevel = -1; - @SuppressWarnings("unused") public VillageComponentCustomCropField(){ } @@ -99,7 +98,6 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous } } - @SuppressWarnings("deprecation") private IBlockState getRandomCropType(Random rand){ int randomMeta = MathHelper.getRandomIntegerInRange(rand, 1, 7); switch(rand.nextInt(4)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index f716cc712..d73824d21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -30,7 +30,6 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ private int averageGroundLevel = -1; - @SuppressWarnings("unused") public VillageComponentJamHouse(){ } @@ -74,7 +73,6 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ this.fillWithBlocks(world, sbb, minX, minY, minZ, maxX, maxY, maxZ, block.getDefaultState(), block.getDefaultState(), false); } - @SuppressWarnings("deprecation") public void spawnActualHouse(World world, Random rand, StructureBoundingBox sbb){ //Base this.fillWithBlocks(world, sbb, 1, 0, 8, 9, 0, 10, Blocks.GRASS); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 557e35275..20153a607 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -51,7 +51,6 @@ public class GuiCoffeeMachine extends GuiContainer{ this.world = world; } - @SuppressWarnings("unchecked") @Override public void initGui(){ super.initGui(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index e48a212a4..fd103985b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -75,7 +75,6 @@ public class GuiInputter extends GuiContainer{ this.isAdvanced = isAdvanced; } - @SuppressWarnings("unchecked") @Override public void initGui(){ super.initGui(); @@ -116,7 +115,6 @@ public class GuiInputter extends GuiContainer{ } @Override - @SuppressWarnings("unchecked") public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index 331939d08..82c5af4f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -39,7 +39,6 @@ public class GuiMiner extends GuiContainer{ this.ySize = 93+86; } - @SuppressWarnings("unchecked") @Override public void initGui(){ super.initGui(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index a8e1a4fd3..26306bdb1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -52,7 +52,6 @@ public class GuiRangedCollector extends GuiContainer{ this.world = world; } - @SuppressWarnings("unchecked") @Override public void initGui(){ super.initGui(); @@ -62,7 +61,6 @@ public class GuiRangedCollector extends GuiContainer{ } @Override - @SuppressWarnings("unchecked") public void drawScreen(int x, int y, float f){ super.drawScreen(x, y, f); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index 6d3abb1da..c4a599b92 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -54,7 +54,6 @@ public class GuiSmileyCloud extends GuiContainer{ this.ySize = 20; } - @SuppressWarnings("unchecked") @Override public void initGui(){ super.initGui(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index 2b7738d3f..3ed558ff7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -48,7 +48,6 @@ public class GuiXPSolidifier extends GuiContainer{ this.world = world; } - @SuppressWarnings("unchecked") @Override public void initGui(){ super.initGui(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java index a02b2e3e5..a18f918e8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemAllToolAA.java @@ -36,7 +36,6 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.HashSet; import java.util.Set; -@SuppressWarnings("unchecked") public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ public final int color; @@ -67,7 +66,6 @@ public class ItemAllToolAA extends ItemToolAA implements IColorProvidingItem{ return Items.IRON_HOE.onItemUse(stack, playerIn, worldIn, pos, hand, side, hitX, hitY, hitZ); } - @SuppressWarnings("deprecation") @Override public boolean canHarvestBlock(IBlockState state, ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 5b2727031..1b832dff9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -84,7 +84,6 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ return new ActionResult(EnumActionResult.SUCCESS, stack); } - @SuppressWarnings("unchecked") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+"."+this.getBaseName()+".desc")); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java index ce9cb978f..5cb1db173 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCoffee.java @@ -111,7 +111,6 @@ public class ItemCoffee extends ItemFoodBase{ return true; } - @SuppressWarnings("unchecked") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ PotionEffect[] effects = ActuallyAdditionsAPI.methodHandler.getEffectsFromStack(stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index ce0fbcb33..b8153d1e2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -49,7 +49,7 @@ public class ItemCrystal extends ItemBase{ return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? EnumRarity.COMMON : BlockCrystal.allCrystals[stack.getItemDamage()].rarity; } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ for(int j = 0; j < BlockCrystal.allCrystals.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index b417aa025..3fbed02c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -53,7 +53,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -@SuppressWarnings("unchecked") public class ItemDrill extends ItemEnergy{ private static final int ENERGY_USE = 100; @@ -257,7 +256,6 @@ public class ItemDrill extends ItemEnergy{ return toReturn; } - @SuppressWarnings("deprecation") @Override public boolean canHarvestBlock(IBlockState state, ItemStack stack){ int harvestLevel = this.getHarvestLevel(stack, ""); @@ -343,7 +341,6 @@ public class ItemDrill extends ItemEnergy{ } @Override - @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tabs, List list){ for(int i = 0; i < 16; i++){ @@ -415,7 +412,6 @@ public class ItemDrill extends ItemEnergy{ * @param world The World * @param player The Player who breaks the Blocks */ - @SuppressWarnings("deprecation") public boolean breakBlocks(ItemStack stack, int radius, World world, BlockPos aPos, EntityPlayer player){ int xRange = radius; int yRange = radius; @@ -487,7 +483,6 @@ public class ItemDrill extends ItemEnergy{ * @param player The Player breaking the Blocks * @param use The Energy that should be extracted per Block */ - @SuppressWarnings("deprecation") private boolean tryHarvestBlock(World world, BlockPos pos, boolean isExtra, ItemStack stack, EntityPlayer player, int use){ Block block = PosUtil.getBlock(pos, world); IBlockState state = world.getBlockState(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index 9fe7f1afc..c8942b086 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -51,7 +51,7 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ return stack.getItemDamage() >= allDusts.length ? EnumRarity.COMMON : allDusts[stack.getItemDamage()].rarity; } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allDusts.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index e0f596d7a..9af9a471b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -94,7 +94,7 @@ public class ItemFoods extends ItemFoodBase{ return stack.getItemDamage() >= allFoods.length ? EnumRarity.COMMON : allFoods[stack.getItemDamage()].rarity; } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allFoods.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 4ede0af8c..36a0374bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -60,7 +60,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ return stack.getItemDamage() >= allJams.length ? EnumRarity.COMMON : allJams[stack.getItemDamage()].rarity; } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allJams.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java index 25b2b71a5..2becdff1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemKnife.java @@ -40,7 +40,6 @@ public class ItemKnife extends ItemBase{ } - @SuppressWarnings("unchecked") @Override public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index 7d691110f..ee1412518 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -86,7 +86,6 @@ public class ItemLaserWrench extends ItemBase{ } @Override - @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ BlockPos coords = ItemPhantomConnector.getStoredPosition(stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java index 894623e61..777b035d8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMagnetRing.java @@ -28,7 +28,6 @@ public class ItemMagnetRing extends ItemEnergy{ super(3000000, 5000, name); } - @SuppressWarnings("unchecked") @Override public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5){ int energyUse = 10; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 79b42963f..7b3f358d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -50,7 +50,7 @@ public class ItemMisc extends ItemBase{ return stack.getItemDamage() >= allMiscItems.length ? EnumRarity.COMMON : allMiscItems[stack.getItemDamage()].rarity; } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allMiscItems.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java index 0a0ebc8b2..89d423448 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPhantomConnector.java @@ -134,7 +134,6 @@ public class ItemPhantomConnector extends ItemBase{ } @Override - @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld){ BlockPos coords = getStoredPosition(stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 4391b2ec7..805ee857a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -61,7 +61,6 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi } @Override - @SuppressWarnings("unchecked") public void onUpdate(ItemStack stack, World world, Entity player, int par4, boolean par5){ super.onUpdate(stack, world, player, par4, par5); @@ -90,7 +89,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi return stack.getItemDamage() >= allRings.length ? EnumRarity.COMMON : allRings[stack.getItemDamage()].rarity; } - @SuppressWarnings("all") + @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allRings.length; j++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 3446a8fbc..35f0d50c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -65,7 +65,6 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ this.setEnergy(stack, 0); } - @SuppressWarnings("unchecked") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ list.add(this.getEnergyStored(stack)+"/"+this.getMaxEnergyStored(stack)+" RF"); @@ -78,7 +77,6 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ } @Override - @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tabs, List list){ ItemStack stackFull = new ItemStack(this); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java index e95d53aa1..dfc83933d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java @@ -34,7 +34,6 @@ public class PacketBookletStandButton implements IMessage{ private NBTTagCompound entrySet; private BlockPos tilePos; - @SuppressWarnings("unused") public PacketBookletStandButton(){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java index 411cfafff..90a6b6071 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java @@ -33,7 +33,6 @@ public class PacketParticle implements IMessage{ private int particleAmount; private float particleSize; - @SuppressWarnings("unused") public PacketParticle(){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java index 7c09d3fc8..be911bfe0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java @@ -30,7 +30,6 @@ public class PacketUpdateTileEntity implements IMessage{ private NBTTagCompound compound; private BlockPos pos; - @SuppressWarnings("unused") public PacketUpdateTileEntity(){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java index 1458e0ae8..b07e506be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java @@ -30,7 +30,6 @@ public class PacketGuiButton implements IMessage{ private int buttonID; private int playerID; - @SuppressWarnings("unused") public PacketGuiButton(){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java index d2f760c75..9e876648e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java @@ -31,7 +31,6 @@ public class PacketGuiNumber implements IMessage{ private int textID; private int playerID; - @SuppressWarnings("unused") public PacketGuiNumber(){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java index eebd62ffb..dee29f3b7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java @@ -31,7 +31,6 @@ public class PacketGuiString implements IMessage{ private int textID; private int playerID; - @SuppressWarnings("unused") public PacketGuiString(){ } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 01ce41f0f..256860260 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -154,7 +154,6 @@ public class ClientProxy implements IProxy{ ModelLoader.setCustomStateMapper(block, mapper); } - @SuppressWarnings("unchecked") @Override public void init(FMLInitializationEvent event){ ModUtil.LOGGER.info("Initializing ClientProxy..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java index c838979da..4cdd5ed05 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ServerProxy.java @@ -18,7 +18,6 @@ import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -@SuppressWarnings("unused") public class ServerProxy implements IProxy{ @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index b33f75ece..ed15811e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -24,7 +24,6 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; -@SuppressWarnings("unused") public class FuelHandler implements IFuelHandler{ private static HashMap, Integer> fuelList = new HashMap, Integer>(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index f503a0bcf..79ebdc76f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -74,7 +74,6 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index abdc7e10b..188bd8c3b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -54,7 +54,6 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ @@ -77,7 +76,6 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst return this.isPlacer; } - @SuppressWarnings("deprecation") private void doWork(){ EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index a75a1aa88..89f456803 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -20,12 +20,13 @@ import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IFluidSaver{ +public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IFluidSaver, net.minecraftforge.fluids.IFluidHandler{ public static final int PRODUCE = 80; public static final int ENERGY_USE = 35; @@ -78,7 +79,6 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ @@ -184,4 +184,59 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE public FluidTank getFluidHandler(EnumFacing facing){ return facing != EnumFacing.UP ? this.tank : null; } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? 0 : handler.fill(resource, doFill); + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(resource, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canFillFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canDrainFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler instanceof IFluidTank){ + return new FluidTankInfo[]{((IFluidTank)handler).getInfo()}; + } + else{ + return null; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 89feafc00..6c90ef3ed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -62,7 +62,6 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 4ef87812d..0ecf07b9d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -25,13 +25,13 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.*; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidSaver, IEnergySaver{ +public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidSaver, IEnergySaver, net.minecraftforge.fluids.IFluidHandler{ public static final int SLOT_COFFEE_BEANS = 0; public static final int SLOT_INPUT = 1; @@ -242,4 +242,59 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements public FluidTank getFluidHandler(EnumFacing facing){ return facing != EnumFacing.DOWN ? this.tank : null; } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? 0 : handler.fill(resource, doFill); + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(resource, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canFillFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canDrainFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler instanceof IFluidTank){ + return new FluidTankInfo[]{((IFluidTank)handler).getInfo()}; + } + else{ + return null; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 85cbcc121..7e04cd372 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -56,7 +56,6 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ @@ -78,7 +77,6 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem } } - @SuppressWarnings("deprecation") private void doWork(){ if(this.storage.getEnergyStored() >= ENERGY_USE*RANGE){ EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index 7d7758543..f0af92a6c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -38,7 +38,6 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index 5b14bebf4..b8cf54224 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -59,7 +59,6 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index 9d9f3939e..e602c0288 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -15,14 +15,14 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.*; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fluids.capability.templates.FluidHandlerFluidMap; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFermentingBarrel extends TileEntityBase implements IFluidSaver{ +public class TileEntityFermentingBarrel extends TileEntityBase implements IFluidSaver, net.minecraftforge.fluids.IFluidHandler{ private static final int PROCESS_TIME = 100; public final FluidTank canolaTank = new FluidTank(2*Util.BUCKET){ @@ -70,7 +70,6 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ @@ -144,4 +143,60 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid this.oilTank.setFluid(fluids[0]); this.canolaTank.setFluid(fluids[1]); } + + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? 0 : handler.fill(resource, doFill); + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(resource, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canFillFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canDrainFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler instanceof IFluidTank){ + return new FluidTankInfo[]{((IFluidTank)handler).getInfo()}; + } + else{ + return null; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 61a3f51e6..d8550c945 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -20,15 +20,13 @@ import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.*; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFluidCollector extends TileEntityBase implements IFluidSaver, IRedstoneToggle{ +public class TileEntityFluidCollector extends TileEntityBase implements IFluidSaver, IRedstoneToggle, net.minecraftforge.fluids.IFluidHandler{ public final FluidTank tank = new FluidTank(8*Util.BUCKET); public boolean isPlacer; @@ -121,7 +119,6 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ @@ -168,4 +165,58 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa this.tank.setFluid(fluids[0]); } + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? 0 : handler.fill(resource, doFill); + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(resource, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canFillFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canDrainFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler instanceof IFluidTank){ + return new FluidTankInfo[]{((IFluidTank)handler).getInfo()}; + } + else{ + return null; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index 77454997f..2c413edd4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -56,7 +56,6 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 91a1ad106..2ac70128e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -90,7 +90,6 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 98adccfd4..d707a0488 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -48,7 +48,6 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr this.storage.readFromNBT(compound); } - @SuppressWarnings("deprecation") @Override public void updateEntity(){ super.updateEntity(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index afa86f22d..eb626dfe6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -70,7 +70,6 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 95ef03e82..3654c5778 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -52,7 +52,6 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index c6e40e3f3..2ba10173c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -54,7 +54,6 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 5d6dc8121..2ae0c4cb6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -18,13 +18,13 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.*; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityOilGenerator extends TileEntityBase implements IEnergyProvider, IEnergySaver, IFluidSaver{ +public class TileEntityOilGenerator extends TileEntityBase implements IEnergyProvider, IEnergySaver, IFluidSaver, net.minecraftforge.fluids.IFluidHandler{ public static final int ENERGY_PRODUCED = 76; private static final int BURN_TIME = 100; @@ -81,7 +81,6 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ @@ -169,4 +168,59 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro public void setFluids(FluidStack[] fluids){ this.tank.setFluid(fluids[0]); } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? 0 : handler.fill(resource, doFill); + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(resource, doDrain); + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ + IFluidHandler handler = this.getFluidHandler(from); + return handler == null ? null : handler.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canFillFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler != null){ + for(IFluidTankProperties prop : handler.getTankProperties()){ + if(prop != null && prop.canDrainFluidType(new FluidStack(fluid, Integer.MAX_VALUE))){ + return true; + } + } + } + return false; + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from){ + IFluidHandler handler = this.getFluidHandler(from); + if(handler instanceof IFluidTank){ + return new FluidTankInfo[]{((IFluidTank)handler).getInfo()}; + } + else{ + return null; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index b64ea0be2..3eb58bf0a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -121,7 +121,6 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements return false; } - @SuppressWarnings("deprecation") private void doWork(){ if(this.isBreaker){ Block blockToBreak = PosUtil.getBlock(this.boundPosition, this.worldObj); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java index 25731d554..1bc3f50cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomRedstoneface.java @@ -28,7 +28,6 @@ public class TileEntityPhantomRedstoneface extends TileEntityPhantomface{ super("redstoneface"); } - @SuppressWarnings("deprecation") @Override public void updateEntity(){ if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index 8a67053b4..34eb9fff8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -45,7 +45,6 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement } @Override - @SuppressWarnings("unchecked") public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index dc6c28a31..be19a509b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -22,7 +22,6 @@ import net.minecraft.world.World; public class PosUtil{ - @SuppressWarnings("deprecation") public static Material getMaterial(BlockPos pos, IBlockAccess world){ return getBlock(pos, world).getMaterial(world.getBlockState(pos)); } @@ -51,7 +50,6 @@ public class PosUtil{ return new BlockPos(pos.getX()+x, pos.getY()+y, pos.getZ()+z); } - @SuppressWarnings("deprecation") public static boolean setBlock(BlockPos pos, World world, Block block, int meta, int flag){ return world.setBlockState(pos, block.getStateFromMeta(meta), flag); } @@ -72,7 +70,6 @@ public class PosUtil{ return null; } - @SuppressWarnings("deprecation") public static void setMetadata(BlockPos pos, World world, int meta, int flag){ world.setBlockState(pos, getBlock(pos, world).getStateFromMeta(meta), flag); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index 99e5733ab..e36e07e0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -26,7 +26,6 @@ public class StringUtil{ /** * Localizes a given String via StatCollector */ - @SuppressWarnings("deprecation") public static String localize(String text){ return I18n.translateToLocal(text); } @@ -34,7 +33,6 @@ public class StringUtil{ /** * Localizes a given formatted String with the given Replacements */ - @SuppressWarnings("deprecation") public static String localizeFormatted(String text, Object... replace){ return I18n.translateToLocalFormatted(text, replace); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 34698494b..437b61bb8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -14,19 +14,17 @@ import net.minecraft.item.EnumRarity; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.EnumHelper; -import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.oredict.OreDictionary; import java.util.Locale; import java.util.Random; -@SuppressWarnings("unused") public class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; - @SuppressWarnings("deprecation") - public static final int BUCKET = FluidContainerRegistry.BUCKET_VOLUME; + public static final int BUCKET = Fluid.BUCKET_VOLUME; public static final EnumRarity CRYSTAL_RED_RARITY = addRarity("crystalRed", TextFormatting.DARK_RED, ModUtil.NAME+" Red Crystal"); public static final EnumRarity CRYSTAL_BLUE_RARITY = addRarity("crystalBlue", TextFormatting.DARK_BLUE, ModUtil.NAME+" Blue Crystal"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 81839ad75..63653a285 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -120,7 +120,6 @@ public class WorldUtil{ } } - @SuppressWarnings("deprecation") public static ItemStack useItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ if(world instanceof WorldServer && stack != null && stack.getItem() != null){ BlockPos offsetPos = pos.offset(side); From e0d290a330164b04e86d3a352856484ae156349b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 10 Jun 2016 22:00:30 +0200 Subject: [PATCH 260/322] Also made liquifaces and transfer work again --- .../mod/tile/TileEntityPhantomLiquiface.java | 60 ++++++++++++++++++- .../actuallyadditions/mod/util/WorldUtil.java | 25 ++++++-- 2 files changed, 77 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index f5d968757..258c93de6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -14,9 +14,13 @@ import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -public class TileEntityPhantomLiquiface extends TileEntityPhantomface{ +public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements IFluidHandler{ public TileEntityPhantomLiquiface(){ super("liquiface"); @@ -41,9 +45,61 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface{ if(super.isBoundThingInRange()){ TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); if(tile != null){ - return tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + return tile instanceof IFluidHandler || tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); } } return false; } + + @Override + public int fill(EnumFacing from, FluidStack resource, boolean doFill){ + if(this.isBoundThingInRange()){ + return this.getHandler().fill(from, resource, doFill); + } + return 0; + } + + @Override + public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){ + if(this.isBoundThingInRange()){ + return this.getHandler().drain(from, resource, doDrain); + } + return null; + } + + @Override + public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){ + if(this.isBoundThingInRange()){ + return this.getHandler().drain(from, maxDrain, doDrain); + } + return null; + } + + @Override + public boolean canFill(EnumFacing from, Fluid fluid){ + return this.isBoundThingInRange() && this.getHandler().canFill(from, fluid); + } + + @Override + public boolean canDrain(EnumFacing from, Fluid fluid){ + return this.isBoundThingInRange() && this.getHandler().canDrain(from, fluid); + } + + @Override + public FluidTankInfo[] getTankInfo(EnumFacing from){ + if(this.isBoundThingInRange()){ + return this.getHandler().getTankInfo(from); + } + return new FluidTankInfo[0]; + } + + public IFluidHandler getHandler(){ + if(this.boundPosition != null){ + TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); + if(tile instanceof IFluidHandler){ + return (IFluidHandler)tile; + } + } + return null; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 63653a285..9fe929c89 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -108,13 +108,26 @@ public class WorldUtil{ public static void pushFluid(TileEntity tileFrom, EnumFacing side){ TileEntity tileTo = getTileEntityFromSide(side, tileFrom.getWorld(), tileFrom.getPos()); if(tileTo != null){ - IFluidHandler handlerFrom = tileFrom.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - IFluidHandler handlerTo = tileTo.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side.getOpposite()); - if(handlerFrom != null && handlerTo != null){ - FluidStack drain = handlerFrom.drain(Integer.MAX_VALUE, false); + if(tileFrom instanceof net.minecraftforge.fluids.IFluidHandler && tileTo instanceof net.minecraftforge.fluids.IFluidHandler){ + net.minecraftforge.fluids.IFluidHandler handlerTo = (net.minecraftforge.fluids.IFluidHandler)tileTo; + net.minecraftforge.fluids.IFluidHandler handlerFrom = (net.minecraftforge.fluids.IFluidHandler)tileFrom; + FluidStack drain = handlerFrom.drain(side, Integer.MAX_VALUE, false); if(drain != null){ - int filled = handlerTo.fill(drain.copy(), true); - handlerFrom.drain(filled, true); + if(handlerTo.canFill(side.getOpposite(), drain.getFluid())){ + int filled = handlerTo.fill(side.getOpposite(), drain.copy(), true); + handlerFrom.drain(side, filled, true); + } + } + } + else{ + IFluidHandler handlerFrom = tileFrom.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + IFluidHandler handlerTo = tileTo.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side.getOpposite()); + if(handlerFrom != null && handlerTo != null){ + FluidStack drain = handlerFrom.drain(Integer.MAX_VALUE, false); + if(drain != null){ + int filled = handlerTo.fill(drain.copy(), true); + handlerFrom.drain(filled, true); + } } } } From 14f388fc554dac8934c6eecabe2729c06e42e146 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 10 Jun 2016 22:15:23 +0200 Subject: [PATCH 261/322] r42! --- build.gradle | 2 +- update/changelog.md | 6 ++++++ update/updateVersions.properties | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 129760455..5b74c6a4c 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r41" +version = "1.9.4-r42" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index d88768380..eeb05fd34 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,9 @@ +# 1.9.4-r42 +### The shut-up-about-EnderIO Update. +* Changed ESD to allow higher numbers of slots and have no limit on input values so that you can basically make it pull from infintely many slots if the amount of slots present is able to change +* Only add things to smart item laser relay whitelist when they aren't on it already +* Re-added IFluidHandler since apparently everyone's moaning about EnderIO not having updated and my stuff breaking because of it or something like that. + # 1.9.4-r41 * Changed white- and blacklists of laser relays and ESDs to be for putting and pulling. Check them in your world, they might all not work like you want them to anymore! * Added item filters diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 1d29eb425..23c687e13 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=41 \ No newline at end of file +1.9.4=42 \ No newline at end of file From 26d5d94f392103001f2b57f0496cf6a1a421d8e3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 13:34:18 +0200 Subject: [PATCH 262/322] More proper Laser Relay bounding boxes. This only took me about 200 bajillion hours too. --- build.gradle | 2 +- .../mod/blocks/BlockLaserRelay.java | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5b74c6a4c..2a2dcb734 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.9.4-12.17.0.1951" + version = "1.9.4-12.17.0.1957" runDir = "idea" mappings = "snapshot_20160519" diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 63703a849..54f1c0c60 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -28,11 +28,22 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockLaserRelay extends BlockContainerBase{ + //This took way too much fiddling around. I'm not good with numbers. + private static final float F = 1/16F; + private static final AxisAlignedBB AABB_UP = new AxisAlignedBB(2*F, 0, 2*F, 1-2*F, 1-F, 1-2*F); + private static final AxisAlignedBB AABB_DOWN = new AxisAlignedBB(2*F, F, 2*F, 1-2*F, 1, 1-2*F); + private static final AxisAlignedBB AABB_NORTH = new AxisAlignedBB(2*F, F, F, 1-2*F, 1-F, 1); + private static final AxisAlignedBB AABB_EAST = new AxisAlignedBB(0, F, 2*F, 1-F, 1-F, 1-2*F); + private static final AxisAlignedBB AABB_SOUTH = new AxisAlignedBB(2*F, F, 0, 1-2*F, 1-F, 1-F); + private static final AxisAlignedBB AABB_WEST = new AxisAlignedBB(F, F, 2*F, 1, 1-F, 1-2*F); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, 5); private final Type type; @@ -46,6 +57,24 @@ public class BlockLaserRelay extends BlockContainerBase{ this.type = type; } + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos){ + switch(this.getMetaFromState(state)){ + case 1: + return AABB_UP; + case 2: + return AABB_NORTH; + case 3: + return AABB_SOUTH; + case 4: + return AABB_WEST; + case 5: + return AABB_EAST; + default: + return AABB_DOWN; + } + } + @Override public boolean isFullCube(IBlockState state){ return false; From 91ca5aa4a18406b0b367a4d40250d04a9f1102ec Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 15:33:44 +0200 Subject: [PATCH 263/322] Significantly upped the performance on Item Laser Relays by making them remember the things around them --- .../mod/blocks/BlockItemViewer.java | 15 +++++++ .../mod/blocks/BlockLaserRelay.java | 11 +++++ .../mod/tile/TileEntityItemViewer.java | 26 +++++++++--- .../mod/tile/TileEntityLaserRelayItem.java | 41 +++++++++++++------ .../TileEntityLaserRelayItemWhitelist.java | 2 +- 5 files changed, 77 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index 54a1abd6c..31026f2f9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -12,11 +12,15 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockItemViewer extends BlockContainerBase{ @@ -30,6 +34,17 @@ public class BlockItemViewer extends BlockContainerBase{ } + @Override + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block){ + if(!world.isRemote){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityItemViewer){ + ((TileEntityItemViewer)tile).saveConnectedRelay(); + System.out.println("------------Saving connected on change " + ((TileEntityItemViewer)tile).connectedRelay); + } + } + } + @Override public TileEntity createNewTileEntity(World worldIn, int meta){ return new TileEntityItemViewer(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 54f1c0c60..859c586de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayEnergy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -115,6 +116,16 @@ public class BlockLaserRelay extends BlockContainerBase{ return false; } + @Override + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block){ + if(!world.isRemote){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityLaserRelayItem){ + ((TileEntityLaserRelayItem)tile).saveAllHandlersAround(); + System.out.println("------------Saving around on change " + ((TileEntityLaserRelayItem)tile).handlersAround); + } + } + } @Override public TileEntity createNewTileEntity(World world, int i){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index a480a4697..f667fc1c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -24,12 +24,27 @@ import java.util.List; public class TileEntityItemViewer extends TileEntityInventoryBase{ + public TileEntityLaserRelayItem connectedRelay; + private boolean hasCheckedRelayOnLoad; + public TileEntityItemViewer(){ super(0, "itemViewer"); } + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote && !this.hasCheckedRelayOnLoad){ + this.saveConnectedRelay(); + this.hasCheckedRelayOnLoad = true; + + System.out.println("------------Saving relay on load " + this.connectedRelay); + } + } + private List getItemHandlerInfos(){ - TileEntityLaserRelayItem relay = this.getConnectedRelay(); + TileEntityLaserRelayItem relay = this.connectedRelay; if(relay != null){ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(relay.getPos(), this.worldObj); if(network != null){ @@ -61,7 +76,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ return null; } - private TileEntityLaserRelayItem getConnectedRelay(){ + public void saveConnectedRelay(){ TileEntityLaserRelayItem tileFound = null; if(this.worldObj != null){ //Why is that even possible..? for(int i = 0; i <= 5; i++){ @@ -71,7 +86,8 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ if(tile instanceof TileEntityLaserRelayItem){ if(tileFound != null){ - return null; + this.connectedRelay = null; + return; } else{ tileFound = (TileEntityLaserRelayItem)tile; @@ -79,7 +95,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ } } } - return tileFound; + this.connectedRelay = tileFound; } @Override @@ -103,7 +119,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ private boolean isWhitelisted(SpecificItemHandlerInfo handler, ItemStack stack, boolean output){ boolean whitelisted = handler.relayInQuestion.isWhitelisted(stack, output); - TileEntityLaserRelayItem connected = this.getConnectedRelay(); + TileEntityLaserRelayItem connected = this.connectedRelay; if(connected != null && connected != handler.relayInQuestion){ return whitelisted && connected.isWhitelisted(stack, !output); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index 3663f7d49..0a92b0ee5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -11,6 +11,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.Network; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer.GenericItemHandlerInfo; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -24,6 +26,9 @@ import java.util.List; public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ + public List handlersAround = new ArrayList(); + private boolean hasCheckedHandlersOnLoad; + public TileEntityLaserRelayItem(String name){ super(name, true); } @@ -36,8 +41,21 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ return true; } - public List getAllHandlersAround(){ - List handlers = new ArrayList(); + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote && !this.hasCheckedHandlersOnLoad){ + this.saveAllHandlersAround(); + this.hasCheckedHandlersOnLoad = true; + + System.out.println("------------Saving around on load " + this.handlersAround); + } + } + + public void saveAllHandlersAround(){ + this.handlersAround.clear(); + for(int i = 0; i <= 5; i++){ EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); @@ -45,27 +63,26 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ if(tile != null && !(tile instanceof TileEntityItemViewer)){ IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); if(handler != null){ - handlers.add(handler); + this.handlersAround.add(handler); } } } - return handlers; } - public List getItemHandlersInNetwork(LaserRelayConnectionHandler.Network network){ - List handlers = new ArrayList(); + public List getItemHandlersInNetwork(Network network){ + List handlers = new ArrayList(); for(LaserRelayConnectionHandler.ConnectionPair pair : network.connections){ for(BlockPos relay : pair.positions){ if(relay != null){ TileEntity aRelayTile = this.worldObj.getTileEntity(relay); - if(aRelayTile instanceof de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem){ - de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem relayTile = (de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem)aRelayTile; - if(!TileEntityItemViewer.GenericItemHandlerInfo.containsTile(handlers, relayTile)){ - TileEntityItemViewer.GenericItemHandlerInfo info = new TileEntityItemViewer.GenericItemHandlerInfo(relayTile); + if(aRelayTile instanceof TileEntityLaserRelayItem){ + TileEntityLaserRelayItem relayTile = (TileEntityLaserRelayItem)aRelayTile; + if(!GenericItemHandlerInfo.containsTile(handlers, relayTile)){ + GenericItemHandlerInfo info = new GenericItemHandlerInfo(relayTile); - List handlersAroundTile = relayTile.getAllHandlersAround(); + List handlersAroundTile = relayTile.handlersAround; for(IItemHandler handler : handlersAroundTile){ - if(!TileEntityItemViewer.GenericItemHandlerInfo.containsHandler(handlers, handler)){ + if(!GenericItemHandlerInfo.containsHandler(handlers, handler)){ info.handlers.add(handler); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 1c0910207..b090192e9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -233,7 +233,7 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem int slotStart = output ? 12 : 0; int slotStop = slotStart+12; - List handlers = this.getAllHandlersAround(); + List handlers = this.handlersAround; for(IItemHandler handler : handlers){ for(int i = 0; i < handler.getSlots(); i++){ ItemStack stack = handler.getStackInSlot(i); From b8051e6483afcc588134700215ec50a2317263df Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 15:42:28 +0200 Subject: [PATCH 264/322] Increased ESD performance by making it remember the tiles around --- .../actuallyadditions/mod/blocks/BlockInputter.java | 10 ++++++++++ .../actuallyadditions/mod/blocks/BlockItemViewer.java | 1 - .../actuallyadditions/mod/blocks/BlockLaserRelay.java | 3 +-- .../actuallyadditions/mod/tile/TileEntityInputter.java | 8 +++++++- .../mod/tile/TileEntityItemViewer.java | 2 -- .../mod/tile/TileEntityLaserRelayItem.java | 2 -- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java index ae4fb49ad..e5b13e238 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockInputter.java @@ -90,6 +90,16 @@ public class BlockInputter extends BlockContainerBase{ return EnumRarity.EPIC; } + @Override + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block){ + if(!world.isRemote){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityInputter){ + ((TileEntityInputter)tile).initVars(); + } + } + } + public static class TheItemBlock extends ItemBlockBase{ private long lastSysTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index 31026f2f9..fee3a1b7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -40,7 +40,6 @@ public class BlockItemViewer extends BlockContainerBase{ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityItemViewer){ ((TileEntityItemViewer)tile).saveConnectedRelay(); - System.out.println("------------Saving connected on change " + ((TileEntityItemViewer)tile).connectedRelay); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 859c586de..2b046246d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -118,11 +118,10 @@ public class BlockLaserRelay extends BlockContainerBase{ @Override public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block){ - if(!world.isRemote){ + if((this.type == Type.ITEM || this.type == Type.ITEM_WHITELIST) && !world.isRemote){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityLaserRelayItem){ ((TileEntityLaserRelayItem)tile).saveAllHandlersAround(); - System.out.println("------------Saving around on change " + ((TileEntityLaserRelayItem)tile).handlersAround); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 67badc6ad..22b592c75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -49,6 +49,8 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt private boolean lastPullWhite; private boolean lastPutWhite; + private boolean hasCheckedTilesAround; + public TileEntityInputter(int slots, String name){ super(slots, name); } @@ -348,6 +350,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } this.markDirty(); + this.initVars(); } @Override @@ -380,7 +383,10 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - this.initVars(); + if(!this.hasCheckedTilesAround){ + this.initVars(); + this.hasCheckedTilesAround = true; + } //Is Block not powered by Redstone? if(!this.isRedstonePowered){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index f667fc1c1..006b76f21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -38,8 +38,6 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ if(!this.worldObj.isRemote && !this.hasCheckedRelayOnLoad){ this.saveConnectedRelay(); this.hasCheckedRelayOnLoad = true; - - System.out.println("------------Saving relay on load " + this.connectedRelay); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index 0a92b0ee5..ce26b54dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -48,8 +48,6 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ if(!this.worldObj.isRemote && !this.hasCheckedHandlersOnLoad){ this.saveAllHandlersAround(); this.hasCheckedHandlersOnLoad = true; - - System.out.println("------------Saving around on load " + this.handlersAround); } } From 174d2aca7ec532bcf0034335d7cbcef9531dec27 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 16:07:06 +0200 Subject: [PATCH 265/322] Made Energy Laser Relay less performance intensive --- .../mod/blocks/BlockLaserRelay.java | 7 ++- .../mod/tile/TileEntityLaserRelay.java | 12 +++- .../mod/tile/TileEntityLaserRelayEnergy.java | 61 +++++++++++-------- .../mod/tile/TileEntityLaserRelayItem.java | 10 --- .../mod/tile/TileEntityPhantomEnergyface.java | 2 +- 5 files changed, 53 insertions(+), 39 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 2b046246d..6a4317309 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -118,10 +118,11 @@ public class BlockLaserRelay extends BlockContainerBase{ @Override public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block){ - if((this.type == Type.ITEM || this.type == Type.ITEM_WHITELIST) && !world.isRemote){ + if(!world.isRemote){ TileEntity tile = world.getTileEntity(pos); - if(tile instanceof TileEntityLaserRelayItem){ - ((TileEntityLaserRelayItem)tile).saveAllHandlersAround(); + if(tile instanceof TileEntityLaserRelay){ + ((TileEntityLaserRelay)tile).saveAllHandlersAround(); + System.out.println("Checked handlers around!"); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 97519184a..d59a498a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -23,7 +23,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -39,6 +38,8 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ private Set tempConnectionStorage; + private boolean hasCheckedHandlersAround; + public TileEntityLaserRelay(String name, boolean isItem){ super(name); this.isItem = isItem; @@ -82,6 +83,15 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ if(this.worldObj.isRemote){ this.renderParticles(); } + else if(!this.hasCheckedHandlersAround){ + this.saveAllHandlersAround(); + this.hasCheckedHandlersAround = true; + System.out.println("Checked handlers around!"); + } + } + + public void saveAllHandlersAround(){ + } @SideOnly(Side.CLIENT) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 1549cfd0b..c62515d97 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -13,24 +13,27 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements IEnergyReceiver{ + public Map receiversAround = new HashMap(); + public TileEntityLaserRelayEnergy(){ super("laserRelay", false); } @Override public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ - return this.transmitEnergy(WorldUtil.getCoordsFromSide(from, this.pos, 0), maxReceive, simulate); + return this.transmitEnergy(from, maxReceive, simulate); } @Override @@ -43,12 +46,12 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements return 0; } - public int transmitEnergy(BlockPos blockFrom, int maxTransmit, boolean simulate){ + public int transmitEnergy(EnumFacing from, int maxTransmit, boolean simulate){ int transmitted = 0; if(maxTransmit > 0){ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); if(network != null){ - transmitted = this.transferEnergyToReceiverInNeed(blockFrom, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); + transmitted = this.transferEnergyToReceiverInNeed(from, network, Math.min(ConfigIntValues.LASER_RELAY_MAX_TRANSFER.getValue(), maxTransmit), simulate); } } return transmitted; @@ -59,7 +62,20 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements return true; } - private int transferEnergyToReceiverInNeed(BlockPos energyGottenFrom, LaserRelayConnectionHandler.Network network, int maxTransfer, boolean simulate){ + @Override + public void saveAllHandlersAround(){ + this.receiversAround.clear(); + + for(EnumFacing side : EnumFacing.values()){ + BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); + TileEntity tile = this.worldObj.getTileEntity(pos); + if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ + this.receiversAround.put(side, (IEnergyReceiver)tile); + } + } + } + + private int transferEnergyToReceiverInNeed(EnumFacing from, LaserRelayConnectionHandler.Network network, int maxTransfer, boolean simulate){ int transmitted = 0; List alreadyChecked = new ArrayList(); //Go through all of the connections in the network @@ -68,27 +84,24 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements for(BlockPos relay : pair.positions){ if(relay != null && !alreadyChecked.contains(relay)){ alreadyChecked.add(relay); - //Get every side of the relay - for(int i = 0; i <= 5; i++){ - EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - //Get the Position at the side - BlockPos pos = WorldUtil.getCoordsFromSide(side, relay, 0); - if(!PosUtil.areSamePos(pos, energyGottenFrom)){ - TileEntity tile = this.worldObj.getTileEntity(pos); - if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ - IEnergyReceiver receiver = (IEnergyReceiver)tile; - if(receiver.canConnectEnergy(side.getOpposite())){ - //Transfer the energy (with the energy loss!) - int theoreticalReceived = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), maxTransfer-transmitted, true); - //The amount of energy lost during a transfer - int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); + TileEntity relayTile = this.worldObj.getTileEntity(relay); + if(relayTile instanceof TileEntityLaserRelayEnergy){ + for(Map.Entry receiver : ((TileEntityLaserRelayEnergy)relayTile).receiversAround.entrySet()){ + if(receiver != null && receiver.getKey() != null && receiver.getValue() != null){ + if(receiver.getKey() != from){ + if(receiver.getValue().canConnectEnergy(receiver.getKey().getOpposite())){ + //Transfer the energy (with the energy loss!) + int theoreticalReceived = receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), maxTransfer-transmitted, true); + //The amount of energy lost during a transfer + int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); - transmitted += ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), theoreticalReceived-deduct, simulate); - transmitted += deduct; + transmitted += receiver.getValue().receiveEnergy(receiver.getKey().getOpposite(), theoreticalReceived-deduct, simulate); + transmitted += deduct; - //If everything that could be transmitted was transmitted - if(transmitted >= maxTransfer){ - return transmitted; + //If everything that could be transmitted was transmitted + if(transmitted >= maxTransfer){ + return transmitted; + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index ce26b54dc..5adc60c5f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -27,7 +27,6 @@ import java.util.List; public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ public List handlersAround = new ArrayList(); - private boolean hasCheckedHandlersOnLoad; public TileEntityLaserRelayItem(String name){ super(name, true); @@ -42,15 +41,6 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ } @Override - public void updateEntity(){ - super.updateEntity(); - - if(!this.worldObj.isRemote && !this.hasCheckedHandlersOnLoad){ - this.saveAllHandlersAround(); - this.hasCheckedHandlersOnLoad = true; - } - } - public void saveAllHandlersAround(){ this.handlersAround.clear(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 5c636ef9a..497c466c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -105,7 +105,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement TileEntity tile = WorldUtil.getTileEntityFromSide(side, this.worldObj, this.getPos()); if(tile != null && tile instanceof IEnergyReceiver && this.getProvider().getEnergyStored(side.getOpposite()) > 0){ if(((IEnergyReceiver)tile).canConnectEnergy(side.getOpposite()) && this.canConnectEnergy(side)){ - int receive = this.extractEnergy(side, Math.min(((IEnergyReceiver)tile).getMaxEnergyStored(side.getOpposite())-((IEnergyReceiver)tile).getEnergyStored(side.getOpposite()), this.getEnergyStored(side)), true); + int receive = this.extractEnergy(side, Integer.MAX_VALUE, true); int actualReceive = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), receive, false); this.extractEnergy(side, actualReceive, false); } From 3f00973f280e8301673a873ce9cbe525f874cf46 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 16:14:06 +0200 Subject: [PATCH 266/322] Changed energy handling system to be more like the fluid one and also more sane --- .../mod/blocks/BlockLaserRelay.java | 1 - .../mod/tile/TileEntityCoalGenerator.java | 2 +- .../mod/tile/TileEntityEnervator.java | 2 +- .../mod/tile/TileEntityFurnaceSolar.java | 2 +- .../mod/tile/TileEntityHeatCollector.java | 2 +- .../mod/tile/TileEntityLaserRelay.java | 1 - .../mod/tile/TileEntityLeafGenerator.java | 2 +- .../mod/tile/TileEntityOilGenerator.java | 2 +- .../mod/tile/TileEntityPhantomEnergyface.java | 18 +--------- .../actuallyadditions/mod/util/WorldUtil.java | 34 ++++++++++++------- 10 files changed, 28 insertions(+), 38 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java index 6a4317309..0e654d4ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLaserRelay.java @@ -122,7 +122,6 @@ public class BlockLaserRelay extends BlockContainerBase{ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityLaserRelay){ ((TileEntityLaserRelay)tile).saveAllHandlersAround(); - System.out.println("Checked handlers around!"); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 6c90ef3ed..66f757f87 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -84,7 +84,7 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this); } if(flag != this.currentBurnTime > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 57d40e4ad..6c41caf0b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -61,7 +61,7 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this); } if(this.lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index d594bcd7c..955e0af18 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -74,7 +74,7 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this); } if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index d707a0488..10ce2edb9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -74,7 +74,7 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergy(this.worldObj, this.pos, EnumFacing.UP, this.storage); + WorldUtil.pushEnergyToAllSides(this); } if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index d59a498a5..2bf4cb5ce 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -86,7 +86,6 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ else if(!this.hasCheckedHandlersAround){ this.saveAllHandlersAround(); this.hasCheckedHandlersAround = true; - System.out.println("Checked handlers around!"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 2ba10173c..fec15a520 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -101,7 +101,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this); } if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 2ae0c4cb6..3a0e4e6fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -100,7 +100,7 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro } if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this.worldObj, this.pos, this.storage); + WorldUtil.pushEnergyToAllSides(this); } if(flag != this.currentBurnTime > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 497c466c6..46adf947f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -86,12 +86,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(!this.worldObj.isRemote){ if(this.isBoundThingInRange() && this.getProvider() != null){ - this.pushEnergy(EnumFacing.UP); - this.pushEnergy(EnumFacing.DOWN); - this.pushEnergy(EnumFacing.NORTH); - this.pushEnergy(EnumFacing.EAST); - this.pushEnergy(EnumFacing.SOUTH); - this.pushEnergy(EnumFacing.WEST); + WorldUtil.pushEnergyToAllSides(this); } } } @@ -101,17 +96,6 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement return super.isBoundThingInRange() && (this.worldObj.getTileEntity(this.boundPosition) instanceof IEnergyReceiver || this.worldObj.getTileEntity(this.boundPosition) instanceof IEnergyProvider); } - private void pushEnergy(EnumFacing side){ - TileEntity tile = WorldUtil.getTileEntityFromSide(side, this.worldObj, this.getPos()); - if(tile != null && tile instanceof IEnergyReceiver && this.getProvider().getEnergyStored(side.getOpposite()) > 0){ - if(((IEnergyReceiver)tile).canConnectEnergy(side.getOpposite()) && this.canConnectEnergy(side)){ - int receive = this.extractEnergy(side, Integer.MAX_VALUE, true); - int actualReceive = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), receive, false); - this.extractEnergy(side, actualReceive, false); - } - } - } - @Override public boolean canConnectEnergy(EnumFacing from){ if(this.isBoundThingInRange()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 9fe929c89..e602a1df8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.util; import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; @@ -63,21 +64,28 @@ public class WorldUtil{ return new BlockPos(pos.getX()+side.getFrontOffsetX()*(offset+1), pos.getY()+side.getFrontOffsetY()*(offset+1), pos.getZ()+side.getFrontOffsetZ()*(offset+1)); } - public static void pushEnergyToAllSides(World world, BlockPos pos, EnergyStorage storage){ - pushEnergy(world, pos, EnumFacing.UP, storage); - pushEnergy(world, pos, EnumFacing.DOWN, storage); - pushEnergy(world, pos, EnumFacing.NORTH, storage); - pushEnergy(world, pos, EnumFacing.EAST, storage); - pushEnergy(world, pos, EnumFacing.SOUTH, storage); - pushEnergy(world, pos, EnumFacing.WEST, storage); + public static void pushEnergyToAllSides(TileEntity tileFrom){ + pushEnergy(tileFrom, EnumFacing.UP); + pushEnergy(tileFrom, EnumFacing.DOWN); + pushEnergy(tileFrom, EnumFacing.NORTH); + pushEnergy(tileFrom, EnumFacing.EAST); + pushEnergy(tileFrom, EnumFacing.SOUTH); + pushEnergy(tileFrom, EnumFacing.WEST); } - public static void pushEnergy(World world, BlockPos pos, EnumFacing side, EnergyStorage storage){ - TileEntity tile = getTileEntityFromSide(side, world, pos); - if(tile != null && tile instanceof IEnergyReceiver && storage.getEnergyStored() > 0){ - if(((IEnergyReceiver)tile).canConnectEnergy(side.getOpposite())){ - int receive = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), Math.min(storage.getMaxExtract(), storage.getEnergyStored()), false); - storage.extractEnergy(receive, false); + public static void pushEnergy(TileEntity tileFrom, EnumFacing side){ + TileEntity tileTo = getTileEntityFromSide(side, tileFrom.getWorld(), tileFrom.getPos()); + if(tileTo != null){ + if(tileFrom instanceof IEnergyProvider && tileTo instanceof IEnergyReceiver){ + IEnergyReceiver handlerTo = (IEnergyReceiver)tileTo; + IEnergyProvider handlerFrom = (IEnergyProvider)tileFrom; + int drain = handlerFrom.extractEnergy(side, Integer.MAX_VALUE, true); + if(drain > 0){ + if(handlerTo.canConnectEnergy(side.getOpposite())){ + int filled = handlerTo.receiveEnergy(side.getOpposite(), drain, false); + handlerFrom.extractEnergy(side, filled, false); + } + } } } } From 3dbc31e264adec6951b52cb23b52e4019e260e2c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 16:26:51 +0200 Subject: [PATCH 267/322] Made coal and oil generator not randomly appear on even though they're not --- .../mod/blocks/BlockCoalGenerator.java | 18 ++++++------------ .../mod/blocks/BlockOilGenerator.java | 17 +++++++---------- .../mod/tile/TileEntityCoalGenerator.java | 9 --------- .../mod/tile/TileEntityOilGenerator.java | 9 --------- .../blockstates/blockCoalGenerator.json | 6 +----- .../blockstates/blockOilGenerator.json | 6 +----- 6 files changed, 15 insertions(+), 50 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 02a1977df..1e80dd6d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -37,8 +37,6 @@ import java.util.Random; public class BlockCoalGenerator extends BlockContainerBase{ - private static final PropertyInteger META = PropertyInteger.create("meta", 0, 1); - public BlockCoalGenerator(String name){ super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); @@ -57,11 +55,12 @@ public class BlockCoalGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ - int meta = PosUtil.getMetadata(state); - - if(meta == 1){ - for(int i = 0; i < 5; i++){ - world.spawnParticle(ClientProxy.bulletForMyValentine ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL, (double)pos.getX()+0.5F, (double)pos.getY()+1.0F, (double)pos.getZ()+0.5F, 0.0D, 0.0D, 0.0D); + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityCoalGenerator){ + if(((TileEntityCoalGenerator)tile).currentBurnTime > 0){ + for(int i = 0; i < 5; i++){ + world.spawnParticle(ClientProxy.bulletForMyValentine ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL, (double)pos.getX()+0.5F, (double)pos.getY()+1.0F, (double)pos.getZ()+0.5F, 0.0D, 0.0D, 0.0D); + } } } } @@ -83,11 +82,6 @@ public class BlockCoalGenerator extends BlockContainerBase{ return EnumRarity.RARE; } - @Override - protected PropertyInteger getMetaProperty(){ - return META; - } - @Override public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 7b024c838..9bcee2f6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; import de.ellpeck.actuallyadditions.mod.tile.TileEntityOilGenerator; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; @@ -37,8 +38,6 @@ import java.util.Random; public class BlockOilGenerator extends BlockContainerBase{ - private static final PropertyInteger META = PropertyInteger.create("meta", 0, 1); - public BlockOilGenerator(String name){ super(Material.ROCK, name); this.setHarvestLevel("pickaxe", 0); @@ -57,9 +56,12 @@ public class BlockOilGenerator extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ - if(PosUtil.getMetadata(state) == 1){ - for(int i = 0; i < 5; i++){ - world.spawnParticle(ClientProxy.bulletForMyValentine ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL, (double)pos.getX()+0.5F, (double)pos.getY()+1.0F, (double)pos.getZ()+0.5F, 0.0D, 0.0D, 0.0D); + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityOilGenerator){ + if(((TileEntityOilGenerator)tile).currentBurnTime > 0){ + for(int i = 0; i < 5; i++){ + world.spawnParticle(ClientProxy.bulletForMyValentine ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL, (double)pos.getX()+0.5F, (double)pos.getY()+1.0F, (double)pos.getZ()+0.5F, 0.0D, 0.0D, 0.0D); + } } } } @@ -83,11 +85,6 @@ public class BlockOilGenerator extends BlockContainerBase{ return EnumRarity.RARE; } - @Override - protected PropertyInteger getMetaProperty(){ - return META; - } - @Override public void breakBlock(World world, BlockPos pos, IBlockState state){ this.dropInventory(world, pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 66f757f87..80a82ee82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -89,15 +89,6 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements if(flag != this.currentBurnTime > 0){ this.markDirty(); - int meta = PosUtil.getMetadata(this.getPos(), this.worldObj); - if(meta == 1){ - if(!(this.currentBurnTime <= 0 && this.slots[0] != null && TileEntityFurnace.getItemBurnTime(this.slots[0]) > 0 && this.storage.getEnergyStored() < this.storage.getMaxEnergyStored())){ - PosUtil.setMetadata(this.pos, this.worldObj, 0, 2); - } - } - else{ - PosUtil.setMetadata(this.pos, this.worldObj, 1, 2); - } } if((this.storage.getEnergyStored() != this.lastEnergy || this.currentBurnTime != this.lastCurrentBurnTime || this.lastBurnTime != this.maxBurnTime) && this.sendUpdateWithInterval()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 3a0e4e6fd..9f59130ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -105,15 +105,6 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro if(flag != this.currentBurnTime > 0){ this.markDirty(); - int meta = PosUtil.getMetadata(this.pos, this.worldObj); - if(meta == 1){ - if(!(ENERGY_PRODUCED*BURN_TIME <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored() && this.currentBurnTime <= 0 && this.tank.getFluidAmount() >= fuelUsed)){ - PosUtil.setMetadata(this.pos, this.worldObj, 0, 2); - } - } - else{ - PosUtil.setMetadata(this.pos, this.worldObj, 1, 2); - } } if((this.storage.getEnergyStored() != this.lastEnergy || this.tank.getFluidAmount() != this.lastTank || this.lastBurnTime != this.currentBurnTime) && this.sendUpdateWithInterval()){ diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json b/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json index 10559a6c3..d2c0683a5 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockCoalGenerator.json @@ -11,10 +11,6 @@ }, "variants": { "normal": [{}], - "inventory": [{}], - "meta": { - "0": {}, - "1": {} - } + "inventory": [{}] } } \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json b/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json index bbf865d4b..03c8d6e46 100644 --- a/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockOilGenerator.json @@ -11,10 +11,6 @@ }, "variants": { "normal": [{}], - "inventory": [{}], - "meta": { - "0": {}, - "1": {} - } + "inventory": [{}] } } \ No newline at end of file From 4144f03d141759e45ccf5aa9ac1b2ffd9e4f439b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 17:28:25 +0200 Subject: [PATCH 268/322] r43! --- build.gradle | 2 +- update/changelog.md | 9 +++++++++ update/updateVersions.properties | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 2a2dcb734..afe53196b 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r42" +version = "1.9.4-r43" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index eeb05fd34..1e70305fe 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,12 @@ +# 1.9.4-r43 +### This update increases the performance of some blocks by a significant bit. If you are experiencing lag in a world with many Laser Relays, install this. +* More proper laser relay bounding boxes +* Significantly upped the performance of Item Laser Relays +* Increased ESD performance +* Made Energy Laser Relays less performance intensive +* Changed energy handling system a bit, should be the same in-game +* Made coal and oil generator not randomly appear to be on even though they're not + # 1.9.4-r42 ### The shut-up-about-EnderIO Update. * Changed ESD to allow higher numbers of slots and have no limit on input values so that you can basically make it pull from infintely many slots if the amount of slots present is able to change diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 23c687e13..660750897 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=42 \ No newline at end of file +1.9.4=43 \ No newline at end of file From e9fa9bca9297d89240894260f09627b6fb72e248 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 11 Jun 2016 23:43:28 +0200 Subject: [PATCH 269/322] Fixed a couple of things. Hopefully all works now. >_> --- .../mod/blocks/BlockGiantChest.java | 5 ++++- .../actuallyadditions/mod/data/WorldData.java | 12 +++++++++--- .../mod/tile/TileEntityInventoryBase.java | 8 +++++--- .../actuallyadditions/mod/util/WorldUtil.java | 14 ++++++++++++-- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 4de68096f..1db83d73d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -76,7 +76,10 @@ public class BlockGiantChest extends BlockContainerBase{ ItemStack[] slots = ((TileEntityGiantChest)tile).slots; for(int i = 0; i < list.tagCount(); i++){ - slots[i] = ItemStack.loadItemStackFromNBT(list.getCompoundTagAt(i)); + NBTTagCompound compound = list.getCompoundTagAt(i); + if(compound != null && compound.hasKey("id")){ + slots[i] = ItemStack.loadItemStackFromNBT(list.getCompoundTagAt(i)); + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 55bb2f803..9e6e74a1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -48,10 +48,16 @@ public class WorldData{ int dim = world.provider.getDimension(); WorldData data = worldData.get(dim); - if(data == null && world.isRemote){ + if(data == null){ data = new WorldData(null, dim); - worldData.put(dim, data); - ModUtil.LOGGER.info("Creating temporary WorldData for world "+dim+" on the client!"); + + if(world.isRemote){ + worldData.put(dim, data); + ModUtil.LOGGER.info("Creating temporary WorldData for world "+dim+" on the client!"); + } + else{ + ModUtil.LOGGER.warn("Trying to get WorldData from world "+dim+" that doesn't have any data!? This shouldn't happen!"); + } } return data; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 67571056e..51fdcc0c8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -59,9 +59,11 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements NBTTagList tagList = compound.getTagList("Items", 10); for(int i = 0; i < tagList.tagCount(); i++){ NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - byte slotIndex = tagCompound.getByte("Slot"); - if(slotIndex >= 0 && slotIndex < slots.length){ - slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); + if(tagCompound != null && tagCompound.hasKey("id")){ + byte slotIndex = tagCompound.getByte("Slot"); + if(slotIndex >= 0 && slotIndex < slots.length){ + slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index e602a1df8..0053ffd40 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -340,8 +340,16 @@ public class WorldUtil{ * @return If the Block could be harvested normally (so that it drops an item) */ public static boolean playerHarvestBlock(World world, BlockPos pos, EntityPlayer player){ - Block block = PosUtil.getBlock(pos, world); IBlockState state = world.getBlockState(pos); + if(state == null){ + return false; + } + + Block block = state.getBlock(); + if(block == null){ + return false; + } + TileEntity tile = world.getTileEntity(pos); ItemStack stack = player.getHeldItemMainhand(); @@ -351,7 +359,8 @@ public class WorldUtil{ //Send Block Breaking Event int xp = -1; if(player instanceof EntityPlayerMP){ - xp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP)player).interactionManager.getGameType(), (EntityPlayerMP)player, pos); + EntityPlayerMP playerMP = (EntityPlayerMP)player; + xp = ForgeHooks.onBlockBreakEvent(world, playerMP.interactionManager.getGameType(), playerMP, pos); if(xp == -1){ return false; } @@ -397,6 +406,7 @@ public class WorldUtil{ //Check the Server if a Block that changed on the Client really changed, if not, revert the change Minecraft.getMinecraft().getConnection().sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, Minecraft.getMinecraft().objectMouseOver.sideHit)); } + return removed; } } From e0e9450e36208b1fcc12cc0d9ea5102c3ac0c28d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 12 Jun 2016 01:35:59 +0200 Subject: [PATCH 270/322] r44 >_> --- build.gradle | 2 +- update/changelog.md | 5 +++++ update/updateVersions.properties | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index afe53196b..1c6c29b33 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r43" +version = "1.9.4-r44" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index 1e70305fe..aaeba43a5 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,8 @@ +# 1.9.4-r44 +* Fixed a weird crash with Item Laser Relays. +* Fixed drills sometimes crashing when breaking certain blocks. +###### I am extremely sorry for the amount of updates in the last couple of days. This is hopefully the last one for a few weeks as the most significant bugs with the new features have now been fixed. I hope this doesn't diminish your liking for the mod in any way. + # 1.9.4-r43 ### This update increases the performance of some blocks by a significant bit. If you are experiencing lag in a world with many Laser Relays, install this. * More proper laser relay bounding boxes diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 660750897..2d304e7ce 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=43 \ No newline at end of file +1.9.4=44 \ No newline at end of file From ac6cf7c3bc80f7f639e72a0e8cb4fc06a57c8831 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 12 Jun 2016 13:39:26 +0200 Subject: [PATCH 271/322] Added video introduction page --- .../api/ActuallyAdditionsAPI.java | 2 +- .../api/booklet/BookletPage.java | 13 +++++ .../api/internal/IBookletGui.java | 7 ++- .../mod/booklet/BookletUtils.java | 15 +++++- .../mod/booklet/GuiBooklet.java | 23 ++++++--- .../mod/booklet/InitBooklet.java | 1 + .../mod/booklet/page/PageButton.java | 46 ++++++++++++++++++ .../mod/booklet/page/PageLinkButton.java | 29 +++++++++++ .../actuallyadditions/mod/items/ItemMisc.java | 5 +- .../mod/items/metalists/TheMiscItems.java | 4 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 2 + .../assets/actuallyadditions/lang/en_US.lang | 6 ++- .../models/item/itemMiscYoutubeIcon.json | 6 +++ .../textures/items/itemMiscYoutubeIcon.png | Bin 0 -> 355 bytes 14 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageButton.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMiscYoutubeIcon.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscYoutubeIcon.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index ee19c33d9..9afc96cee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -30,7 +30,7 @@ public class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "15"; + public static final String API_VERSION = "16"; public static final List CRUSHER_RECIPES = new ArrayList(); public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); public static final List TREASURE_CHEST_LOOT = new ArrayList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java index e8842732a..bc8aaee35 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.api.booklet; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; +import net.minecraft.client.gui.GuiButton; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -20,6 +21,18 @@ public abstract class BookletPage{ public boolean arePageStacksWildcard; protected IBookletChapter chapter; + public void onOpened(IBookletGui gui){ + + } + + public void onClosed(IBookletGui gui){ + + } + + public boolean onActionPerformed(IBookletGui gui, GuiButton button){ + return false; + } + /** * The ID of the page, for the page number etc. * Don't make two pages in the same chapter with the same ID. diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java index 8c4f20ff7..ca92ace10 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/internal/IBookletGui.java @@ -11,10 +11,13 @@ package de.ellpeck.actuallyadditions.api.internal; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import net.minecraft.client.gui.GuiButton; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.util.List; + /** * This is a helper interface for BookletPage * This is not supposed to be implemented. @@ -27,7 +30,7 @@ public interface IBookletGui{ * This method should be used when drawing an ItemStack to a booklet page * It displays the hoverover text of the item and also contains the "show more info"-text and clickable part * - * @param renderTransferButton if the "show more info"-text and clickable part should exist- + * @param renderTransferButton if the "show more info"-text and clickable part should exist */ @SideOnly(Side.CLIENT) void renderTooltipAndTransferButton(BookletPage from, ItemStack stack, int x, int y, boolean renderTransferButton, boolean mousePressed); @@ -43,4 +46,6 @@ public interface IBookletGui{ void drawRect(int startX, int startY, int u, int v, int xSize, int ySize); IEntrySet getCurrentEntrySet(); + + List getButtonList(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 06f117d39..6f692eab6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -249,6 +249,9 @@ public class BookletUtils{ } } + if(booklet.currentEntrySet.getCurrentPage() != null){ + booklet.currentEntrySet.getCurrentPage().onClosed(booklet); + } booklet.currentEntrySet.setPage(null); booklet.currentEntrySet.setChapter(null); @@ -325,7 +328,13 @@ public class BookletUtils{ booklet.searchField.setText(""); booklet.currentEntrySet.setChapter(chapter); - booklet.currentEntrySet.setPage(page != null && doesChapterHavePage(chapter, page) ? page : chapter.getPages()[0]); + + if(booklet.currentEntrySet.getCurrentPage() != null){ + booklet.currentEntrySet.getCurrentPage().onClosed(booklet); + } + BookletPage pageToSet = page != null && doesChapterHavePage(chapter, page) ? page : chapter.getPages()[0]; + booklet.currentEntrySet.setPage(pageToSet); + pageToSet.onOpened(booklet); booklet.buttonForward.visible = getNextPage(chapter, booklet.currentEntrySet.getCurrentPage()) != null; booklet.buttonBackward.visible = getPrevPage(chapter, booklet.currentEntrySet.getCurrentPage()) != null; @@ -386,7 +395,9 @@ public class BookletUtils{ if(booklet.currentEntrySet.getCurrentPage() != null){ BookletPage page = getNextPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()); if(page != null){ + booklet.currentEntrySet.getCurrentPage().onClosed(booklet); booklet.currentEntrySet.setPage(page); + page.onOpened(booklet); } booklet.buttonForward.visible = getNextPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()) != null; @@ -408,7 +419,9 @@ public class BookletUtils{ if(booklet.currentEntrySet.getCurrentPage() != null){ BookletPage page = getPrevPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()); if(page != null){ + booklet.currentEntrySet.getCurrentPage().onClosed(booklet); booklet.currentEntrySet.setPage(page); + page.onOpened(booklet); } booklet.buttonForward.visible = getNextPage(booklet.currentEntrySet.getCurrentChapter(), booklet.currentEntrySet.getCurrentPage()) != null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 3b9e272ff..c9abd2e72 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -101,6 +101,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ return this.fontRendererObj; } + @Override public List getButtonList(){ return this.buttonList; } @@ -143,8 +144,15 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ //Pre-Renders the current page's content etc. BookletUtils.renderPre(this, x, y, this.ticksElapsed, this.mousePressed); - //Does vanilla drawing stuff - super.drawScreen(x, y, f); + //Buttons and search field + if(this.currentEntrySet.getCurrentPage() != null){ + this.fontRendererObj.setUnicodeFlag(false); + } + for(GuiButton button : this.buttonList){ + button.drawButton(this.mc, x, y); + } + this.fontRendererObj.setUnicodeFlag(true); + this.searchField.drawTextBox(); //Renders the current page's content @@ -156,14 +164,11 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ this.fontRendererObj.setUnicodeFlag(false); BookletUtils.doHoverTexts(this, x, y); BookletUtils.drawAchievementInfo(this, false, x, y); - this.fontRendererObj.setUnicodeFlag(true); this.fontRendererObj.setUnicodeFlag(unicodeBefore); //Resets mouse - if(this.mousePressed){ - this.mousePressed = false; - } + this.mousePressed = false; } @Override @@ -224,6 +229,12 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void actionPerformed(GuiButton button){ + if(this.currentEntrySet.getCurrentPage() != null){ + if(this.currentEntrySet.getCurrentPage().onActionPerformed(this, button)){ + return; + } + } + //Handles update if(button == this.buttonUpdate){ if(UpdateChecker.needsUpdateNotify){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 4543ce866..caa398885 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -61,6 +61,7 @@ public class InitBooklet{ private static void initChapters(){ //Getting Started chapterIntro = new BookletChapter("intro", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageTextOnly(3)); + new BookletChapter("videoGuide", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.YOUTUBE_ICON.ordinal()), new PageLinkButton(1, "https://www.youtube.com/watch?v=fhjz0Ew56pM")).setImportant(); new BookletChapter("bookTutorial", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeBook)); new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(8, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(9, LensRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); new BookletChapter("coalGen", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockCoalGenerator), new PageCrafting(1, BlockCrafting.recipeCoalGen).addTextReplacement("", TileEntityCoalGenerator.PRODUCE).setPageStacksWildcard()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageButton.java new file mode 100644 index 000000000..a30b06d7f --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageButton.java @@ -0,0 +1,46 @@ +/* + * This file ("PageButton.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.booklet.page; + +import de.ellpeck.actuallyadditions.api.internal.IBookletGui; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; + +public abstract class PageButton extends PageTextOnly{ + + private GuiButton button; + + public PageButton(int id){ + super(id); + } + + @Override + public void onOpened(IBookletGui gui){ + String text = StringUtil.localize("booklet."+ModUtil.MOD_ID+".chapter."+this.chapter.getUnlocalizedName()+".page."+this.localizationKey+".button"); + int width = Minecraft.getMinecraft().fontRendererObj.getStringWidth(text); + this.button = new GuiButton(-1239, gui.getGuiLeft()+gui.getXSize()/2-width/2-8, gui.getGuiTop()+gui.getYSize()-40, width+15, 20, text); + gui.getButtonList().add(this.button); + } + + @Override + public void onClosed(IBookletGui gui){ + gui.getButtonList().remove(this.button); + } + + @Override + public boolean onActionPerformed(IBookletGui gui, GuiButton button){ + return button == this.button && this.onAction(); + } + + public abstract boolean onAction(); +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java new file mode 100644 index 000000000..8bf1cd4b9 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java @@ -0,0 +1,29 @@ +/* + * This file ("PageYoutubeButton.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.booklet.page; + +import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; + +public class PageLinkButton extends PageButton{ + + private String link; + + public PageLinkButton(int id, String link){ + super(id); + this.link = link; + } + + @Override + public boolean onAction(){ + BookletUtils.openBrowser(this.link); + return true; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index 7b3f358d0..d13099d81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -38,7 +38,6 @@ public class ItemMisc extends ItemBase{ return damage; } - @Override public String getUnlocalizedName(ItemStack stack){ return stack.getItemDamage() >= allMiscItems.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allMiscItems[stack.getItemDamage()].name; @@ -54,7 +53,9 @@ public class ItemMisc extends ItemBase{ @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ for(int j = 0; j < allMiscItems.length; j++){ - list.add(new ItemStack(this, 1, j)); + if(j != TheMiscItems.YOUTUBE_ICON.ordinal()){ + list.add(new ItemStack(this, 1, j)); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java index ab1fc0009..0ad74b899 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.items.metalists; +import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.item.EnumRarity; public enum TheMiscItems{ @@ -34,7 +35,8 @@ public enum TheMiscItems{ BLACK_DYE("BlackDye", EnumRarity.EPIC), LENS("Lens", EnumRarity.UNCOMMON), ENDER_STAR("EnderStar", EnumRarity.EPIC), - SPAWNER_SHARD("SpawnerShard", EnumRarity.EPIC); + SPAWNER_SHARD("SpawnerShard", EnumRarity.EPIC), + YOUTUBE_ICON("YoutubeIcon", Util.FALLBACK_RARITY); public final String name; public final EnumRarity rarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index 9a30b8483..472a46e63 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiCoffeeMachine; import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiFurnaceDouble; import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiGrinder; import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.jei.booklet.BookletRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.booklet.BookletRecipeHandler; import de.ellpeck.actuallyadditions.mod.jei.coffee.CoffeeMachineRecipeCategory; @@ -84,6 +85,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockCoffee)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockWildPlant, 1, Util.WILDCARD)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockColoredLampOn, 1, Util.WILDCARD)); + blacklist.addItemToBlacklist(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.YOUTUBE_ICON.ordinal())); IRecipeTransferRegistry transfer = registry.getRecipeTransferRegistry(); transfer.addRecipeTransferHandler(ContainerCrafter.class, VanillaRecipeCategoryUid.CRAFTING, 1, 9, 10, 36); diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index ab1a733ea..264ee9924 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -899,4 +899,8 @@ booklet.actuallyadditions.chapter.displayStand.text.1=The Display Stand booklet.actuallyadditions.chapter.displayStand.text.2=The Leaf Blower and Advanced Leaf Blower can be placed onto the display stand, resulting in the grass and leaves around it to be blown away. Potion Rings can be placed onto the display stand. The normal version will give the specified potion effect to only one living entity in a small area, while the advanced version will give a potion effect to all living entities in a big area while using up a significant amount of RF. booklet.actuallyadditions.chapter.itemFilter.name=Item Filter -booklet.actuallyadditions.chapter.itemFilter.text.1=The Item Filter can be used in Advanced Item Laser Relays, ESDs and Ranged Collectors to enlargen the size of their whitelist. This can be done by right-clicking with the filter in hand and placing items to be filtered inside of it. The filter can then be placed into any whitelist slot in the desired machine. For more information on this, hover over the whitelist buttons in the GUIs of whitelistable machines! \ No newline at end of file +booklet.actuallyadditions.chapter.itemFilter.text.1=The Item Filter can be used in Advanced Item Laser Relays, ESDs and Ranged Collectors to enlargen the size of their whitelist. This can be done by right-clicking with the filter in hand and placing items to be filtered inside of it. The filter can then be placed into any whitelist slot in the desired machine. For more information on this, hover over the whitelist buttons in the GUIs of whitelistable machines! + +booklet.actuallyadditions.chapter.videoGuide.name=A Video Guide +booklet.actuallyadditions.chapter.videoGuide.text.1=If you are a bit confused as to what is going on or just want to get a glimpse of what Actually Additions has to offer, there is this brilliant video by a guy called Booty Toast (yes, that is a weird name), that shows off what is possible in a really enjoyable way. Just click the button to have the video opened on YouTube! Give it a watch! +booklet.actuallyadditions.chapter.videoGuide.page.1.button=Watch Video \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMiscYoutubeIcon.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscYoutubeIcon.json new file mode 100644 index 000000000..0c1d55470 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscYoutubeIcon.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemMiscYoutubeIcon" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscYoutubeIcon.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscYoutubeIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9c8ab15f9e1048d84172ea1b9216dbe2038182 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmUKs7M+SzC{oH>NS%G}c0*}aI z1_r)8Aj~**Pmw23P@=>&q9iy!t)x7$D3zfgF*C13FE6!3!9>qM&oalj&JU>Op{I*u zNQC>_s|T|VIS3s4_+D3MtcZ1HnE?)>k= zZD*szZ(<>#cVlPQO}{R3O=f%DsS5AJxBEipU37}z|MNsscgpGg)tb5wSI@p6Bz82B z^RvmqYx$R~b Date: Wed, 15 Jun 2016 16:43:59 +0200 Subject: [PATCH 272/322] Completely changed the way packets are handled and removed client data file --- .../mod/booklet/BookletUtils.java | 57 +++++++ .../mod/booklet/GuiBooklet.java | 47 ++++-- .../mod/booklet/GuiBookletStand.java | 12 +- .../mod/data/ExtraClientData.java | 151 ------------------ ...{PlayerServerData.java => PlayerData.java} | 2 +- .../actuallyadditions/mod/data/WorldData.java | 2 +- .../mod/event/EntityLivingEvents.java | 4 +- .../mod/event/InitEvents.java | 2 +- .../mod/event/LogoutEvent.java | 26 --- .../mod/event/PlayerConnectionEvents.java | 43 +++++ .../mod/event/PlayerObtainEvents.java | 4 +- .../mod/inventory/gui/GuiCoffeeMachine.java | 12 +- .../mod/inventory/gui/GuiInputter.java | 23 ++- .../gui/GuiLaserRelayItemWhitelist.java | 13 +- .../mod/inventory/gui/GuiMiner.java | 12 +- .../mod/inventory/gui/GuiRangedCollector.java | 12 +- .../mod/inventory/gui/GuiSmileyCloud.java | 13 +- .../mod/inventory/gui/GuiXPSolidifier.java | 13 +- .../mod/network/IDataHandler.java | 19 +++ .../mod/network/PacketBookletStandButton.java | 92 ----------- .../mod/network/PacketClientToServer.java | 69 ++++++++ .../mod/network/PacketHandler.java | 147 +++++++++++++++-- .../mod/network/PacketParticle.java | 113 ------------- .../mod/network/PacketServerToClient.java | 72 +++++++++ .../mod/network/PacketUpdateTileEntity.java | 79 --------- .../mod/network/gui/PacketGuiButton.java | 81 ---------- .../mod/network/gui/PacketGuiNumber.java | 85 ---------- .../mod/network/gui/PacketGuiString.java | 96 ----------- .../mod/proxy/ClientProxy.java | 2 - .../tile/TileEntityAtomicReconstructor.java | 4 +- .../mod/tile/TileEntityBase.java | 9 +- .../mod/tile/TileEntityLaserRelay.java | 4 +- .../mod/tile/TileEntityLeafGenerator.java | 4 +- .../mod/tile/TileEntityMiner.java | 5 +- .../mod/tile/TileEntityPhantomPlacer.java | 5 +- .../mod/tile/TileEntityPhantomface.java | 4 +- .../actuallyadditions/mod/util/AssetUtil.java | 46 ++++++ 37 files changed, 598 insertions(+), 786 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java rename src/main/java/de/ellpeck/actuallyadditions/mod/data/{PlayerServerData.java => PlayerData.java} (98%) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/IDataHandler.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketClientToServer.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketServerToClient.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 6f692eab6..7d2aa74d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -19,6 +19,7 @@ import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton; import de.ellpeck.actuallyadditions.mod.booklet.button.IndexButton; import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; @@ -28,6 +29,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.stats.Achievement; import net.minecraft.util.text.TextFormatting; @@ -290,6 +293,8 @@ public class BookletUtils{ } } } + + booklet.changedPageSinceOpen = true; } /** @@ -345,6 +350,8 @@ public class BookletUtils{ for(GuiButton chapterButton : booklet.chapterButtons){ chapterButton.visible = false; } + + booklet.changedPageSinceOpen = true; } /** @@ -409,6 +416,8 @@ public class BookletUtils{ } } } + + booklet.changedPageSinceOpen = true; } /** @@ -433,6 +442,8 @@ public class BookletUtils{ } } } + + booklet.changedPageSinceOpen = true; } public static BookletPage getFirstPageForStack(ItemStack stack){ @@ -449,4 +460,50 @@ public class BookletUtils{ } return possiblePages; } + + public static void saveBookPage(GuiBooklet gui, NBTTagCompound compound){ + //Save Entry etc. + compound.setTag("SavedEntry", gui.currentEntrySet.writeToNBT()); + compound.setString("SearchWord", gui.searchField.getText()); + + //Save Bookmarks + NBTTagList list = new NBTTagList(); + for(int i = 0; i < gui.bookmarkButtons.length; i++){ + BookmarkButton button = (BookmarkButton)gui.bookmarkButtons[i]; + + list.appendTag(button.assignedEntry.writeToNBT()); + } + compound.setTag("Bookmarks", list); + } + + public static void openLastBookPage(GuiBooklet gui, NBTTagCompound compound){ + //Open Entry etc. + EntrySet set = EntrySet.readFromNBT(compound.getCompoundTag("SavedEntry")); + if(set != null){ + + BookletUtils.openIndexEntry(gui, set.entry, set.pageInIndex, true); + if(set.chapter != null){ + BookletUtils.openChapter(gui, set.chapter, set.page); + } + + String searchText = compound.getString("SearchWord"); + if(!searchText.isEmpty()){ + gui.searchField.setText(searchText); + BookletUtils.updateSearchBar(gui); + } + } + else{ + //If everything fails, initialize the front page + BookletUtils.openIndexEntry(gui, null, 1, true); + } + + //Load Bookmarks + NBTTagList list = compound.getTagList("Bookmarks", 10); + if(list != null){ + for(int i = 0; i < list.tagCount(); i++){ + BookmarkButton button = (BookmarkButton)gui.bookmarkButtons[i]; + button.assignedEntry = EntrySet.readFromNBT(list.getCompoundTagAt(i)); + } + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index c9abd2e72..4107ac1a9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -21,9 +21,11 @@ import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch; import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; import de.ellpeck.actuallyadditions.mod.config.GuiConfiguration; -import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; import de.ellpeck.actuallyadditions.mod.items.ItemBooklet; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -38,6 +40,7 @@ import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; @@ -88,6 +91,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ private int ticksElapsed; private boolean mousePressed; private int hisNameIsAt; + public boolean changedPageSinceOpen; public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){ this.xSize = 146; @@ -374,14 +378,23 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ if(ItemBooklet.forcedEntry == null){ //Open last entry or introductory entry - if(this.tryOpenMainPage && !ExtraClientData.getBoolean("BookAlreadyOpened")){ - BookletUtils.openIndexEntry(this, InitBooklet.chapterIntro.entry, 1, true); - BookletUtils.openChapter(this, InitBooklet.chapterIntro, null); + NBTTagCompound data = PlayerData.getDataFromPlayer(Minecraft.getMinecraft().thePlayer); + if(data != null){ + if(this.tryOpenMainPage && !data.getBoolean("BookAlreadyOpened")){ + BookletUtils.openIndexEntry(this, InitBooklet.chapterIntro.entry, 1, true); + BookletUtils.openChapter(this, InitBooklet.chapterIntro, null); - ExtraClientData.setBoolean("BookAlreadyOpened", true); - } - else{ - ExtraClientData.openLastBookPage(this); + NBTTagCompound extraData = new NBTTagCompound(); + extraData.setBoolean("BookAlreadyOpened", true); + NBTTagCompound dataToSend = new NBTTagCompound(); + dataToSend.setTag("Data", extraData); + dataToSend.setInteger("WorldID", Minecraft.getMinecraft().theWorld.provider.getDimension()); + dataToSend.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(dataToSend, PacketHandler.CHANGE_PLAYER_DATA_HANDLER)); + } + else{ + BookletUtils.openLastBookPage(this, data.getCompoundTag("BookletData")); + } } } else{ @@ -390,6 +403,8 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ BookletUtils.openChapter(this, ItemBooklet.forcedEntry.chapter, ItemBooklet.forcedEntry.page); ItemBooklet.forcedEntry = null; } + + this.changedPageSinceOpen = false; } @Override @@ -430,8 +445,20 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void onGuiClosed(){ - if(this.saveOnClose){ - ExtraClientData.saveBookPage(this); + if(this.saveOnClose && this.changedPageSinceOpen){ + System.out.println("SAVING"); + + NBTTagCompound bookletData = new NBTTagCompound(); + BookletUtils.saveBookPage(this, bookletData); + + NBTTagCompound extraData = new NBTTagCompound(); + extraData.setTag("BookletData", bookletData); + + NBTTagCompound dataToSend = new NBTTagCompound(); + dataToSend.setTag("Data", extraData); + dataToSend.setInteger("WorldID", Minecraft.getMinecraft().theWorld.provider.getDimension()); + dataToSend.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(dataToSend, PacketHandler.CHANGE_PLAYER_DATA_HANDLER)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java index a6720ffde..03abe74d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java @@ -10,13 +10,14 @@ package de.ellpeck.actuallyadditions.mod.booklet; -import de.ellpeck.actuallyadditions.mod.network.PacketBookletStandButton; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -35,7 +36,14 @@ public class GuiBookletStand extends GuiBooklet{ @Override public void actionPerformed(GuiButton button){ if(button == this.buttonSetPage){ - PacketHandler.theNetwork.sendToServer(new PacketBookletStandButton(this.theStand.getPos(), this.theStand.getWorld(), Minecraft.getMinecraft().thePlayer, this.currentEntrySet)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.theStand.getPos().getX()); + compound.setInteger("Y", this.theStand.getPos().getY()); + compound.setInteger("Z", this.theStand.getPos().getZ()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("WorldID", this.theStand.getWorld().provider.getDimension()); + compound.setTag("EntrySet", this.currentEntrySet.writeToNBT()); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.BOOKLET_STAND_BUTTON_HANDLER)); } super.actionPerformed(button); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java deleted file mode 100644 index 09e2c72c2..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/ExtraClientData.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file ("PersistentClientData.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.data; - -import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; -import de.ellpeck.actuallyadditions.mod.booklet.GuiBooklet; -import de.ellpeck.actuallyadditions.mod.booklet.button.BookmarkButton; -import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; - -@SideOnly(Side.CLIENT) -public class ExtraClientData{ - - private static File theFile; - - public static void saveBookPage(GuiBooklet gui){ - NBTTagCompound baseCompound = getBaseCompound(); - NBTTagCompound worldCompound = getCompoundForWorld(baseCompound); - if(worldCompound != null){ - //Save Entry etc. - worldCompound.setTag("SavedEntry", gui.currentEntrySet.writeToNBT()); - worldCompound.setString("SearchWord", gui.searchField.getText()); - - //Save Bookmarks - NBTTagList list = new NBTTagList(); - for(int i = 0; i < gui.bookmarkButtons.length; i++){ - BookmarkButton button = (BookmarkButton)gui.bookmarkButtons[i]; - - list.appendTag(button.assignedEntry.writeToNBT()); - } - worldCompound.setTag("Bookmarks", list); - } - - writeCompound(baseCompound, worldCompound); - } - - private static NBTTagCompound getBaseCompound(){ - try{ - return CompressedStreamTools.readCompressed(new FileInputStream(getTheFile())); - } - catch(Exception e){ - return new NBTTagCompound(); - } - } - - private static NBTTagCompound getCompoundForWorld(NBTTagCompound mainCompound){ - return mainCompound.getCompoundTag(getName()); - } - - private static void writeCompound(NBTTagCompound baseCompound, NBTTagCompound worldCompound){ - baseCompound.setTag(getName(), worldCompound); - try{ - CompressedStreamTools.writeCompressed(baseCompound, new FileOutputStream(getTheFile())); - } - catch(Exception e){ - ModUtil.LOGGER.fatal("Couldn't write Persistent Variable!", e); - } - } - - public static File getTheFile(){ - try{ - if(!theFile.exists()){ - theFile.createNewFile(); - } - } - catch(Exception e){ - ModUtil.LOGGER.fatal("Couldn't create Persistent Variables file!", e); - } - return theFile; - } - - private static String getName(){ - if(Minecraft.getMinecraft().theWorld != null){ - return Minecraft.getMinecraft().isIntegratedServerRunning() ? Minecraft.getMinecraft().getIntegratedServer().getFolderName() : Minecraft.getMinecraft().getCurrentServerData().serverIP; - } - else{ - return "Invalid"; - } - } - - public static void setTheFile(File file){ - theFile = file; - } - - public static void openLastBookPage(GuiBooklet gui){ - NBTTagCompound worldCompound = getCompoundForWorld(getBaseCompound()); - if(worldCompound != null){ - //Open Entry etc. - EntrySet set = EntrySet.readFromNBT(worldCompound.getCompoundTag("SavedEntry")); - if(set != null){ - - BookletUtils.openIndexEntry(gui, set.entry, set.pageInIndex, true); - if(set.chapter != null){ - BookletUtils.openChapter(gui, set.chapter, set.page); - } - - String searchText = worldCompound.getString("SearchWord"); - if(!searchText.isEmpty()){ - gui.searchField.setText(searchText); - BookletUtils.updateSearchBar(gui); - } - } - else{ - //If everything fails, initialize the front page - BookletUtils.openIndexEntry(gui, null, 1, true); - } - - //Load Bookmarks - NBTTagList list = worldCompound.getTagList("Bookmarks", 10); - if(list != null){ - for(int i = 0; i < list.tagCount(); i++){ - BookmarkButton button = (BookmarkButton)gui.bookmarkButtons[i]; - NBTTagCompound compound = list.getCompoundTagAt(i); - button.assignedEntry = EntrySet.readFromNBT(compound); - } - } - } - } - - public static void setBoolean(String name, boolean bool){ - NBTTagCompound baseCompound = getBaseCompound(); - NBTTagCompound worldCompound = getCompoundForWorld(baseCompound); - if(worldCompound != null){ - worldCompound.setBoolean(name, bool); - writeCompound(baseCompound, worldCompound); - } - } - - public static boolean getBoolean(String name){ - NBTTagCompound worldCompound = getCompoundForWorld(getBaseCompound()); - return worldCompound != null && worldCompound.getBoolean(name); - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java similarity index 98% rename from src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java index 42833042f..6e3b8f905 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerServerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java @@ -16,7 +16,7 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; import java.util.UUID; -public class PlayerServerData{ +public class PlayerData{ public static NBTTagCompound getDataFromPlayer(EntityPlayer player){ ArrayList data = WorldData.PLAYER_SAVE_DATA; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 9e6e74a1a..7cc6515cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.data; -import de.ellpeck.actuallyadditions.mod.data.PlayerServerData.PlayerSave; +import de.ellpeck.actuallyadditions.mod.data.PlayerData.PlayerSave; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.Network; import de.ellpeck.actuallyadditions.mod.util.ModUtil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index 601c02507..5b255d1a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.data.PlayerServerData; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; @@ -70,7 +70,7 @@ public class EntityLivingEvents{ public void livingDeathEvent(LivingDeathEvent event){ if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ EntityPlayer player = (EntityPlayer)event.getEntityLiving(); - NBTTagCompound data = PlayerServerData.getDataFromPlayer(player); + NBTTagCompound data = PlayerData.getDataFromPlayer(player); NBTTagList deaths = data.getTagList("Deaths", 10); while(deaths.tagCount() >= 5){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java index b605b6700..6c5b16eed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java @@ -25,7 +25,7 @@ public class InitEvents{ Util.registerEvent(new PlayerObtainEvents()); Util.registerEvent(new EntityLivingEvents()); - Util.registerEvent(new LogoutEvent()); + Util.registerEvent(new PlayerConnectionEvents()); Util.registerEvent(new WorldLoadingEvents()); Util.registerEvent(new BreakEvent()); MinecraftForge.TERRAIN_GEN_BUS.register(new WorldDecorationEvent()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java deleted file mode 100644 index faaf2dc12..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/LogoutEvent.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * This file ("LogoutEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.PlayerEvent; - -public class LogoutEvent{ - - @SubscribeEvent - public void onLogOutEvent(PlayerEvent.PlayerLoggedOutEvent event){ - //Remove Player from Wings' Fly Permission List - ItemWingsOfTheBats.removeWingsFromPlayer(event.player, true); - ItemWingsOfTheBats.removeWingsFromPlayer(event.player, false); - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java new file mode 100644 index 000000000..ebe6bc096 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java @@ -0,0 +1,43 @@ +/* + * This file ("LogoutEvent.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.event; + +import de.ellpeck.actuallyadditions.mod.data.PlayerData; +import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent; + +public class PlayerConnectionEvents{ + + @SubscribeEvent + public void onLogOutEvent(PlayerEvent.PlayerLoggedOutEvent event){ + //Remove Player from Wings' Fly Permission List + ItemWingsOfTheBats.removeWingsFromPlayer(event.player, true); + ItemWingsOfTheBats.removeWingsFromPlayer(event.player, false); + } + + @SubscribeEvent + public void onLogInEvent(PlayerEvent.PlayerLoggedInEvent event){ + if(!event.player.worldObj.isRemote && event.player instanceof EntityPlayerMP){ + NBTTagCompound data = PlayerData.getDataFromPlayer(event.player); + if(!data.hasNoTags()){ + PacketHandler.theNetwork.sendTo(new PacketServerToClient(data, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)event.player); + ModUtil.LOGGER.info("Sending Player Data to player "+event.player.getName()+"!"); + } + } + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 2547192aa..ad78d50c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.data.PlayerServerData; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.item.EntityItem; @@ -48,7 +48,7 @@ public class PlayerObtainEvents{ String name = event.crafting.getItem().getRegistryName().toString(); if(name != null && name.toLowerCase(Locale.ROOT).contains(ModUtil.MOD_ID)){ - NBTTagCompound compound = PlayerServerData.getDataFromPlayer(event.player); + NBTTagCompound compound = PlayerData.getDataFromPlayer(event.player); if(compound != null && !compound.getBoolean("BookGottenAlready")){ compound.setBoolean("BookGottenAlready", true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 20153a607..e51d0f729 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerCoffeeMachine; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoffeeMachine; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -23,6 +23,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -118,6 +119,13 @@ public class GuiCoffeeMachine extends GuiContainer{ @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.x); + compound.setInteger("Y", this.y); + compound.setInteger("Z", this.z); + compound.setInteger("WorldID", this.world.provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index fd103985b..6e7058fa6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -11,9 +11,8 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerInputter; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiNumber; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityInputter; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -25,6 +24,7 @@ import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; @@ -242,7 +242,15 @@ public class GuiInputter extends GuiContainer{ } private void sendPacket(int text, int textID){ - PacketHandler.theNetwork.sendToServer(new PacketGuiNumber(this.x, this.y, this.z, this.world, text, textID, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.x); + compound.setInteger("Y", this.y); + compound.setInteger("Z", this.z); + compound.setInteger("WorldID", this.world.provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("NumberID", textID); + compound.setInteger("Number", text); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_NUMBER_TO_TILE_HANDLER)); } private int parse(String theInt){ @@ -263,7 +271,14 @@ public class GuiInputter extends GuiContainer{ this.setVariable(this.fieldPullEnd, 3); } else{ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.x); + compound.setInteger("Y", this.y); + compound.setInteger("Z", this.z); + compound.setInteger("WorldID", this.world.provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index 4cab85831..f88974876 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -12,8 +12,8 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerLaserRelayItemWhitelist; import de.ellpeck.actuallyadditions.mod.inventory.gui.GuiInputter.SmallerButton; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItemWhitelist; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -24,6 +24,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; @@ -66,8 +67,14 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ @Override public void actionPerformed(GuiButton button){ - BlockPos pos = this.tile.getPos(); - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(pos.getX(), pos.getY(), pos.getZ(), this.tile.getWorld(), button.id, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.tile.getPos().getX()); + compound.setInteger("Y", this.tile.getPos().getY()); + compound.setInteger("Z", this.tile.getPos().getZ()); + compound.setInteger("WorldID", this.tile.getWorld().provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index 82c5af4f8..2a850cb1f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerMiner; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityMiner; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -22,6 +22,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -71,6 +72,13 @@ public class GuiMiner extends GuiContainer{ @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.miner.getPos().getX(), this.miner.getPos().getY(), this.miner.getPos().getZ(), this.miner.getWorld(), button.id, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.miner.getPos().getX()); + compound.setInteger("Y", this.miner.getPos().getY()); + compound.setInteger("Z", this.miner.getPos().getZ()); + compound.setInteger("WorldID", this.miner.getWorld().provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index 26306bdb1..9362b6f16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerRangedCollector; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityRangedCollector; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -23,6 +23,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -90,6 +91,13 @@ public class GuiRangedCollector extends GuiContainer{ @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.x); + compound.setInteger("Y", this.y); + compound.setInteger("Z", this.z); + compound.setInteger("WorldID", this.world.provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index c4a599b92..93c0c8568 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerSmileyCloud; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiString; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -22,6 +22,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; @@ -114,6 +115,14 @@ public class GuiSmileyCloud extends GuiContainer{ } private void sendPacket(String text, int textID){ - PacketHandler.theNetwork.sendToServer(new PacketGuiString(this.x, this.y, this.z, this.world, text, textID, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.x); + compound.setInteger("Y", this.y); + compound.setInteger("Z", this.z); + compound.setInteger("WorldID", this.world.provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("TextID", textID); + compound.setString("Text", text); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index 3ed558ff7..47c1f52ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerXPSolidifier; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityXPSolidifier; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -22,6 +22,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; @@ -93,7 +94,15 @@ public class GuiXPSolidifier extends GuiContainer{ @Override public void actionPerformed(GuiButton button){ - PacketHandler.theNetwork.sendToServer(new PacketGuiButton(this.x, this.y, this.z, this.world, button.id, Minecraft.getMinecraft().thePlayer)); + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.x); + compound.setInteger("Y", this.y); + compound.setInteger("Z", this.z); + compound.setInteger("WorldID", this.world.provider.getDimension()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); + this.solidifier.onButtonPressed(button.id, Minecraft.getMinecraft().thePlayer); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/IDataHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/IDataHandler.java new file mode 100644 index 000000000..c1ede65c6 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/IDataHandler.java @@ -0,0 +1,19 @@ +/* + * This file ("IDataHandler.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.network; + +import net.minecraft.nbt.NBTTagCompound; + +public interface IDataHandler{ + + void handleData(NBTTagCompound compound); + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java deleted file mode 100644 index dfc83933d..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketBookletStandButton.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * This file ("PacketBookletStandButton.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.network; - -import de.ellpeck.actuallyadditions.api.internal.IEntrySet; -import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class PacketBookletStandButton implements IMessage{ - - private int worldID; - private int playerID; - - private NBTTagCompound entrySet; - private BlockPos tilePos; - - public PacketBookletStandButton(){ - - } - - public PacketBookletStandButton(BlockPos tilePos, World world, EntityPlayer player, IEntrySet set){ - this.tilePos = tilePos; - this.entrySet = set.writeToNBT(); - this.worldID = world.provider.getDimension(); - this.playerID = player.getEntityId(); - } - - @Override - public void fromBytes(ByteBuf buf){ - PacketBuffer buffer = new PacketBuffer(buf); - try{ - this.entrySet = buffer.readNBTTagCompoundFromBuffer(); - this.tilePos = buffer.readBlockPos(); - this.worldID = buffer.readInt(); - this.playerID = buffer.readInt(); - } - catch(Exception e){ - ModUtil.LOGGER.error("Something went wrong trying to receive a TileEntity packet!", e); - } - } - - @Override - public void toBytes(ByteBuf buf){ - PacketBuffer buffer = new PacketBuffer(buf); - - buffer.writeNBTTagCompoundToBuffer(this.entrySet); - buffer.writeBlockPos(this.tilePos); - buffer.writeInt(this.worldID); - buffer.writeInt(this.playerID); - } - - public static class Handler implements IMessageHandler{ - - @Override - public IMessage onMessage(PacketBookletStandButton message, MessageContext ctx){ - World world = DimensionManager.getWorld(message.worldID); - TileEntity tile = world.getTileEntity(message.tilePos); - EntityPlayer player = (EntityPlayer)world.getEntityByID(message.playerID); - - if(player != null && tile instanceof TileEntityBookletStand){ - TileEntityBookletStand stand = (TileEntityBookletStand)tile; - if(player.getName() != null && player.getName().equalsIgnoreCase(stand.assignedPlayer)){ - stand.assignedEntry = EntrySet.readFromNBT(message.entrySet); - stand.markDirty(); - stand.sendUpdate(); - } - } - - return null; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketClientToServer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketClientToServer.java new file mode 100644 index 000000000..83191799b --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketClientToServer.java @@ -0,0 +1,69 @@ +/* + * This file ("PacketServerToClient.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.network; + +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +public class PacketClientToServer implements IMessage{ + + private NBTTagCompound data; + private IDataHandler handler; + + public PacketClientToServer(){ + + } + + public PacketClientToServer(NBTTagCompound data, IDataHandler handler){ + this.data = data; + this.handler = handler; + } + + @Override + public void fromBytes(ByteBuf buf){ + PacketBuffer buffer = new PacketBuffer(buf); + try{ + this.data = buffer.readNBTTagCompoundFromBuffer(); + + int handlerId = buffer.readInt(); + if(handlerId >= 0 && handlerId < PacketHandler.DATA_HANDLERS.size()){ + this.handler = PacketHandler.DATA_HANDLERS.get(handlerId); + } + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to receive a server packet!", e); + } + } + + @Override + public void toBytes(ByteBuf buf){ + PacketBuffer buffer = new PacketBuffer(buf); + + buffer.writeNBTTagCompoundToBuffer(this.data); + buffer.writeInt(PacketHandler.DATA_HANDLERS.indexOf(this.handler)); + } + + public static class Handler implements IMessageHandler{ + + @Override + public IMessage onMessage(PacketClientToServer message, MessageContext ctx){ + if(message.data != null && message.handler != null){ + message.handler.handleData(message.data); + } + return null; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 2c3a5fd5b..68eeb5ecc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -10,26 +10,153 @@ package de.ellpeck.actuallyadditions.mod.network; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiButton; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiNumber; -import de.ellpeck.actuallyadditions.mod.network.gui.PacketGuiString; +import de.ellpeck.actuallyadditions.mod.booklet.entry.EntrySet; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; +import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; +import de.ellpeck.actuallyadditions.mod.network.gui.INumberReactor; +import de.ellpeck.actuallyadditions.mod.network.gui.IStringReactor; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; -public class PacketHandler{ +import java.util.ArrayList; +import java.util.List; + +public final class PacketHandler{ public static SimpleNetworkWrapper theNetwork; + public static final List DATA_HANDLERS = new ArrayList(); + + public static final IDataHandler PARTICLE_HANDLER = new IDataHandler(){ + @Override + @SideOnly(Side.CLIENT) + public void handleData(NBTTagCompound compound){ + AssetUtil.renderParticlesFromAToB(compound.getDouble("StartX"), compound.getDouble("StartY"), compound.getDouble("StartZ"), compound.getDouble("EndX"), compound.getDouble("EndY"), compound.getDouble("EndZ"), compound.getInteger("ParticleAmount"), compound.getFloat("ParticleSize"), new float[]{compound.getFloat("Color1"), compound.getFloat("Color2"), compound.getFloat("Color3")}, compound.getFloat("AgeMultiplier")); + } + }; + + public static final IDataHandler TILE_ENTITY_HANDLER = new IDataHandler(){ + @Override + @SideOnly(Side.CLIENT) + public void handleData(NBTTagCompound compound){ + World world = Minecraft.getMinecraft().theWorld; + if(world != null){ + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + if(tile != null && tile instanceof TileEntityBase){ + ((TileEntityBase)tile).receiveSyncCompound(compound.getCompoundTag("Data")); + } + } + } + }; + + public static final IDataHandler BOOKLET_STAND_BUTTON_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + EntityPlayer player = (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID")); + + if(player != null && tile instanceof TileEntityBookletStand){ + TileEntityBookletStand stand = (TileEntityBookletStand)tile; + if(player.getName() != null && player.getName().equalsIgnoreCase(stand.assignedPlayer)){ + stand.assignedEntry = EntrySet.readFromNBT(compound.getCompoundTag("EntrySet")); + stand.markDirty(); + stand.sendUpdate(); + } + } + } + }; + + public static final IDataHandler GUI_BUTTON_TO_TILE_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + + if(tile instanceof IButtonReactor){ + IButtonReactor reactor = (IButtonReactor)tile; + reactor.onButtonPressed(compound.getInteger("ButtonID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); + } + } + }; + + public static final IDataHandler GUI_NUMBER_TO_TILE_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + + if(tile instanceof INumberReactor){ + INumberReactor reactor = (INumberReactor)tile; + reactor.onNumberReceived(compound.getInteger("Number"), compound.getInteger("NumberID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); + } + } + }; + + public static final IDataHandler GUI_STRING_TO_TILE_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + + if(tile instanceof IStringReactor){ + IStringReactor reactor = (IStringReactor)tile; + reactor.onTextReceived(compound.getString("Text"), compound.getInteger("TextID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); + } + } + }; + + public static final IDataHandler CHANGE_PLAYER_DATA_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + NBTTagCompound data = compound.getCompoundTag("Data"); + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + EntityPlayer player = (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID")); + + if(player != null){ + NBTTagCompound playerData = PlayerData.getDataFromPlayer(player); + playerData.merge(data); + if(player instanceof EntityPlayerMP){ + PacketHandler.theNetwork.sendTo(new PacketServerToClient(playerData, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); + } + } + } + }; + + public static final IDataHandler PLAYER_DATA_TO_CLIENT_HANDLER = new IDataHandler(){ + @Override + @SideOnly(Side.CLIENT) + public void handleData(NBTTagCompound compound){ + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + PlayerData.getDataFromPlayer(player).merge(compound); + } + }; public static void init(){ theNetwork = NetworkRegistry.INSTANCE.newSimpleChannel(ModUtil.MOD_ID); + theNetwork.registerMessage(PacketServerToClient.Handler.class, PacketServerToClient.class, 0, Side.CLIENT); + theNetwork.registerMessage(PacketClientToServer.Handler.class, PacketClientToServer.class, 1, Side.SERVER); - theNetwork.registerMessage(PacketGuiButton.Handler.class, PacketGuiButton.class, 0, Side.SERVER); - theNetwork.registerMessage(PacketGuiNumber.Handler.class, PacketGuiNumber.class, 1, Side.SERVER); - theNetwork.registerMessage(PacketGuiString.Handler.class, PacketGuiString.class, 2, Side.SERVER); - theNetwork.registerMessage(PacketParticle.Handler.class, PacketParticle.class, 3, Side.CLIENT); - theNetwork.registerMessage(PacketUpdateTileEntity.Handler.class, PacketUpdateTileEntity.class, 4, Side.CLIENT); - theNetwork.registerMessage(PacketBookletStandButton.Handler.class, PacketBookletStandButton.class, 5, Side.SERVER); + DATA_HANDLERS.add(PARTICLE_HANDLER); + DATA_HANDLERS.add(TILE_ENTITY_HANDLER); + DATA_HANDLERS.add(BOOKLET_STAND_BUTTON_HANDLER); + DATA_HANDLERS.add(GUI_BUTTON_TO_TILE_HANDLER); + DATA_HANDLERS.add(GUI_STRING_TO_TILE_HANDLER); + DATA_HANDLERS.add(GUI_NUMBER_TO_TILE_HANDLER); + DATA_HANDLERS.add(CHANGE_PLAYER_DATA_HANDLER); + DATA_HANDLERS.add(PLAYER_DATA_TO_CLIENT_HANDLER); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java deleted file mode 100644 index 90a6b6071..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketParticle.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * This file ("PacketParticle.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.network; - -import de.ellpeck.actuallyadditions.mod.misc.ParticleColored; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class PacketParticle implements IMessage{ - - private double startX; - private double startY; - private double startZ; - private double endX; - private double endY; - private double endZ; - private float[] color; - private int particleAmount; - private float particleSize; - - public PacketParticle(){ - - } - - public PacketParticle(double startX, double startY, double startZ, double endX, double endY, double endZ, float[] color, int particleAmount, float particleSize){ - this.startX = startX; - this.startY = startY; - this.startZ = startZ; - this.endX = endX; - this.endY = endY; - this.endZ = endZ; - this.color = color; - this.particleAmount = particleAmount; - this.particleSize = particleSize; - } - - @SideOnly(Side.CLIENT) - public static void renderParticlesFromAToB(double startX, double startY, double startZ, double endX, double endY, double endZ, int particleAmount, float particleSize, float[] color, float ageMultiplier){ - World world = Minecraft.getMinecraft().theWorld; - - if(Minecraft.getMinecraft().thePlayer.getDistance(startX, startY, startZ) <= 64 || Minecraft.getMinecraft().thePlayer.getDistance(endX, endY, endZ) <= 64){ - double difX = startX-endX; - double difY = startY-endY; - double difZ = startZ-endZ; - double distance = new Vec3d(startX, startY, startZ).distanceTo(new Vec3d(endX, endY, endZ)); - - for(int times = 0; times < Math.max(particleAmount/2, 1); times++){ - for(double i = 0; i <= 1; i += 1/(distance*particleAmount)){ - ParticleColored fx = new ParticleColored(world, (difX*i)+endX+0.5, (difY*i)+endY+0.5, (difZ*i)+endZ+0.5, particleSize, color[0], color[1], color[2], ageMultiplier); - Minecraft.getMinecraft().effectRenderer.addEffect(fx); - } - } - } - } - - @Override - public void fromBytes(ByteBuf buf){ - this.startX = buf.readDouble(); - this.startY = buf.readDouble(); - this.startZ = buf.readDouble(); - this.endX = buf.readDouble(); - this.endY = buf.readDouble(); - this.endZ = buf.readDouble(); - this.particleAmount = buf.readInt(); - this.particleSize = buf.readFloat(); - - this.color = new float[3]; - for(int i = 0; i < this.color.length; i++){ - this.color[i] = buf.readFloat(); - } - } - - @Override - public void toBytes(ByteBuf buf){ - buf.writeDouble(this.startX); - buf.writeDouble(this.startY); - buf.writeDouble(this.startZ); - buf.writeDouble(this.endX); - buf.writeDouble(this.endY); - buf.writeDouble(this.endZ); - buf.writeInt(this.particleAmount); - buf.writeFloat(this.particleSize); - - for(float aColor : this.color){ - buf.writeFloat(aColor); - } - } - - public static class Handler implements IMessageHandler{ - - @Override - @SideOnly(Side.CLIENT) - public IMessage onMessage(PacketParticle message, MessageContext ctx){ - renderParticlesFromAToB(message.startX, message.startY, message.startZ, message.endX, message.endY, message.endZ, message.particleAmount, message.particleSize, message.color, 1); - return null; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketServerToClient.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketServerToClient.java new file mode 100644 index 000000000..1e250d9ac --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketServerToClient.java @@ -0,0 +1,72 @@ +/* + * This file ("PacketServerToClient.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.network; + +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class PacketServerToClient implements IMessage{ + + private NBTTagCompound data; + private IDataHandler handler; + + public PacketServerToClient(){ + + } + + public PacketServerToClient(NBTTagCompound data, IDataHandler handler){ + this.data = data; + this.handler = handler; + } + + @Override + public void fromBytes(ByteBuf buf){ + PacketBuffer buffer = new PacketBuffer(buf); + try{ + this.data = buffer.readNBTTagCompoundFromBuffer(); + + int handlerId = buffer.readInt(); + if(handlerId >= 0 && handlerId < PacketHandler.DATA_HANDLERS.size()){ + this.handler = PacketHandler.DATA_HANDLERS.get(handlerId); + } + } + catch(Exception e){ + ModUtil.LOGGER.error("Something went wrong trying to receive a client packet!", e); + } + } + + @Override + public void toBytes(ByteBuf buf){ + PacketBuffer buffer = new PacketBuffer(buf); + + buffer.writeNBTTagCompoundToBuffer(this.data); + buffer.writeInt(PacketHandler.DATA_HANDLERS.indexOf(this.handler)); + } + + public static class Handler implements IMessageHandler{ + + @Override + @SideOnly(Side.CLIENT) + public IMessage onMessage(PacketServerToClient message, MessageContext ctx){ + if(message.data != null && message.handler != null){ + message.handler.handleData(message.data); + } + return null; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java deleted file mode 100644 index be911bfe0..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketUpdateTileEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * This file ("PacketUpdateTileEntity.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.network; - -import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class PacketUpdateTileEntity implements IMessage{ - - private NBTTagCompound compound; - private BlockPos pos; - - public PacketUpdateTileEntity(){ - - } - - public PacketUpdateTileEntity(NBTTagCompound compound, BlockPos pos){ - this.compound = compound; - this.pos = pos; - } - - @Override - public void fromBytes(ByteBuf buf){ - PacketBuffer buffer = new PacketBuffer(buf); - try{ - this.compound = buffer.readNBTTagCompoundFromBuffer(); - this.pos = buffer.readBlockPos(); - } - catch(Exception e){ - ModUtil.LOGGER.error("Something went wrong trying to receive a TileEntity packet!", e); - } - } - - @Override - public void toBytes(ByteBuf buf){ - PacketBuffer buffer = new PacketBuffer(buf); - - buffer.writeNBTTagCompoundToBuffer(this.compound); - buffer.writeBlockPos(this.pos); - } - - public static class Handler implements IMessageHandler{ - - @Override - @SideOnly(Side.CLIENT) - public IMessage onMessage(PacketUpdateTileEntity message, MessageContext ctx){ - if(message.pos != null && message.compound != null){ - World world = Minecraft.getMinecraft().theWorld; - if(world != null){ - TileEntity tile = world.getTileEntity(message.pos); - if(tile != null && tile instanceof TileEntityBase){ - ((TileEntityBase)tile).receiveSyncCompound(message.compound); - } - } - } - return null; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java deleted file mode 100644 index b07e506be..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiButton.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * This file ("PacketGuiButton.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.network.gui; - - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class PacketGuiButton implements IMessage{ - - private int tileX; - private int tileY; - private int tileZ; - private int worldID; - private int buttonID; - private int playerID; - - public PacketGuiButton(){ - - } - - public PacketGuiButton(int x, int y, int z, World world, int buttonID, EntityPlayer player){ - this.tileX = x; - this.tileY = y; - this.tileZ = z; - this.worldID = world.provider.getDimension(); - this.buttonID = buttonID; - this.playerID = player.getEntityId(); - } - - @Override - public void fromBytes(ByteBuf buf){ - this.tileX = buf.readInt(); - this.tileY = buf.readInt(); - this.tileZ = buf.readInt(); - this.worldID = buf.readInt(); - this.buttonID = buf.readInt(); - this.playerID = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf){ - buf.writeInt(this.tileX); - buf.writeInt(this.tileY); - buf.writeInt(this.tileZ); - buf.writeInt(this.worldID); - buf.writeInt(this.buttonID); - buf.writeInt(this.playerID); - } - - public static class Handler implements IMessageHandler{ - - @Override - public IMessage onMessage(PacketGuiButton message, MessageContext ctx){ - World world = DimensionManager.getWorld(message.worldID); - TileEntity tile = world.getTileEntity(new BlockPos(message.tileX, message.tileY, message.tileZ)); - - if(tile instanceof IButtonReactor){ - IButtonReactor reactor = (IButtonReactor)tile; - reactor.onButtonPressed(message.buttonID, (EntityPlayer)world.getEntityByID(message.playerID)); - } - - return null; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java deleted file mode 100644 index 9e876648e..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiNumber.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file ("PacketGuiNumber.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.network.gui; - - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class PacketGuiNumber implements IMessage{ - - private int tileX; - private int tileY; - private int tileZ; - private int worldID; - private int text; - private int textID; - private int playerID; - - public PacketGuiNumber(){ - - } - - public PacketGuiNumber(int x, int y, int z, World world, int text, int textID, EntityPlayer player){ - this.tileX = x; - this.tileY = y; - this.tileZ = z; - this.worldID = world.provider.getDimension(); - this.text = text; - this.textID = textID; - this.playerID = player.getEntityId(); - } - - @Override - public void fromBytes(ByteBuf buf){ - this.tileX = buf.readInt(); - this.tileY = buf.readInt(); - this.tileZ = buf.readInt(); - this.worldID = buf.readInt(); - this.text = buf.readInt(); - this.textID = buf.readInt(); - this.playerID = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf){ - buf.writeInt(this.tileX); - buf.writeInt(this.tileY); - buf.writeInt(this.tileZ); - buf.writeInt(this.worldID); - buf.writeInt(this.text); - buf.writeInt(this.textID); - buf.writeInt(this.playerID); - } - - public static class Handler implements IMessageHandler{ - - @Override - public IMessage onMessage(PacketGuiNumber message, MessageContext ctx){ - World world = DimensionManager.getWorld(message.worldID); - TileEntity tile = world.getTileEntity(new BlockPos(message.tileX, message.tileY, message.tileZ)); - - if(tile instanceof INumberReactor){ - INumberReactor reactor = (INumberReactor)tile; - reactor.onNumberReceived(message.text, message.textID, (EntityPlayer)world.getEntityByID(message.playerID)); - } - - return null; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java deleted file mode 100644 index dee29f3b7..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/gui/PacketGuiString.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file ("PacketGuiString.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.network.gui; - - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class PacketGuiString implements IMessage{ - - private int tileX; - private int tileY; - private int tileZ; - private int worldID; - private String text; - private int textID; - private int playerID; - - public PacketGuiString(){ - - } - - public PacketGuiString(int x, int y, int z, World world, String text, int textID, EntityPlayer player){ - this.tileX = x; - this.tileY = y; - this.tileZ = z; - this.worldID = world.provider.getDimension(); - this.text = text; - this.textID = textID; - this.playerID = player.getEntityId(); - } - - @Override - public void fromBytes(ByteBuf buf){ - this.tileX = buf.readInt(); - this.tileY = buf.readInt(); - this.tileZ = buf.readInt(); - this.worldID = buf.readInt(); - - this.text = ""; - int textLength = buf.readInt(); - for(int i = 0; i < textLength; i++){ - this.text += buf.readChar(); - } - - this.textID = buf.readInt(); - this.playerID = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf){ - buf.writeInt(this.tileX); - buf.writeInt(this.tileY); - buf.writeInt(this.tileZ); - buf.writeInt(this.worldID); - - buf.writeInt(this.text.length()); - for(int i = 0; i < this.text.length(); i++){ - buf.writeChar(this.text.charAt(i)); - } - - buf.writeInt(this.textID); - buf.writeInt(this.playerID); - } - - public static class Handler implements IMessageHandler{ - - @Override - public IMessage onMessage(PacketGuiString message, MessageContext ctx){ - World world = DimensionManager.getWorld(message.worldID); - TileEntity tile = world.getTileEntity(new BlockPos(message.tileX, message.tileY, message.tileZ)); - - if(tile instanceof IStringReactor){ - IStringReactor reactor = (IStringReactor)tile; - reactor.onTextReceived(message.text, message.textID, (EntityPlayer)world.getEntityByID(message.playerID)); - } - - return null; - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 256860260..44754379f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -122,8 +122,6 @@ public class ClientProxy implements IProxy{ ModUtil.LOGGER.warn("You have turned Seasonal Mode off. Therefore, you are evil."); } - ExtraClientData.setTheFile(new File(Minecraft.getMinecraft().mcDataDir, ModUtil.MOD_ID+"data.dat")); - for(Map.Entry entry : MODEL_LOCATIONS_FOR_REGISTERING.entrySet()){ ModelLoader.setCustomModelResourceLocation(entry.getKey().getItem(), entry.getKey().getItemDamage(), entry.getValue()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 79ebdc76f..3b5739b6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -19,7 +19,7 @@ import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketParticle; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; @@ -49,7 +49,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple if(!ConfigBoolValues.LESS_SOUND.isEnabled()){ world.playSound(null, startX, startY, startZ, SoundHandler.reconstructor, SoundCategory.BLOCKS, 0.35F, 1.0F); } - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 2 : 8, 2F), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 64)); + AssetUtil.shootParticles(world, startX, startY, startZ, endX, endY, endZ, currentLens.getColor(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 2 : 8, 2F); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 320ecb70a..5696cfc7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketUpdateTileEntity; +import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -197,7 +197,12 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ if(!this.worldObj.isRemote){ NBTTagCompound compound = this.getUpdateTag(); if(compound != null){ - PacketHandler.theNetwork.sendToAllAround(new PacketUpdateTileEntity(compound, this.getPos()), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); + NBTTagCompound data = new NBTTagCompound(); + data.setTag("Data", compound); + data.setInteger("X", this.pos.getX()); + data.setInteger("Y", this.pos.getY()); + data.setInteger("Z", this.pos.getZ()); + PacketHandler.theNetwork.sendToAllAround(new PacketServerToClient(data, PacketHandler.TILE_ENTITY_HANDLER), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 2bf4cb5ce..6e39b9810 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.ItemLaserWrench; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.ConnectionPair; -import de.ellpeck.actuallyadditions.mod.network.PacketParticle; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import io.netty.util.internal.ConcurrentSet; @@ -104,7 +104,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ if(network != null){ for(ConnectionPair aPair : network.connections){ if(aPair.contains(this.pos) && PosUtil.areSamePos(this.pos, aPair.positions[0])){ - PacketParticle.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index fec15a520..e8abf01dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -14,7 +14,7 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketParticle; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; @@ -90,7 +90,7 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr this.storage.receiveEnergy(ENERGY_PRODUCED, false); if(!ConfigBoolValues.LESS_PARTICLES.isEnabled()){ - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.pos.getX(), this.pos.getY(), this.pos.getZ(), 64)); + AssetUtil.shootParticles(this.worldObj, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), theCoord.getX(), theCoord.getY(), theCoord.getZ(), new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index ef662df16..9f0e75805 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -14,9 +14,8 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; -import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketParticle; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -167,7 +166,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR private void shootParticles(int endX, int endY, int endZ){ if(!ConfigBoolValues.LESS_PARTICLES.isEnabled()){ - PacketHandler.theNetwork.sendToAllAround(new PacketParticle(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 96)); + AssetUtil.shootParticles(this.worldObj, this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), endX, endY, endZ, new float[]{62F/255F, 163F/255F, 74F/255F}, 5, 1.0F); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 3eb58bf0a..36cf1b918 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -13,7 +13,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketParticle; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -162,7 +163,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } if(this.ticksElapsed%80 == 0){ - PacketParticle.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.boundPosition.getX(), this.boundPosition.getY(), this.boundPosition.getZ(), 2, 0.35F, TileEntityPhantomface.COLORS, 3); + AssetUtil.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.boundPosition.getX(), this.boundPosition.getY(), this.boundPosition.getZ(), 2, 0.35F, TileEntityPhantomface.COLORS, 3); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 1a9acceaa..18718d2f4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.network.PacketParticle; +import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; @@ -148,7 +148,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } if(this.ticksElapsed%80 == 0){ - PacketParticle.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.boundPosition.getX(), this.boundPosition.getY(), this.boundPosition.getZ(), 2, 0.35F, COLORS, 3); + AssetUtil.renderParticlesFromAToB(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), this.boundPosition.getX(), this.boundPosition.getY(), this.boundPosition.getZ(), 2, 0.35F, COLORS, 3); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index b7160f304..b62508cf8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -10,6 +10,9 @@ package de.ellpeck.actuallyadditions.mod.util; +import de.ellpeck.actuallyadditions.mod.misc.ParticleColored; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; @@ -20,7 +23,12 @@ import net.minecraft.client.renderer.VertexBuffer; import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.opengl.GL11; @@ -147,4 +155,42 @@ public class AssetUtil{ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.popMatrix(); } + + public static void shootParticles(World world, double startX, double startY, double startZ, double endX, double endY, double endZ, float[] color, int particleAmount, float particleSize){ + if(!world.isRemote){ + NBTTagCompound data = new NBTTagCompound(); + data.setDouble("StartX", startX); + data.setDouble("StartY", startY); + data.setDouble("StartZ", startZ); + data.setDouble("EndX", endX); + data.setDouble("EndY", endY); + data.setDouble("EndZ", endZ); + data.setFloat("Color1", color[0]); + data.setFloat("Color2", color[1]); + data.setFloat("Color3", color[2]); + data.setInteger("ParticleAmount", particleAmount); + data.setFloat("ParticleSize", particleSize); + data.setFloat("AgeMultiplier", 1F); + PacketHandler.theNetwork.sendToAllAround(new PacketServerToClient(data, PacketHandler.PARTICLE_HANDLER), new NetworkRegistry.TargetPoint(world.provider.getDimension(), startX, startY, startZ, 96)); + } + } + + @SideOnly(Side.CLIENT) + public static void renderParticlesFromAToB(double startX, double startY, double startZ, double endX, double endY, double endZ, int particleAmount, float particleSize, float[] color, float ageMultiplier){ + World world = Minecraft.getMinecraft().theWorld; + + if(Minecraft.getMinecraft().thePlayer.getDistance(startX, startY, startZ) <= 64 || Minecraft.getMinecraft().thePlayer.getDistance(endX, endY, endZ) <= 64){ + double difX = startX-endX; + double difY = startY-endY; + double difZ = startZ-endZ; + double distance = new Vec3d(startX, startY, startZ).distanceTo(new Vec3d(endX, endY, endZ)); + + for(int times = 0; times < Math.max(particleAmount/2, 1); times++){ + for(double i = 0; i <= 1; i += 1/(distance*particleAmount)){ + ParticleColored fx = new ParticleColored(world, (difX*i)+endX+0.5, (difY*i)+endY+0.5, (difZ*i)+endZ+0.5, particleSize, color[0], color[1], color[2], ageMultiplier); + Minecraft.getMinecraft().effectRenderer.addEffect(fx); + } + } + } + } } From 03215e3b5bf6830cd97b3878f0ac0bf1c7fefd6d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 15 Jun 2016 17:15:26 +0200 Subject: [PATCH 273/322] Fixed crash on singleplayer joining with the new system >_> --- .../actuallyadditions/mod/booklet/GuiBooklet.java | 8 +++----- .../actuallyadditions/mod/data/PlayerData.java | 8 ++++---- .../mod/event/EntityLivingEvents.java | 6 +++--- .../mod/event/PlayerConnectionEvents.java | 14 +++++++------- .../mod/event/PlayerObtainEvents.java | 6 +++--- .../mod/network/PacketHandler.java | 10 ++++++---- .../actuallyadditions/mod/proxy/ClientProxy.java | 1 - 7 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 4107ac1a9..195ca0f58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -378,9 +378,9 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ if(ItemBooklet.forcedEntry == null){ //Open last entry or introductory entry - NBTTagCompound data = PlayerData.getDataFromPlayer(Minecraft.getMinecraft().thePlayer); + PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(Minecraft.getMinecraft().thePlayer); if(data != null){ - if(this.tryOpenMainPage && !data.getBoolean("BookAlreadyOpened")){ + if(this.tryOpenMainPage && !data.theCompound.getBoolean("BookAlreadyOpened")){ BookletUtils.openIndexEntry(this, InitBooklet.chapterIntro.entry, 1, true); BookletUtils.openChapter(this, InitBooklet.chapterIntro, null); @@ -393,7 +393,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ PacketHandler.theNetwork.sendToServer(new PacketClientToServer(dataToSend, PacketHandler.CHANGE_PLAYER_DATA_HANDLER)); } else{ - BookletUtils.openLastBookPage(this, data.getCompoundTag("BookletData")); + BookletUtils.openLastBookPage(this, data.theCompound.getCompoundTag("BookletData")); } } } @@ -446,8 +446,6 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void onGuiClosed(){ if(this.saveOnClose && this.changedPageSinceOpen){ - System.out.println("SAVING"); - NBTTagCompound bookletData = new NBTTagCompound(); BookletUtils.saveBookPage(this, bookletData); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java index 6e3b8f905..ef93eda0d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java @@ -18,25 +18,25 @@ import java.util.UUID; public class PlayerData{ - public static NBTTagCompound getDataFromPlayer(EntityPlayer player){ + public static PlayerSave getDataFromPlayer(EntityPlayer player){ ArrayList data = WorldData.PLAYER_SAVE_DATA; //Get Data from existing data for(PlayerSave save : data){ if(save.thePlayerUUID.equals(player.getUniqueID())){ - return save.theCompound; + return save; } } //Add Data if none is existant PlayerSave aSave = new PlayerSave(player.getUniqueID(), new NBTTagCompound()); data.add(aSave); - return aSave.theCompound; + return aSave; } public static class PlayerSave{ public final UUID thePlayerUUID; - public final NBTTagCompound theCompound; + public NBTTagCompound theCompound; public PlayerSave(UUID theUUID, NBTTagCompound theCompound){ this.thePlayerUUID = theUUID; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java index 5b255d1a6..6baae896f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java @@ -70,9 +70,9 @@ public class EntityLivingEvents{ public void livingDeathEvent(LivingDeathEvent event){ if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ EntityPlayer player = (EntityPlayer)event.getEntityLiving(); - NBTTagCompound data = PlayerData.getDataFromPlayer(player); + PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); - NBTTagList deaths = data.getTagList("Deaths", 10); + NBTTagList deaths = data.theCompound.getTagList("Deaths", 10); while(deaths.tagCount() >= 5){ deaths.removeTag(0); } @@ -83,7 +83,7 @@ public class EntityLivingEvents{ death.setDouble("Z", player.posZ); deaths.appendTag(death); - data.setTag("Deaths", deaths); + data.theCompound.setTag("Deaths", deaths); //player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java index ebe6bc096..f385ce589 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java @@ -16,7 +16,7 @@ import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent; @@ -30,12 +30,12 @@ public class PlayerConnectionEvents{ } @SubscribeEvent - public void onLogInEvent(PlayerEvent.PlayerLoggedInEvent event){ - if(!event.player.worldObj.isRemote && event.player instanceof EntityPlayerMP){ - NBTTagCompound data = PlayerData.getDataFromPlayer(event.player); - if(!data.hasNoTags()){ - PacketHandler.theNetwork.sendTo(new PacketServerToClient(data, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)event.player); - ModUtil.LOGGER.info("Sending Player Data to player "+event.player.getName()+"!"); + public void onLogInEvent(EntityJoinWorldEvent event){ + if(!event.getEntity().worldObj.isRemote && event.getEntity() instanceof EntityPlayerMP){ + EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); + PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); + if(!data.theCompound.hasNoTags()){ + PacketHandler.theNetwork.sendTo(new PacketServerToClient(data.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index ad78d50c6..49822ea79 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -48,9 +48,9 @@ public class PlayerObtainEvents{ String name = event.crafting.getItem().getRegistryName().toString(); if(name != null && name.toLowerCase(Locale.ROOT).contains(ModUtil.MOD_ID)){ - NBTTagCompound compound = PlayerData.getDataFromPlayer(event.player); - if(compound != null && !compound.getBoolean("BookGottenAlready")){ - compound.setBoolean("BookGottenAlready", true); + PlayerData.PlayerSave compound = PlayerData.getDataFromPlayer(event.player); + if(compound != null && !compound.theCompound.getBoolean("BookGottenAlready")){ + compound.theCompound.setBoolean("BookGottenAlready", true); EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet)); entityItem.setPickupDelay(0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 68eeb5ecc..7d7962e17 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -127,10 +127,10 @@ public final class PacketHandler{ EntityPlayer player = (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID")); if(player != null){ - NBTTagCompound playerData = PlayerData.getDataFromPlayer(player); - playerData.merge(data); + PlayerData.PlayerSave playerData = PlayerData.getDataFromPlayer(player); + playerData.theCompound.merge(data); if(player instanceof EntityPlayerMP){ - PacketHandler.theNetwork.sendTo(new PacketServerToClient(playerData, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); + PacketHandler.theNetwork.sendTo(new PacketServerToClient(playerData.theCompound, PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); } } } @@ -141,7 +141,9 @@ public final class PacketHandler{ @SideOnly(Side.CLIENT) public void handleData(NBTTagCompound compound){ EntityPlayer player = Minecraft.getMinecraft().thePlayer; - PlayerData.getDataFromPlayer(player).merge(compound); + if(player != null){ + PlayerData.getDataFromPlayer(player).theCompound = compound; + } } }; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 44754379f..9ab99f51a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -20,7 +20,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.render.RenderDisplayStand; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.data.ExtraClientData; import de.ellpeck.actuallyadditions.mod.event.InitEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; From 718c999f70784ddbc584fd0dbd23245534f17dcd Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 15 Jun 2016 17:42:55 +0200 Subject: [PATCH 274/322] Added laser wrench mode switch. Closes #119 --- .../mod/booklet/InitBooklet.java | 2 +- .../mod/config/values/ConfigBoolValues.java | 1 - .../mod/items/ItemLaserWrench.java | 51 ++++++++++++++++--- .../mod/tile/TileEntityLaserRelay.java | 20 +++++--- .../assets/actuallyadditions/lang/en_US.lang | 1 + 5 files changed, 60 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index caa398885..fa334c9ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -110,7 +110,7 @@ public class InitBooklet{ //RF Using Blocks new BookletChapter("fireworkBox", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFireworkBox), new PageTextOnly(1).addTextReplacement("", TileEntityFireworkBox.USE_PER_SHOT), new PageCrafting(2, BlockCrafting.recipeFireworkBox)).setSpecial(); - new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE).addTextReplacement("", ConfigIntValues.LASER_RELAY_LOSS.getValue()), new PagePicture(2, "pageLaserRelay", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeLaserWrench).setNoText()).setImportant(); + new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE).addTextReplacement("", ConfigIntValues.LASER_RELAY_LOSS.getValue()), new PagePicture(2, "pageLaserRelay", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeLaserWrench)).setImportant(); new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial(); new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java index c5097b173..f0f2f6798 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/values/ConfigBoolValues.java @@ -52,7 +52,6 @@ public enum ConfigBoolValues{ BOOKLET_TEXT_TO_FILE("Booklet Text to File", ConfigCategories.OTHER, false, "Should the entire text of the booklet be put into a new file in the Minecraft Folder on startup or resource reload. This is for debug purposes only and shouldn't really ever be needed."), WATER_BOWL("Water Bowl", ConfigCategories.OTHER, true, "If right-clicking a bowl on water should create a water bowl"), - LASER_WRENCH_HOLDING_PARTICLES("Laser Wrench Holding Particles", ConfigCategories.OTHER, false, "If particles of laser devices should only render when holding a Laser Wrench"), LESS_SOUND("Less Sound", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less sounds"), LESS_PARTICLES("Less Particles", ConfigCategories.PERFORMANCE, false, "If blocks in Actually Additions should have less particles"), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index ee1412518..dff7de1e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -10,20 +10,26 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; @@ -39,12 +45,11 @@ public class ItemLaserWrench extends ItemBase{ this.setMaxStackSize(1); } - @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing par7, float par8, float par9, float par10){ - if(!world.isRemote){ - TileEntity tile = world.getTileEntity(pos); - if(tile instanceof TileEntityLaserRelay){ + TileEntity tile = world.getTileEntity(pos); + if(tile instanceof TileEntityLaserRelay){ + if(!world.isRemote){ if(ItemPhantomConnector.getStoredPosition(stack) == null){ ItemPhantomConnector.storeConnection(stack, pos.getX(), pos.getY(), pos.getZ(), world); player.addChatComponentMessage(new TextComponentTranslation("tooltip."+ModUtil.MOD_ID+".laser.stored.desc")); @@ -67,12 +72,35 @@ public class ItemLaserWrench extends ItemBase{ } } } - return EnumActionResult.SUCCESS; } + return EnumActionResult.SUCCESS; } return EnumActionResult.FAIL; } + @Override + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ + if(!world.isRemote && player.isSneaking()){ + PlayerData.PlayerSave save = PlayerData.getDataFromPlayer(player); + + int currMode = save.theCompound.getInteger("LaserWrenchMode"); + if(currMode+1 >= WrenchMode.values().length){ + currMode = 0; + } + else{ + currMode++; + } + save.theCompound.setInteger("LaserWrenchMode", currMode); + + if(player instanceof EntityPlayerMP){ + PacketHandler.theNetwork.sendTo(new PacketServerToClient(save.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), (EntityPlayerMP)player); + } + + player.addChatComponentMessage(new TextComponentString("Mode changed to "+WrenchMode.values()[currMode].name+"!")); + } + return new ActionResult(EnumActionResult.SUCCESS, stack); + } + @Override public boolean getShareTag(){ return true; @@ -98,9 +126,20 @@ public class ItemLaserWrench extends ItemBase{ } } - @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; } + + public enum WrenchMode{ + ALWAYS_PARTICLES("always show particles"), + NO_PARTICLES("never show particles"), + HOLDING_PARTICLES("show particles when holding a Laser Wrench"); + + public String name; + + WrenchMode(String name){ + this.name = name; + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 6e39b9810..680b3c5e5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -11,7 +11,9 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; import de.ellpeck.actuallyadditions.mod.items.ItemLaserWrench; +import de.ellpeck.actuallyadditions.mod.items.ItemLaserWrench.WrenchMode; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.ConnectionPair; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -98,13 +100,17 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ if(Util.RANDOM.nextInt(ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 16 : 8) == 0){ EntityPlayer player = Minecraft.getMinecraft().thePlayer; if(player != null){ - ItemStack stack = player.getHeldItemMainhand(); - if(!ConfigBoolValues.LASER_WRENCH_HOLDING_PARTICLES.isEnabled() || (stack != null && stack.getItem() instanceof ItemLaserWrench)){ - LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); - if(network != null){ - for(ConnectionPair aPair : network.connections){ - if(aPair.contains(this.pos) && PosUtil.areSamePos(this.pos, aPair.positions[0])){ - AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); + WrenchMode mode = WrenchMode.values()[data.theCompound.getInteger("LaserWrenchMode")]; + if(mode != WrenchMode.NO_PARTICLES){ + ItemStack stack = player.getHeldItemMainhand(); + if(mode == WrenchMode.ALWAYS_PARTICLES || (stack != null && stack.getItem() instanceof ItemLaserWrench)){ + LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); + if(network != null){ + for(ConnectionPair aPair : network.connections){ + if(aPair.contains(this.pos) && PosUtil.areSamePos(this.pos, aPair.positions[0])){ + AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); + } } } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 264ee9924..877db55f2 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -822,6 +822,7 @@ booklet.actuallyadditions.chapter.hairBalls.text.2=Balls of Fur are an booklet.actuallyadditions.chapter.laserRelays.name=Laser Relays booklet.actuallyadditions.chapter.laserRelays.text.1=The Laser Relay is a block that can wirelessly transfer RF just by being connected with a Laser Wrench, generating a network. When placing a Power Generator or Receiver next to the relay, it can receive Power from any other relay in the network. Two relays can be at most blocks apart. During an energy transfer, they have an Energy Loss of %. +booklet.actuallyadditions.chapter.laserRelays.text.4=The Laser Wrench's mode can be switched by sneak-right-clicking it anywhere. Possible modes are to always show lasers, never show lasers or only show lasers when holding the wrench. booklet.actuallyadditions.chapter.blackLotus.name=Black Lotus booklet.actuallyadditions.chapter.blackLotus.text.1=Think of this: You need to craft black wool, black clay or anything else that needs black dye but you are just guilty about killing so many innocent squids? Well, the Black Lotus is exactly the thing you need! Just look around in the wild a bit, and you will find one, then being able to craft some Black Dye that can be used instead of Ink Sacs so that you don't need to kill poor squids and L any longer. From f97ba2d31c22694bb8f233713c98af42bc3a3fba Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 15 Jun 2016 18:37:54 +0200 Subject: [PATCH 275/322] Fixed Solidifer XP values being off. Closes #123 --- .../mod/tile/TileEntityXPSolidifier.java | 116 ++++++++++-------- 1 file changed, 64 insertions(+), 52 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 864b2863d..8ef3bdfa1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -83,10 +83,10 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I @Override public void onButtonPressed(int buttonID, EntityPlayer player){ if(buttonID < this.buttonAmounts.length){ - if(this.getPlayerXP(player) > 0){ - int xp = this.buttonAmounts[buttonID] == -999 ? this.getPlayerXP(player)/ItemSolidifiedExperience.SOLID_XP_AMOUNT : this.buttonAmounts[buttonID]; - if(this.amount < Short.MAX_VALUE-xp && this.getPlayerXP(player) >= ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp){ - this.addPlayerXP(player, -(ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp)); + if(getPlayerXP(player) > 0){ + int xp = this.buttonAmounts[buttonID] == -999 ? getPlayerXP(player)/ItemSolidifiedExperience.SOLID_XP_AMOUNT : this.buttonAmounts[buttonID]; + if(this.amount < Short.MAX_VALUE-xp && getPlayerXP(player) >= ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp){ + addPlayerXP(player, -(ItemSolidifiedExperience.SOLID_XP_AMOUNT*xp)); if(!this.worldObj.isRemote){ this.amount += xp; } @@ -95,59 +95,71 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I } } - //TODO Fix XP System to fit points needed in 1.8 (OpenBlocks?) - - /** - * Gets the Player's XP - * (Excerpted from OpenBlocks' XP system with permission, thanks guys!) - * - * @param player The Player - * @return The XP + /* + * The below methods were excerpted from EnderIO by SleepyTrousers with permission, thanks! */ - private int getPlayerXP(EntityPlayer player){ - return (int)(this.getExperienceForLevel(player.experienceLevel)+(player.experience*player.xpBarCap())); + + private static final Integer[] XP_MAP = new Integer[256]; + + static{ + for(int i = 0; i < XP_MAP.length; i++){ + XP_MAP[i] = getExperienceForLevelImpl(i); + } } - /** - * Adds (or removes, if negative) a certain amount of XP from a player - * (Excerpted from OpenBlocks' XP system with permission, thanks guys!) - * - * @param player The Player - * @param amount The Amount - */ - private void addPlayerXP(EntityPlayer player, int amount){ - int experience = this.getPlayerXP(player)+amount; - player.experienceTotal = experience; - - int level = 0; - while(this.getExperienceForLevel(level) <= experience){ - level++; + public static int getExperienceForLevel(int level){ + if(level >= 0 && level < XP_MAP.length){ + return XP_MAP[level]; } - player.experienceLevel = level-1; + if(level >= 21863){ + return Integer.MAX_VALUE; + } + return getExperienceForLevelImpl(level); + } - int expForLevel = this.getExperienceForLevel(player.experienceLevel); + private static int getExperienceForLevelImpl(int level){ + int res = 0; + for(int i = 0; i < level; i++){ + res += getXpBarCapacity(i); + if(res < 0){ + return Integer.MAX_VALUE; + } + } + return res; + } + + public static int getXpBarCapacity(int level){ + if(level >= 30){ + return 112+(level-30)*9; + } + else if(level >= 15){ + return 37+(level-15)*5; + } + return 7+level*2; + } + + public static int getLevelForExperience(int experience){ + for(int i = 0; i < XP_MAP.length; i++){ + if(XP_MAP[i] > experience){ + return i-1; + } + } + int i = XP_MAP.length; + while(getExperienceForLevel(i) <= experience){ + i++; + } + return i-1; + } + + public static int getPlayerXP(EntityPlayer player){ + return (int)(getExperienceForLevel(player.experienceLevel)+(player.experience*player.xpBarCap())); + } + + public static void addPlayerXP(EntityPlayer player, int amount){ + int experience = Math.max(0, getPlayerXP(player)+amount); + player.experienceTotal = experience; + player.experienceLevel = getLevelForExperience(experience); + int expForLevel = getExperienceForLevel(player.experienceLevel); player.experience = (float)(experience-expForLevel)/(float)player.xpBarCap(); } - - /** - * Gets the amount of experience a certain level contains - * (Excerpted from OpenBlocks' XP system with permission, thanks guys!) - * - * @param level The Level in question - * @return The total XP the level has - */ - private int getExperienceForLevel(int level){ - if(level > 0){ - if(level > 0 && level < 16){ - return level*17; - } - else if(level > 15 && level < 31){ - return (int)(1.5*(level*level)-29.5*level+360); - } - else{ - return (int)(3.5*(level*level)-151.5*level+2220); - } - } - return 0; - } } From bfd53115120def45c06d1fd6a7e6ada076af67b4 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 13:03:57 +0200 Subject: [PATCH 276/322] Made crafter not randomly create stacks with 0 items in them Closes #127 --- .../mod/inventory/ContainerCrafter.java | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java index a57a4e66a..347630639 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCrafter.java @@ -50,44 +50,55 @@ public class ContainerCrafter extends Container{ } @Override - public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - ItemStack stack = null; - Slot theSlot = this.inventorySlots.get(slot); + public ItemStack transferStackInSlot(EntityPlayer player, int index){ + ItemStack itemstack = null; + Slot slot = this.inventorySlots.get(index); - if(theSlot != null && theSlot.getHasStack()){ - ItemStack savedStack = theSlot.getStack(); - stack = savedStack.copy(); + if(slot != null && slot.getHasStack()){ + ItemStack itemstack1 = slot.getStack(); + itemstack = itemstack1.copy(); - if(slot == 0){ - if(!this.mergeItemStack(savedStack, 10, 46, true)){ + if(index == 0){ + if(!this.mergeItemStack(itemstack1, 10, 46, true)){ return null; } - theSlot.onSlotChange(savedStack, stack); + + slot.onSlotChange(itemstack1, itemstack); } - else if(slot >= 10 && slot < 37 && !this.mergeItemStack(savedStack, 37, 46, false)){ - return null; + else if(index >= 10 && index < 37){ + if(!this.mergeItemStack(itemstack1, 37, 46, false)){ + return null; + } } - else if(slot >= 37 && slot < 46 && !this.mergeItemStack(savedStack, 10, 37, false)){ - return null; + else if(index >= 37 && index < 46){ + if(!this.mergeItemStack(itemstack1, 10, 37, false)){ + return null; + } } - else if(!this.mergeItemStack(savedStack, 10, 46, false)){ + else if(!this.mergeItemStack(itemstack1, 10, 46, false)){ return null; } - if(savedStack.stackSize <= 0){ - theSlot.putStack(null); + if(itemstack1.stackSize <= 0){ + slot.putStack(null); } else{ - theSlot.onSlotChanged(); + slot.onSlotChanged(); } - if(savedStack.stackSize == stack.stackSize){ + if(itemstack1.stackSize == itemstack.stackSize){ return null; } - theSlot.onPickupFromSlot(player, savedStack); + slot.onPickupFromSlot(player, itemstack1); } - return stack; + + return itemstack; + } + + @Override + public boolean canMergeSlot(ItemStack stack, Slot slotIn){ + return slotIn.inventory != this.craftResult && super.canMergeSlot(stack, slotIn); } @Override From eaed2536299b810bbd714b8d4d0e158b31b44c2e Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 13:25:15 +0200 Subject: [PATCH 277/322] Changed the way fluids and RF are handled by always having them both be pulled and pushed. Closes #125 --- .../mod/tile/TileEntityBase.java | 13 +++ .../mod/tile/TileEntityCanolaPress.java | 10 -- .../mod/tile/TileEntityCoalGenerator.java | 4 - .../mod/tile/TileEntityEnervator.java | 4 - .../mod/tile/TileEntityFermentingBarrel.java | 10 -- .../mod/tile/TileEntityFluidCollector.java | 10 -- .../mod/tile/TileEntityFurnaceSolar.java | 4 - .../mod/tile/TileEntityHeatCollector.java | 4 - .../mod/tile/TileEntityLeafGenerator.java | 4 - .../mod/tile/TileEntityOilGenerator.java | 4 - .../mod/tile/TileEntityPhantomEnergyface.java | 11 -- .../mod/tile/TileEntityPhantomLiquiface.java | 8 -- .../actuallyadditions/mod/util/WorldUtil.java | 108 ++++++++++-------- 13 files changed, 73 insertions(+), 121 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 5696cfc7e..bb8c241be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -10,10 +10,13 @@ package de.ellpeck.actuallyadditions.mod.tile; +import cofh.api.energy.IEnergyProvider; +import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -172,6 +175,16 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public void updateEntity(){ this.ticksElapsed++; + + if(!this.worldObj.isRemote){ + if(this instanceof IEnergyReceiver || this instanceof IEnergyProvider){ + WorldUtil.doEnergyInteraction(this); + } + + if(this instanceof net.minecraftforge.fluids.IFluidHandler || this.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)){ + WorldUtil.doFluidInteraction(this); + } + } } public void setRedstonePowered(boolean powered){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 89f456803..6570a6750 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -103,16 +103,6 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE this.currentProcessTime = 0; } - if(this.tank.getFluidAmount() > 0){ - WorldUtil.pushFluid(this, EnumFacing.DOWN); - if(!this.isRedstonePowered){ - WorldUtil.pushFluid(this, EnumFacing.NORTH); - WorldUtil.pushFluid(this, EnumFacing.EAST); - WorldUtil.pushFluid(this, EnumFacing.SOUTH); - WorldUtil.pushFluid(this, EnumFacing.WEST); - } - } - if((this.storage.getEnergyStored() != this.lastEnergyStored || this.tank.getFluidAmount() != this.lastTankAmount | this.currentProcessTime != this.lastProcessTime) && this.sendUpdateWithInterval()){ this.lastEnergyStored = this.storage.getEnergyStored(); this.lastProcessTime = this.currentProcessTime; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 80a82ee82..2a652e4bd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -83,10 +83,6 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } } - if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this); - } - if(flag != this.currentBurnTime > 0){ this.markDirty(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 6c41caf0b..36363aeee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -60,10 +60,6 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } } - if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this); - } - if(this.lastEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ this.lastEnergy = this.storage.getEnergyStored(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index e602c0288..b76b7dda1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -88,16 +88,6 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid this.currentProcessTime = 0; } - if(this.oilTank.getFluidAmount() > 0){ - WorldUtil.pushFluid(this, EnumFacing.DOWN); - if(!this.isRedstonePowered){ - WorldUtil.pushFluid(this, EnumFacing.NORTH); - WorldUtil.pushFluid(this, EnumFacing.EAST); - WorldUtil.pushFluid(this, EnumFacing.SOUTH); - WorldUtil.pushFluid(this, EnumFacing.WEST); - } - } - if((this.canolaTank.getFluidAmount() != this.lastCanola || this.oilTank.getFluidAmount() != this.lastOil || this.currentProcessTime != this.lastProcessTime) && this.sendUpdateWithInterval()){ this.lastProcessTime = this.currentProcessTime; this.lastCanola = this.canolaTank.getFluidAmount(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index d8550c945..42eb5e093 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -134,16 +134,6 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa } } - if(!this.isPlacer && this.tank.getFluidAmount() > 0){ - WorldUtil.pushFluid(this, EnumFacing.DOWN); - if(!this.isRedstonePowered){ - WorldUtil.pushFluid(this, EnumFacing.NORTH); - WorldUtil.pushFluid(this, EnumFacing.EAST); - WorldUtil.pushFluid(this, EnumFacing.SOUTH); - WorldUtil.pushFluid(this, EnumFacing.WEST); - } - } - if(this.lastTankAmount != this.tank.getFluidAmount() && this.sendUpdateWithInterval()){ this.lastTankAmount = this.tank.getFluidAmount(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 955e0af18..1ec9e0536 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -73,10 +73,6 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro } } - if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this); - } - if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ this.oldEnergy = this.storage.getEnergyStored(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 10ce2edb9..ce2b3ae11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -73,10 +73,6 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr } } - if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this); - } - if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ this.oldEnergy = this.storage.getEnergyStored(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index e8abf01dc..c6f1d273e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -100,10 +100,6 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr } } - if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this); - } - if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ this.oldEnergy = this.storage.getEnergyStored(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 9f59130ba..9f5163931 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -99,10 +99,6 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro } } - if(this.storage.getEnergyStored() > 0){ - WorldUtil.pushEnergyToAllSides(this); - } - if(flag != this.currentBurnTime > 0){ this.markDirty(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 46adf947f..4b7fb4036 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -80,17 +80,6 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement return null; } - @Override - public void updateEntity(){ - super.updateEntity(); - - if(!this.worldObj.isRemote){ - if(this.isBoundThingInRange() && this.getProvider() != null){ - WorldUtil.pushEnergyToAllSides(this); - } - } - } - @Override public boolean isBoundThingInRange(){ return super.isBoundThingInRange() && (this.worldObj.getTileEntity(this.boundPosition) instanceof IEnergyReceiver || this.worldObj.getTileEntity(this.boundPosition) instanceof IEnergyProvider); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index 258c93de6..de7f76ed0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -30,14 +30,6 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements @Override public void updateEntity(){ super.updateEntity(); - - if(!this.worldObj.isRemote){ - if(this.isRedstonePowered && this.isBoundThingInRange()){ - for(EnumFacing side : EnumFacing.values()){ - WorldUtil.pushFluid(this, side); - } - } - } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 0053ffd40..700a66bec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.util; -import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; import net.minecraft.block.Block; @@ -50,7 +49,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler; import java.util.ArrayList; import java.util.List; -public class WorldUtil{ +public final class WorldUtil{ public static void breakBlockAtSide(EnumFacing side, World world, BlockPos pos){ breakBlockAtSide(side, world, pos, 0); @@ -64,26 +63,67 @@ public class WorldUtil{ return new BlockPos(pos.getX()+side.getFrontOffsetX()*(offset+1), pos.getY()+side.getFrontOffsetY()*(offset+1), pos.getZ()+side.getFrontOffsetZ()*(offset+1)); } - public static void pushEnergyToAllSides(TileEntity tileFrom){ - pushEnergy(tileFrom, EnumFacing.UP); - pushEnergy(tileFrom, EnumFacing.DOWN); - pushEnergy(tileFrom, EnumFacing.NORTH); - pushEnergy(tileFrom, EnumFacing.EAST); - pushEnergy(tileFrom, EnumFacing.SOUTH); - pushEnergy(tileFrom, EnumFacing.WEST); + public static void doEnergyInteraction(TileEntity tile){ + for(EnumFacing side : EnumFacing.values()){ + TileEntity otherTile = getTileEntityFromSide(side, tile.getWorld(), tile.getPos()); + if(otherTile != null){ + IEnergyReceiver handlerTo = null; + IEnergyProvider handlerFrom = null; + + //Push RF + if(tile instanceof IEnergyProvider && otherTile instanceof IEnergyReceiver){ + handlerTo = (IEnergyReceiver)otherTile; + handlerFrom = (IEnergyProvider)tile; + } + //Pull RF + else if(tile instanceof IEnergyReceiver && otherTile instanceof IEnergyProvider){ + handlerTo = (IEnergyReceiver)tile; + handlerFrom = (IEnergyProvider)otherTile; + } + + if(handlerFrom != null && handlerTo != null){ + int drain = handlerFrom.extractEnergy(side, Integer.MAX_VALUE, true); + if(drain > 0){ + if(handlerTo.canConnectEnergy(side.getOpposite())){ + int filled = handlerTo.receiveEnergy(side.getOpposite(), drain, false); + handlerFrom.extractEnergy(side, filled, false); + } + } + } + } + } } - public static void pushEnergy(TileEntity tileFrom, EnumFacing side){ - TileEntity tileTo = getTileEntityFromSide(side, tileFrom.getWorld(), tileFrom.getPos()); - if(tileTo != null){ - if(tileFrom instanceof IEnergyProvider && tileTo instanceof IEnergyReceiver){ - IEnergyReceiver handlerTo = (IEnergyReceiver)tileTo; - IEnergyProvider handlerFrom = (IEnergyProvider)tileFrom; - int drain = handlerFrom.extractEnergy(side, Integer.MAX_VALUE, true); - if(drain > 0){ - if(handlerTo.canConnectEnergy(side.getOpposite())){ - int filled = handlerTo.receiveEnergy(side.getOpposite(), drain, false); - handlerFrom.extractEnergy(side, filled, false); + public static void doFluidInteraction(TileEntity tile){ + for(EnumFacing side : EnumFacing.values()){ + TileEntity otherTile = getTileEntityFromSide(side, tile.getWorld(), tile.getPos()); + if(otherTile != null){ + for(int i = 0; i < 2; i++){ + //Push and pull with old fluid system + if(tile instanceof net.minecraftforge.fluids.IFluidHandler && otherTile instanceof net.minecraftforge.fluids.IFluidHandler){ + net.minecraftforge.fluids.IFluidHandler handlerTo = (net.minecraftforge.fluids.IFluidHandler)(i == 0 ? tile : otherTile); + net.minecraftforge.fluids.IFluidHandler handlerFrom = (net.minecraftforge.fluids.IFluidHandler)(i == 0 ? otherTile : tile); + FluidStack drain = handlerFrom.drain(side, Integer.MAX_VALUE, false); + if(drain != null){ + if(handlerTo.canFill(side.getOpposite(), drain.getFluid())){ + int filled = handlerTo.fill(side.getOpposite(), drain.copy(), true); + handlerFrom.drain(side, filled, true); + break; + } + } + } + //Push and pull with new fluid system + else{ + IFluidHandler handlerFrom = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, i == 0 ? side.getOpposite() : side); + IFluidHandler handlerTo = otherTile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, i == 0 ? side : side.getOpposite()); + if(handlerFrom != null && handlerTo != null){ + FluidStack drain = handlerFrom.drain(Integer.MAX_VALUE, false); + if(drain != null){ + int filled = handlerTo.fill(drain.copy(), true); + handlerFrom.drain(filled, true); + break; + } + } } } } @@ -113,34 +153,6 @@ public class WorldUtil{ return true; } - public static void pushFluid(TileEntity tileFrom, EnumFacing side){ - TileEntity tileTo = getTileEntityFromSide(side, tileFrom.getWorld(), tileFrom.getPos()); - if(tileTo != null){ - if(tileFrom instanceof net.minecraftforge.fluids.IFluidHandler && tileTo instanceof net.minecraftforge.fluids.IFluidHandler){ - net.minecraftforge.fluids.IFluidHandler handlerTo = (net.minecraftforge.fluids.IFluidHandler)tileTo; - net.minecraftforge.fluids.IFluidHandler handlerFrom = (net.minecraftforge.fluids.IFluidHandler)tileFrom; - FluidStack drain = handlerFrom.drain(side, Integer.MAX_VALUE, false); - if(drain != null){ - if(handlerTo.canFill(side.getOpposite(), drain.getFluid())){ - int filled = handlerTo.fill(side.getOpposite(), drain.copy(), true); - handlerFrom.drain(side, filled, true); - } - } - } - else{ - IFluidHandler handlerFrom = tileFrom.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); - IFluidHandler handlerTo = tileTo.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side.getOpposite()); - if(handlerFrom != null && handlerTo != null){ - FluidStack drain = handlerFrom.drain(Integer.MAX_VALUE, false); - if(drain != null){ - int filled = handlerTo.fill(drain.copy(), true); - handlerFrom.drain(filled, true); - } - } - } - } - } - public static ItemStack useItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ if(world instanceof WorldServer && stack != null && stack.getItem() != null){ BlockPos offsetPos = pos.offset(side); From 138a1af26ccd645a57ee9a166a6d5e8c4650e2d2 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 14:00:52 +0200 Subject: [PATCH 278/322] Added Tesla support. Closes #124 --- build.gradle | 4 + .../mod/blocks/InitBlocks.java | 2 +- .../mod/items/InitItems.java | 2 +- .../mod/tile/TileEntityBase.java | 18 ++++ .../actuallyadditions/mod/util/WorldUtil.java | 10 +- .../mod/util/{ => compat}/CompatUtil.java | 2 +- .../mod/util/compat/TeslaHandler.java | 71 ++++++++++++++ .../mod/util/compat/TeslaUtil.java | 94 +++++++++++++++++++ 8 files changed, 198 insertions(+), 5 deletions(-) rename src/main/java/de/ellpeck/actuallyadditions/mod/util/{ => compat}/CompatUtil.java (96%) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaHandler.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java diff --git a/build.gradle b/build.gradle index 1c6c29b33..800d2848a 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,9 @@ repositories { maven { url "http://dvs1.progwml6.com/files/maven" } + maven { + url "http://maven.epoxide.xyz" + } } dependencies { @@ -44,6 +47,7 @@ dependencies { //compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev" //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" + compile "net.darkhax.tesla:Tesla:1.9.4-1.1.0.24" deobfCompile "mezz.jei:jei_1.9.4:3.4.0.202" compile files("lib/Rarmor.jar") } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 53f8d9181..772e00750 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; -import de.ellpeck.actuallyadditions.mod.util.CompatUtil; +import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 96559cc28..5ecdca573 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -22,7 +22,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; -import de.ellpeck.actuallyadditions.mod.util.CompatUtil; +import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Blocks; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index bb8c241be..61c3c70bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -17,6 +17,7 @@ import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -30,6 +31,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fml.common.ModAPIManager; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -39,6 +41,8 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public boolean isRedstonePowered; protected int ticksElapsed; + public static boolean teslaLoaded; + public TileEntityBase(String name){ this.name = "container."+ModUtil.MOD_ID+"."+name; } @@ -95,6 +99,14 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer"); GameRegistry.registerTileEntity(TileEntityBookletStand.class, ModUtil.MOD_ID+":tileEntityBookletStand"); GameRegistry.registerTileEntity(TileEntityDisplayStand.class, ModUtil.MOD_ID+":tileEntityDisplayStand"); + + if(ModAPIManager.INSTANCE.hasAPI("Tesla|API")){ + ModUtil.LOGGER.info("Tesla API loaded... Activating Tesla Power System integration..."); + teslaLoaded = true; + } + else{ + ModUtil.LOGGER.info("Tesla API not found! Skipping Tesla Power System integration."); + } } @Override @@ -233,6 +245,12 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ return (T)tank; } } + else if(teslaLoaded){ + T cap = TeslaUtil.getTeslaCapability(this, capability, facing); + if(cap != null){ + return cap; + } + } return super.getCapability(capability, facing); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 700a66bec..127176cf2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -12,6 +12,8 @@ package de.ellpeck.actuallyadditions.mod.util; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; import net.minecraft.block.material.Material; @@ -30,6 +32,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.play.client.CPacketPlayerDigging; import net.minecraft.network.play.server.SPacketBlockChange; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityBanner; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; @@ -90,6 +93,9 @@ public final class WorldUtil{ } } } + else if(TileEntityBase.teslaLoaded){ + TeslaUtil.doTeslaInteraction(tile, otherTile, side); + } } } } @@ -114,8 +120,8 @@ public final class WorldUtil{ } //Push and pull with new fluid system else{ - IFluidHandler handlerFrom = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, i == 0 ? side.getOpposite() : side); - IFluidHandler handlerTo = otherTile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, i == 0 ? side : side.getOpposite()); + IFluidHandler handlerFrom = (i == 0 ? tile : otherTile).getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, i == 0 ? side : side.getOpposite()); + IFluidHandler handlerTo = (i == 0 ? otherTile : tile).getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, i == 0 ? side.getOpposite() : side); if(handlerFrom != null && handlerTo != null){ FluidStack drain = handlerFrom.drain(Integer.MAX_VALUE, false); if(drain != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java similarity index 96% rename from src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java index 85b0f6eb3..08331ef6a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/CompatUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java @@ -8,7 +8,7 @@ * © 2015-2016 Ellpeck */ -package de.ellpeck.actuallyadditions.mod.util; +package de.ellpeck.actuallyadditions.mod.util.compat; import de.ellpeck.actuallyadditions.mod.items.base.ItemSeed; import net.minecraft.block.Block; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaHandler.java new file mode 100644 index 000000000..cce74a315 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaHandler.java @@ -0,0 +1,71 @@ +/* + * This file ("TeslaHandler.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.util.compat; + +import cofh.api.energy.IEnergyHandler; +import cofh.api.energy.IEnergyProvider; +import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import net.darkhax.tesla.api.ITeslaConsumer; +import net.darkhax.tesla.api.ITeslaHolder; +import net.darkhax.tesla.api.ITeslaProducer; +import net.minecraft.util.EnumFacing; + +public class TeslaHandler implements ITeslaProducer, ITeslaHolder, ITeslaConsumer{ + + private final EnumFacing side; + private final TileEntityBase tile; + + public TeslaHandler(TileEntityBase tile, EnumFacing side){ + this.tile = tile; + this.side = side; + } + + @Override + public long givePower(long power, boolean simulated){ + if(this.tile instanceof IEnergyReceiver){ + return ((IEnergyReceiver)this.tile).receiveEnergy(this.side, (int)power, simulated); + } + else{ + return 0; + } + } + + @Override + public long getStoredPower(){ + if(this.tile instanceof IEnergyHandler){ + return ((IEnergyHandler)this.tile).getEnergyStored(this.side); + } + else{ + return 0; + } + } + + @Override + public long getCapacity(){ + if(this.tile instanceof IEnergyHandler){ + return ((IEnergyHandler)this.tile).getMaxEnergyStored(this.side); + } + else{ + return 0; + } + } + + @Override + public long takePower(long power, boolean simulated){ + if(this.tile instanceof IEnergyProvider){ + return ((IEnergyProvider)this.tile).extractEnergy(this.side, (int)power, simulated); + } + else{ + return 0; + } + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java new file mode 100644 index 000000000..0d835e8f4 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java @@ -0,0 +1,94 @@ +/* + * This file ("TeslaUtil.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.util.compat; + +import cofh.api.energy.IEnergyHandler; +import cofh.api.energy.IEnergyProvider; +import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import net.darkhax.tesla.api.ITeslaConsumer; +import net.darkhax.tesla.api.ITeslaHolder; +import net.darkhax.tesla.api.ITeslaProducer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; + +import java.util.HashMap; +import java.util.Map; + +public final class TeslaUtil{ + + @CapabilityInject(ITeslaConsumer.class) + public static Capability teslaConsumer = null; + + @CapabilityInject(ITeslaProducer.class) + public static Capability teslaProducer = null; + + @CapabilityInject(ITeslaHolder.class) + public static Capability teslaHolder = null; + + private static final Map TESLA_MAP = new HashMap(); + + public static T getTeslaCapability(TileEntityBase tile, Capability capability, EnumFacing facing){ + boolean receive = tile instanceof IEnergyReceiver && capability == teslaConsumer; + boolean provide = tile instanceof IEnergyProvider && capability == teslaProducer; + boolean hold = tile instanceof IEnergyHandler && capability == teslaHolder; + if(receive || provide || hold){ + return (T)getHandler(tile, facing); + } + else{ + return null; + } + } + + public static boolean doTeslaInteraction(TileEntity tile, TileEntity otherTile, EnumFacing side){ + ITeslaConsumer handlerTo = null; + ITeslaProducer handlerFrom = null; + + for(int i = 0; i < 2; i++){ + if(handlerFrom == null){ + handlerFrom = (i == 0 ? tile : otherTile).getCapability(teslaProducer, i == 0 ? side : side.getOpposite()); + } + + if(handlerTo == null){ + handlerTo = (i == 0 ? otherTile : tile).getCapability(teslaConsumer, i == 0 ? side.getOpposite() : side); + } + } + + if(handlerFrom != null && handlerTo != null){ + long drain = handlerFrom.takePower(Integer.MAX_VALUE, true); + if(drain > 0){ + long filled = handlerTo.givePower(drain, false); + handlerFrom.takePower(filled, false); + return true; + } + } + return false; + } + + private static TeslaHandler getHandler(TileEntityBase tile, EnumFacing facing){ + TeslaHandler[] handlers = TESLA_MAP.get(tile); + if(handlers == null || handlers.length != 6){ + handlers = new TeslaHandler[6]; + TESLA_MAP.put(tile, handlers); + } + + int side = facing.ordinal(); + if(handlers[side] == null){ + handlers[side] = new TeslaHandler(tile, facing); + } + return handlers[side]; + } + +} From d8406ab5fc0f6393d38ba57e3df016a9dd6a804d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 14:06:43 +0200 Subject: [PATCH 279/322] Fixed machines trying to input into themselves with tesla --- .../ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java index 0d835e8f4..96eb15b5a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java @@ -57,11 +57,8 @@ public final class TeslaUtil{ ITeslaProducer handlerFrom = null; for(int i = 0; i < 2; i++){ - if(handlerFrom == null){ + if(handlerFrom == null && handlerTo == null){ handlerFrom = (i == 0 ? tile : otherTile).getCapability(teslaProducer, i == 0 ? side : side.getOpposite()); - } - - if(handlerTo == null){ handlerTo = (i == 0 ? otherTile : tile).getCapability(teslaConsumer, i == 0 ? side.getOpposite() : side); } } From b3cac0cadf61ad705c8c81efb97d704e32bb978a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 14:16:01 +0200 Subject: [PATCH 280/322] Documented Tesla --- src/main/resources/assets/actuallyadditions/lang/en_US.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 877db55f2..44edf344f 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -857,8 +857,8 @@ booklet.actuallyadditions.chapter.fireworkBox.name=Firework Box booklet.actuallyadditions.chapter.fireworkBox.text.1=The Firework Box is a perfect thing for New Year's! When placed down and supplied with some RF, it will shoot out some randomly generated Fireworks around it. For each shot, it uses RF. You know, Vanilla Fireworks are just too bloody annoying to craft, but too awesome not to use. So here's the solution. booklet.actuallyadditions.chapter.fireworkBox.text.2=When right-clicking it with a Redstone Torch in hand, it will change between a mode where it gets deactivated by Redstone and a mode where it responds to pulses. -booklet.actuallyadditions.chapter.rf.name=RF (Redstone Flux) -booklet.actuallyadditions.chapter.rf.text.1=For anyone who hasn't used much of a mod that uses RF yet, here's a quick explanation. Redstone Flux, or RF for short, is a power system used by many mods. The basic concept is is that lots of machines generate or use it every game tick. That's what RF/t means. To connect a power generating (thus, outputting) machine to one that needs (thus, receives) power, just place it next to it. What's a fourth wall? +booklet.actuallyadditions.chapter.rf.name=RF? Tesla? +booklet.actuallyadditions.chapter.rf.text.1=For anyone who hasn't used much of a mod that uses RF yet, here's a quick explanation. Redstone Flux is a power system used by many mods. The basic concept is is that machines generate or use it every game tick. That's what RF/t means. To connect machines, just place them next to each other. Also, if you fancy that sort of thing, all machines also work with Tesla in the same way they do with RF. booklet.actuallyadditions.chapter.enderStar.name=Ender Star booklet.actuallyadditions.chapter.enderStar.text.1=The Ender Star can be obtained by both killing a wither and going to the end to collect Dragon's Breath. The latter is obtained by using a bottle on the purple particles that the dragon spits out. The Ender Star is used for multiple crafting recipes. From cba94da5c5ff6504c122648c471369394fd337ad Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 14:54:53 +0200 Subject: [PATCH 281/322] Removed rarmor integration as the mod is being rewritten soon. Sorry. :v --- build.gradle | 1 - .../mod/ActuallyAdditions.java | 2 +- .../mod/booklet/InitBooklet.java | 5 - .../mod/crafting/ItemCrafting.java | 10 -- .../mod/creative/CreativeTab.java | 1 - .../mod/items/InitItems.java | 6 - .../items/ItemRarmorModuleReconstructor.java | 140 ------------------ .../assets/actuallyadditions/lang/en_US.lang | 3 - 8 files changed, 1 insertion(+), 167 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java diff --git a/build.gradle b/build.gradle index 800d2848a..c1ad80592 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,6 @@ dependencies { compile "net.darkhax.tesla:Tesla:1.9.4-1.1.0.24" deobfCompile "mezz.jei:jei_1.9.4:3.4.0.202" - compile files("lib/Rarmor.jar") } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 461bca0fb..044c33ecb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -139,7 +139,7 @@ public class ActuallyAdditions{ if(mapping.name != null){ String name = mapping.name.toLowerCase(Locale.ROOT); if(name.startsWith(ModUtil.MOD_ID+":")){ - if(name.contains("paxel") || name.contains("itemspecial") || name.contains("blockbookstand") || name.contains("rarmor") || name.contains("bucket")){ + if(name.contains("paxel") || name.contains("itemspecial") || name.contains("blockbookstand") || name.contains("rarmor") || name.contains("bucket") || name.contains("modulereconstructor")){ mapping.ignore(); ModUtil.LOGGER.info("Missing Mapping "+mapping.name+" is getting ignored. This is intentional."); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index fa334c9ad..77f21a05f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -157,10 +157,5 @@ public class InitBooklet{ new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing)); new BookletChapter("waterRemovalRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemWaterRemovalRing), new PageCrafting(1, ItemCrafting.recipeWaterRing)); new BookletChapter("batteries", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemBatteryTriple), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeBattery).setNoText(), new PageCrafting(3, ItemCrafting.recipeBatteryDouble).setNoText(), new PageCrafting(4, ItemCrafting.recipeBatteryTriple).setNoText(), new PageCrafting(5, ItemCrafting.recipeBatteryQuadruple).setNoText(), new PageCrafting(6, ItemCrafting.recipeBatteryQuintuple).setNoText()); - - //Crossover - if(Loader.isModLoaded("rarmor")){ - new BookletChapter("rarmorModuleReconstructor", ActuallyAdditionsAPI.entryCrossover, new ItemStack(InitItems.itemRarmorModuleReconstructor), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeRarmorModuleReconstructor).setNoText()); - } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index 79153cf4f..e70bb06b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -83,7 +83,6 @@ public class ItemCrafting{ public static IRecipe recipeLens; public static IRecipe recipeCrateKeeper; public static IRecipe recipeEnderStar; - public static IRecipe recipeRarmorModuleReconstructor; public static IRecipe recipeSpawnerChanger; public static IRecipe recipeFilter; @@ -472,15 +471,6 @@ public class ItemCrafting{ new ItemStack(Items.SIGN))); } - //Rarmor Reconstructor Module - if(Loader.isModLoaded("rarmor") && ConfigCrafting.RARMOR_RECONSTRUCTOR_MODULE.isEnabled()){ - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitItems.itemRarmorModuleReconstructor), - " G ", "GSG", " G ", - 'G', ItemUtil.getItemFromName("rarmor:ribbonCable"), - 'S', new ItemStack(InitBlocks.blockAtomicReconstructor))); - recipeRarmorModuleReconstructor = RecipeUtil.lastIRecipe(); - } - //Tiny Coal GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.TINY_COAL.ordinal()), new ItemStack(Items.COAL)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 087c750a3..4547e4974 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -189,7 +189,6 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemSolidifiedExperience); this.add(InitItems.itemLeafBlower); this.add(InitItems.itemLeafBlowerAdvanced); - this.add(InitItems.itemRarmorModuleReconstructor); this.add(InitItems.woodenPaxel); this.add(InitItems.stonePaxel); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 5ecdca573..bdf9f281f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -210,8 +210,6 @@ public class InitItems{ public static Item itemWaterBowl; public static Item itemFilter; - public static Item itemRarmorModuleReconstructor; - public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); @@ -372,9 +370,5 @@ public class InitItems{ itemPantsCrystalWhite = new ItemArmorAA("itemPantsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 2, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemBootsCrystalWhite = new ItemArmorAA("itemBootsCrystalWhite", InitArmorMaterials.armorMaterialCrystalWhite, 3, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), Util.CRYSTAL_WHITE_RARITY); itemPaxelCrystalWhite = new ItemAllToolAA(InitToolMaterials.toolMaterialCrystalWhite, new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), "itemPaxelCrystalWhite", Util.CRYSTAL_WHITE_RARITY, 14606302); - - if(Loader.isModLoaded("rarmor")){ - itemRarmorModuleReconstructor = new ItemRarmorModuleReconstructor("itemRarmorModuleReconstructor"); - } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java deleted file mode 100644 index 93c367859..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemRarmorModuleReconstructor.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * This file ("ItemRarmorModuleReconstructor.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.items; - -import cofh.api.energy.IEnergyContainerItem; -import de.canitzp.rarmor.api.InventoryBase; -import de.canitzp.rarmor.api.modules.IRarmorModule; -import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; -import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; -import de.ellpeck.actuallyadditions.api.lens.Lens; -import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; -import net.minecraftforge.fml.common.Optional; - -import java.util.ArrayList; -import java.util.List; - -@Optional.Interface(modid = "rarmor", iface = "de.canitzp.rarmor.api.modules.IRarmorModule") -public class ItemRarmorModuleReconstructor extends ItemBase implements IRarmorModule{ - - public ItemRarmorModuleReconstructor(String name){ - super(name); - - this.setMaxStackSize(1); - } - - @Override - public String getUniqueName(){ - return this.getRegistryName().toString(); - } - - - @Override - public EnumRarity getRarity(ItemStack stack){ - return EnumRarity.RARE; - } - - @Override - public ModuleType getModuleType(){ - return ModuleType.ACTIVE; - } - - @Override - public List getGuiHelp(){ - List text = new ArrayList(); - text.add("Read more about this in the"); - text.add("Actually Additions Manual!"); - return text; - } - - @Override - public void onModuleTickInArmor(World world, EntityPlayer player, ItemStack armorChestplate, ItemStack module, InventoryBase inventory){ - if(!world.isRemote && player.isSneaking() && player.onGround){ - if(world.getTotalWorldTime()%50 == 0){ - IAtomicReconstructor fake = this.getFakeReconstructor(world, player, armorChestplate); - RayTraceResult result = WorldUtil.getNearestPositionWithAir(world, player, fake.getLens().getDistance()); - if(result != null){ - BlockPos pos = result.getBlockPos(); - if(pos != null){ - int energyUse = TileEntityAtomicReconstructor.ENERGY_USE*2; - if(fake.getEnergy() >= energyUse){ - fake.getLens().invoke(world.getBlockState(pos), pos, fake); - - EnumFacing hit = result.sideHit; - TileEntityAtomicReconstructor.shootLaser(world, player.posX-player.width/2, player.posY+player.getYOffset()+player.getEyeHeight()/2, player.posZ-player.width/2, pos.getX()+hit.getFrontOffsetX(), pos.getY()+hit.getFrontOffsetY(), pos.getZ()+hit.getFrontOffsetZ(), fake.getLens()); - - fake.extractEnergy(energyUse); - } - } - } - } - } - } - - private IAtomicReconstructor getFakeReconstructor(final World world, final EntityPlayer player, final ItemStack armorChestplate){ - return new IAtomicReconstructor(){ - @Override - public int getX(){ - return MathHelper.floor_double(player.posX); - } - - @Override - public int getY(){ - return MathHelper.floor_double(player.posY); - } - - @Override - public int getZ(){ - return MathHelper.floor_double(player.posZ); - } - - @Override - public World getWorldObject(){ - return world; - } - - @Override - public void extractEnergy(int amount){ - Item item = armorChestplate.getItem(); - if(item instanceof IEnergyContainerItem){ - ((IEnergyContainerItem)item).extractEnergy(armorChestplate, amount, false); - } - } - - @Override - public int getEnergy(){ - Item item = armorChestplate.getItem(); - if(item instanceof IEnergyContainerItem){ - return ((IEnergyContainerItem)item).getEnergyStored(armorChestplate); - } - else{ - return 0; - } - } - - @Override - public Lens getLens(){ - return ActuallyAdditionsAPI.lensDefaultConversion; - } - }; - } -} diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 44edf344f..21c4b1805 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -866,9 +866,6 @@ booklet.actuallyadditions.chapter.enderStar.text.1=The Ender Star can b booklet.actuallyadditions.chapter.phantomRedstoneface.name=Phantom Redstoneface booklet.actuallyadditions.chapter.phantomRedstoneface.text.1=If you don't know what Phantomfaces are, check the Phantomfaces Entry first. The Phantom Redstoneface can be used to transmit redstone signals. This one, however, works differently to the other Phantomfaces as it only works in one direction. What this means is that the connected block has to provide redstone power for redstone next to the Redstoneface to become powered. It does not work the other way around. -booklet.actuallyadditions.chapter.rarmorModuleReconstructor.name=Reconstruction Module -booklet.actuallyadditions.chapter.rarmorModuleReconstructor.text.1=The Reconstruction Module can be used in the Rarmor. The Rarmor is a type of configurable armor that is added by the Rarmor Mod. If you want to use this module, place it inside the Rarmor GUI that is accessed by wearing the armor and opening your inventory. The module, when the player is sneaking, will shoot out a reconstruction beam that would be created by the Atomic Reconstructor without a lens. This will cause blocks that are hit to be reconstructed. - booklet.actuallyadditions.chapter.spawnerShard.name=Spawner Shards booklet.actuallyadditions.chapter.spawnerShard.text.1=The Spawner Shards are a crafting ingredient found by breaking spawners. Once a spawner in the world is broken, it will always drop one Shard. From c191761cdaf1958191059c84ac6098cf573e9d8d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 15:00:25 +0200 Subject: [PATCH 282/322] Integer -> Long --- .../de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java index 96eb15b5a..b0cf1fd36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java @@ -64,7 +64,7 @@ public final class TeslaUtil{ } if(handlerFrom != null && handlerTo != null){ - long drain = handlerFrom.takePower(Integer.MAX_VALUE, true); + long drain = handlerFrom.takePower(Long.MAX_VALUE, true); if(drain > 0){ long filled = handlerTo.givePower(drain, false); handlerFrom.takePower(filled, false); From 9f36b42d30307639827fa1ce5e502f8f675a5866 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 19:14:59 +0200 Subject: [PATCH 283/322] Made Reconstructor and Display stand not keep their items on the client when removed --- .../mod/tile/TileEntityInventoryBase.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 51fdcc0c8..5832c1dfe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -42,11 +42,10 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements public static void saveSlots(ItemStack[] slots, NBTTagCompound compound){ if(slots != null && slots.length > 0){ NBTTagList tagList = new NBTTagList(); - for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ + for(ItemStack slot : slots){ NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setByte("Slot", (byte)currentIndex); - if(slots[currentIndex] != null){ - slots[currentIndex].writeToNBT(tagCompound); + if(slot != null){ + slot.writeToNBT(tagCompound); } tagList.appendTag(tagCompound); } @@ -57,14 +56,9 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements public static void loadSlots(ItemStack[] slots, NBTTagCompound compound){ if(slots != null && slots.length > 0){ NBTTagList tagList = compound.getTagList("Items", 10); - for(int i = 0; i < tagList.tagCount(); i++){ + for(int i = 0; i < slots.length; i++){ NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - if(tagCompound != null && tagCompound.hasKey("id")){ - byte slotIndex = tagCompound.getByte("Slot"); - if(slotIndex >= 0 && slotIndex < slots.length){ - slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); - } - } + slots[i] = tagCompound != null && tagCompound.hasKey("id") ? ItemStack.loadItemStackFromNBT(tagCompound) : null; } } } From 6a80b6d988114520f044bf1799c0c3c25069cf5d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 23:37:01 +0200 Subject: [PATCH 284/322] Two new chieves --- .../mod/achievement/InitAchievements.java | 8 ++--- .../mod/achievement/TheAchievements.java | 32 +++++++++++-------- .../mod/blocks/BlockAtomicReconstructor.java | 2 ++ .../mod/blocks/BlockSmileyCloud.java | 2 +- .../mod/blocks/BlockTreasureChest.java | 2 +- .../mod/booklet/BookletUtils.java | 2 +- .../mod/event/PlayerObtainEvents.java | 7 ++-- .../mod/items/ItemBooklet.java | 2 +- .../assets/actuallyadditions/lang/en_US.lang | 6 ++++ 9 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java index 010958d5f..077190796 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/InitAchievements.java @@ -17,9 +17,9 @@ import net.minecraftforge.common.AchievementPage; import java.util.ArrayList; -public class InitAchievements{ +public final class InitAchievements{ - public static final ArrayList achievementList = new ArrayList(); + public static final ArrayList ACHIEVEMENT_LIST = new ArrayList(); public static int pageNumber; public static AchievementPage theAchievementPage; @@ -27,10 +27,10 @@ public class InitAchievements{ ModUtil.LOGGER.info("Initializing Achievements..."); for(int i = 0; i < TheAchievements.values().length; i++){ - achievementList.add(TheAchievements.values()[i].ach); + ACHIEVEMENT_LIST.add(TheAchievements.values()[i].chieve); } - theAchievementPage = new AchievementPage(StringUtil.localize("achievement.page."+ModUtil.MOD_ID), achievementList.toArray(new Achievement[achievementList.size()])); + theAchievementPage = new AchievementPage(StringUtil.localize("achievement.page."+ModUtil.MOD_ID), ACHIEVEMENT_LIST.toArray(new Achievement[ACHIEVEMENT_LIST.size()])); pageNumber = AchievementPage.getAchievementPages().size(); AchievementPage.registerAchievementPage(theAchievementPage); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java index 91e15beb3..b0a338a99 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/achievement/TheAchievements.java @@ -10,17 +10,19 @@ package de.ellpeck.actuallyadditions.mod.achievement; +import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements.Type; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.stats.Achievement; public enum TheAchievements{ - OPEN_BOOKLET("openBooklet", 0, 0, new ItemStack(InitItems.itemBooklet), null, InitAchievements.Type.MISC), - NAME_SMILEY_CLOUD("nameSmileyCloud", 4, 2, new ItemStack(InitBlocks.blockSmileyCloud), null, InitAchievements.Type.MISC, true), - OPEN_TREASURE_CHEST("openTreasureChest", 1, -3, new ItemStack(InitBlocks.blockTreasureChest), OPEN_BOOKLET, InitAchievements.Type.MISC), + OPEN_BOOKLET("openBooklet", 0, 0, new ItemStack(InitItems.itemBooklet), null, Type.MISC), + NAME_SMILEY_CLOUD("nameSmileyCloud", 4, 2, new ItemStack(InitBlocks.blockSmileyCloud), null, Type.MISC, true), + OPEN_TREASURE_CHEST("openTreasureChest", 1, -3, new ItemStack(InitBlocks.blockTreasureChest), OPEN_BOOKLET, Type.MISC), CRAFT_COAL_GEN("craftCoalGen", -2, 0, new ItemStack(InitBlocks.blockCoalGenerator), OPEN_BOOKLET), CRAFT_LEAF_GEN("craftLeafGen", -3, -2, new ItemStack(InitBlocks.blockLeafGenerator), CRAFT_COAL_GEN), CRAFT_RECONSTRUCTOR("craftReconstructor", -5, 0, new ItemStack(InitBlocks.blockAtomicReconstructor), CRAFT_COAL_GEN), @@ -29,29 +31,31 @@ public enum TheAchievements{ CRAFT_ENERGYFACE("craftEnergyface", 2, -2, new ItemStack(InitBlocks.blockPhantomEnergyface), CRAFT_PHANTOMFACE), CRAFT_LASER_RELAY("craftLaserRelay", -7, -2, new ItemStack(InitBlocks.blockLaserRelay), CRAFT_RECONSTRUCTOR), CRAFT_CRUSHER("craftCrusher", -8, 0, new ItemStack(InitBlocks.blockGrinder), CRAFT_RECONSTRUCTOR), - PICK_UP_COFFEE("pickUpCoffee", -4, 2, new ItemStack(InitItems.itemCoffeeBean), CRAFT_RECONSTRUCTOR, InitAchievements.Type.PICK_UP), - CRAFT_COFFEE_MACHINE("craftCoffeeMachine", -3, 3, new ItemStack(InitBlocks.blockCoffeeMachine), PICK_UP_COFFEE); + PICK_UP_COFFEE("pickUpCoffee", -4, 2, new ItemStack(InitItems.itemCoffeeBean), CRAFT_RECONSTRUCTOR, Type.PICK_UP), + CRAFT_COFFEE_MACHINE("craftCoffeeMachine", -3, 3, new ItemStack(InitBlocks.blockCoffeeMachine), PICK_UP_COFFEE), + OBSCURED("obscured", 5, -5, new ItemStack(Items.RECORD_11), null, Type.MISC, true), + CRAFT_FIREWORK_BOX("craftFireworkBox", -6, -4, new ItemStack(InitBlocks.blockFireworkBox), null, Type.CRAFTING, true); - public final Achievement ach; - public final InitAchievements.Type type; + public final Achievement chieve; + public final Type type; TheAchievements(String name, int x, int y, ItemStack displayStack, TheAchievements hasToHaveBefore){ - this(name, x, y, displayStack, hasToHaveBefore, InitAchievements.Type.CRAFTING, false); + this(name, x, y, displayStack, hasToHaveBefore, Type.CRAFTING, false); } - TheAchievements(String name, int x, int y, ItemStack displayStack, TheAchievements hasToHaveBefore, InitAchievements.Type type, boolean special){ - this.ach = new Achievement("achievement."+ModUtil.MOD_ID+"."+name, ModUtil.MOD_ID+"."+name, x, y, displayStack, hasToHaveBefore == null ? null : hasToHaveBefore.ach); + TheAchievements(String name, int x, int y, ItemStack displayStack, TheAchievements hasToHaveBefore, Type type, boolean special){ + this.chieve = new Achievement("achievement."+ModUtil.MOD_ID+"."+name, ModUtil.MOD_ID+"."+name, x, y, displayStack, hasToHaveBefore == null ? null : hasToHaveBefore.chieve); if(hasToHaveBefore == null){ - this.ach.initIndependentStat(); + this.chieve.initIndependentStat(); } if(special){ - this.ach.setSpecial(); + this.chieve.setSpecial(); } - this.ach.registerStat(); + this.chieve.registerStat(); this.type = type; } - TheAchievements(String name, int x, int y, ItemStack displayStack, TheAchievements hasToHaveBefore, InitAchievements.Type type){ + TheAchievements(String name, int x, int y, ItemStack displayStack, TheAchievements hasToHaveBefore, Type type){ this(name, x, y, displayStack, hasToHaveBefore, type, false); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 3f3aa0c95..8c0d93da1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.api.lens.ILensItem; +import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; @@ -81,6 +82,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud else if(item == Items.RECORD_11){ reconstructor.counter++; reconstructor.markDirty(); + player.addStat(TheAchievements.OBSCURED.chieve); } } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index 9bcb1410e..f7be9284d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -80,7 +80,7 @@ public class BlockSmileyCloud extends BlockContainerBase{ if(tile instanceof TileEntitySmileyCloud){ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.CLOUD.ordinal(), world, pos.getX(), pos.getY(), pos.getZ()); - player.addStat(TheAchievements.NAME_SMILEY_CLOUD.ach); + player.addStat(TheAchievements.NAME_SMILEY_CLOUD.chieve); } } return true; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index 8b0c2832e..da333c60a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -73,7 +73,7 @@ public class BlockTreasureChest extends BlockBase{ this.dropItems(world, pos); world.setBlockToAir(pos); - player.addStat(TheAchievements.OPEN_TREASURE_CHEST.ach); + player.addStat(TheAchievements.OPEN_TREASURE_CHEST.chieve); } return true; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 7d2aa74d1..672c56fb7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -131,7 +131,7 @@ public class BookletUtils{ if(page != null && page.getItemStacksForPage() != null){ for(ItemStack stack : page.getItemStacksForPage()){ if(stack != null){ - for(Achievement achievement : InitAchievements.achievementList){ + for(Achievement achievement : InitAchievements.ACHIEVEMENT_LIST){ if(achievement.theItemStack != null && ItemUtil.areItemsEqual(stack, achievement.theItemStack, true)){ if(pre){ booklet.mc.getTextureManager().bindTexture(GuiBooklet.resLoc); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java index 49822ea79..d0c92ee89 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java @@ -19,7 +19,6 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent; @@ -30,9 +29,9 @@ public class PlayerObtainEvents{ public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){ for(TheAchievements ach : TheAchievements.values()){ if(ach.type == type){ - if(gotten != null && ach.ach.theItemStack != null && gotten.getItem() == ach.ach.theItemStack.getItem()){ - if(gotten.getItemDamage() == ach.ach.theItemStack.getItemDamage()){ - player.addStat(ach.ach, 1); + if(gotten != null && ach.chieve.theItemStack != null && gotten.getItem() == ach.chieve.theItemStack.getItem()){ + if(gotten.getItemDamage() == ach.chieve.theItemStack.getItemDamage()){ + player.addStat(ach.chieve, 1); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 1b832dff9..0a2eb6574 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -79,7 +79,7 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ player.openGui(ActuallyAdditions.instance, GuiHandler.GuiTypes.BOOK.ordinal(), world, (int)player.posX, (int)player.posY, (int)player.posZ); if(!world.isRemote){ - player.addStat(TheAchievements.OPEN_BOOKLET.ach); + player.addStat(TheAchievements.OPEN_BOOKLET.chieve); } return new ActionResult(EnumActionResult.SUCCESS, stack); } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 21c4b1805..a034c7eb8 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -636,6 +636,12 @@ achievement.actuallyadditions.pickUpCoffee.desc=Harvest some coffee achievement.actuallyadditions.craftCoffeeMachine=Addiction in cups achievement.actuallyadditions.craftCoffeeMachine.desc=Craft a Coffee Machine +achievement.actuallyadditions.obscured=§ksome chieve name +achievement.actuallyadditions.obscured.desc=§klolwut y u actually look over meow + +achievement.actuallyadditions.craftFireworkBox=Bang Boom Bang +achievement.actuallyadditions.craftFireworkBox.desc=Craft a Firework Box + #Booklet Recipe Names booklet.actuallyadditions.shapelessRecipe=Shapeless Recipe booklet.actuallyadditions.shapedRecipe=Shaped Recipe From ace2753c86a19f56ee961f0a0fe3b50dc518d89c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 23:39:55 +0200 Subject: [PATCH 285/322] Removed crossover entry and changed dots in booklet main page to - as it was causing weird graphical errors in some modpacks --- .../ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java | 5 ++--- .../ellpeck/actuallyadditions/mod/booklet/BookletUtils.java | 2 +- .../ellpeck/actuallyadditions/mod/booklet/InitBooklet.java | 1 - 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 9afc96cee..f061d87ec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -26,11 +26,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class ActuallyAdditionsAPI{ +public final class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "16"; + public static final String API_VERSION = "17"; public static final List CRUSHER_RECIPES = new ArrayList(); public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); public static final List TREASURE_CHEST_LOOT = new ArrayList(); @@ -55,7 +55,6 @@ public class ActuallyAdditionsAPI{ public static IBookletEntry entryItemsNonRF; public static IBookletEntry entryItemsRF; public static IBookletEntry entryMisc; - public static IBookletEntry entryCrossover; public static IBookletEntry allAndSearch; //These are getting initialized in Actually Additions' PreInit phase diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 672c56fb7..26b8fe0a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -275,7 +275,7 @@ public class BookletUtils{ boolean entryExists = ActuallyAdditionsAPI.BOOKLET_ENTRIES.size() > i-GuiBooklet.INDEX_BUTTONS_OFFSET; button.visible = entryExists; if(entryExists){ - button.displayString = "◦ "+ActuallyAdditionsAPI.BOOKLET_ENTRIES.get(i-GuiBooklet.INDEX_BUTTONS_OFFSET).getLocalizedNameWithFormatting(); + button.displayString = "- "+ActuallyAdditionsAPI.BOOKLET_ENTRIES.get(i-GuiBooklet.INDEX_BUTTONS_OFFSET).getLocalizedNameWithFormatting(); button.chap = null; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 77f21a05f..af5b76e11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -50,7 +50,6 @@ public class InitBooklet{ ActuallyAdditionsAPI.entryItemsNonRF = new BookletEntry("itemsNoRF"); ActuallyAdditionsAPI.entryItemsRF = new BookletEntry("itemsRF").setSpecial(); ActuallyAdditionsAPI.entryMisc = new BookletEntry("misc"); - ActuallyAdditionsAPI.entryCrossover = new BookletEntry("crossover"); ActuallyAdditionsAPI.allAndSearch = new BookletEntryAllSearch("allAndSearch").setSpecial(); } From 262976074e3e0af80df9a29f42680401d8f56b9f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 23:50:38 +0200 Subject: [PATCH 286/322] Massive cleanup --- .../api/ActuallyAdditionsAPI.java | 6 +- .../api/recipe/CompostRecipe.java | 8 +- .../mod/blocks/BlockCoalGenerator.java | 2 - .../mod/blocks/BlockColoredLamp.java | 12 +- .../mod/blocks/BlockCrystal.java | 12 +- .../mod/blocks/BlockItemViewer.java | 1 - .../mod/blocks/BlockOilGenerator.java | 3 - .../mod/blocks/BlockWildPlant.java | 16 +-- .../mod/blocks/InitBlocks.java | 4 +- .../mod/blocks/render/RenderSmileyCloud.java | 2 +- .../mod/booklet/BookletUtils.java | 6 +- .../mod/booklet/GuiBooklet.java | 14 +- .../mod/booklet/GuiBookletStand.java | 2 +- .../mod/booklet/InitBooklet.java | 15 +- .../mod/booklet/button/BookmarkButton.java | 2 +- .../mod/booklet/button/TexturedButton.java | 2 +- .../mod/booklet/chapter/BookletChapter.java | 3 +- .../chapter/BookletChapterCrusher.java | 2 +- .../mod/booklet/page/PageCoffeeRecipe.java | 2 +- .../mod/booklet/page/PageCrafting.java | 2 +- .../mod/booklet/page/PageCrusherRecipe.java | 2 +- .../mod/booklet/page/PageFurnace.java | 2 +- .../mod/booklet/page/PageLinkButton.java | 2 +- .../mod/booklet/page/PageReconstructor.java | 2 +- .../mod/config/ConfigValues.java | 2 +- .../mod/crafting/BlockCrafting.java | 10 +- .../mod/crafting/CrusherCrafting.java | 40 +++--- .../mod/crafting/FoodCrafting.java | 2 +- .../mod/crafting/InitCrafting.java | 2 +- .../mod/crafting/ItemCrafting.java | 18 ++- .../mod/crafting/MiscCrafting.java | 10 +- .../mod/crafting/ToolCrafting.java | 32 ++--- .../mod/creative/CreativeTab.java | 6 +- .../mod/data/PlayerData.java | 2 +- .../actuallyadditions/mod/data/WorldData.java | 16 +-- .../mod/event/InitEvents.java | 2 +- .../mod/event/PlayerConnectionEvents.java | 1 - .../mod/fluids/InitFluids.java | 2 +- .../mod/gen/InitVillager.java | 6 +- .../mod/gen/JamVillagerTradeHandler.java | 16 +-- .../gen/VillageComponentCustomCropField.java | 18 +-- .../mod/gen/VillageComponentJamHouse.java | 18 +-- .../mod/inventory/ContainerBreaker.java | 8 +- .../mod/inventory/ContainerCanolaPress.java | 8 +- .../mod/inventory/ContainerCoalGenerator.java | 8 +- .../mod/inventory/ContainerCoffeeMachine.java | 8 +- .../ContainerDirectionalBreaker.java | 8 +- .../mod/inventory/ContainerDrill.java | 8 +- .../mod/inventory/ContainerDropper.java | 8 +- .../mod/inventory/ContainerEnergizer.java | 8 +- .../mod/inventory/ContainerEnervator.java | 8 +- .../mod/inventory/ContainerFeeder.java | 8 +- .../inventory/ContainerFermentingBarrel.java | 8 +- .../mod/inventory/ContainerFilter.java | 8 +- .../inventory/ContainerFluidCollector.java | 8 +- .../mod/inventory/ContainerFurnaceDouble.java | 8 +- .../mod/inventory/ContainerGiantChest.java | 8 +- .../mod/inventory/ContainerGrinder.java | 8 +- .../mod/inventory/ContainerInputter.java | 8 +- .../ContainerLaserRelayItemWhitelist.java | 8 +- .../mod/inventory/ContainerMiner.java | 8 +- .../mod/inventory/ContainerOilGenerator.java | 8 +- .../mod/inventory/ContainerPhantomPlacer.java | 8 +- .../inventory/ContainerRangedCollector.java | 8 +- .../mod/inventory/ContainerRepairer.java | 8 +- .../mod/inventory/ContainerXPSolidifier.java | 8 +- .../mod/inventory/gui/GuiBreaker.java | 4 +- .../mod/inventory/gui/GuiCanolaPress.java | 4 +- .../mod/inventory/gui/GuiCoalGenerator.java | 4 +- .../mod/inventory/gui/GuiCoffeeMachine.java | 4 +- .../mod/inventory/gui/GuiCrafter.java | 4 +- .../inventory/gui/GuiDirectionalBreaker.java | 4 +- .../mod/inventory/gui/GuiDrill.java | 4 +- .../mod/inventory/gui/GuiDropper.java | 4 +- .../mod/inventory/gui/GuiEnergizer.java | 4 +- .../mod/inventory/gui/GuiEnervator.java | 4 +- .../mod/inventory/gui/GuiFeeder.java | 4 +- .../inventory/gui/GuiFermentingBarrel.java | 4 +- .../mod/inventory/gui/GuiFluidCollector.java | 4 +- .../mod/inventory/gui/GuiFurnaceDouble.java | 4 +- .../mod/inventory/gui/GuiGiantChest.java | 4 +- .../mod/inventory/gui/GuiGrinder.java | 6 +- .../gui/GuiLaserRelayItemWhitelist.java | 5 +- .../mod/inventory/gui/GuiMiner.java | 4 +- .../mod/inventory/gui/GuiOilGenerator.java | 4 +- .../mod/inventory/gui/GuiPhantomPlacer.java | 4 +- .../mod/inventory/gui/GuiRangedCollector.java | 4 +- .../mod/inventory/gui/GuiRepairer.java | 4 +- .../mod/inventory/gui/GuiSmileyCloud.java | 4 +- .../mod/inventory/gui/GuiXPSolidifier.java | 4 +- .../mod/items/InitForeignPaxels.java | 44 +++--- .../mod/items/InitItems.java | 5 +- .../mod/items/ItemCrystal.java | 10 +- .../mod/items/ItemDrill.java | 57 ++++---- .../actuallyadditions/mod/items/ItemDust.java | 12 +- .../mod/items/ItemFilter.java | 1 - .../mod/items/ItemFoods.java | 22 +-- .../actuallyadditions/mod/items/ItemJams.java | 22 +-- .../mod/items/ItemLaserWrench.java | 2 +- .../actuallyadditions/mod/items/ItemMisc.java | 12 +- .../mod/items/ItemPotionRing.java | 18 +-- .../mod/items/ItemWingsOfTheBats.java | 8 +- .../mod/items/lens/LensRecipeHandler.java | 26 ++-- .../mod/items/lens/Lenses.java | 2 +- .../mod/material/InitArmorMaterials.java | 2 +- .../mod/material/InitToolMaterials.java | 2 +- .../mod/misc/BannerHelper.java | 2 +- .../mod/misc/DungeonLoot.java | 2 +- .../mod/misc/LaserRelayConnectionHandler.java | 2 +- .../mod/misc/SoundHandler.java | 2 +- .../mod/misc/cloud/SmileyCloudEasterEggs.java | 6 +- .../mod/misc/special/SpecialRenderInit.java | 8 +- .../mod/nei/NEIBookletRecipe.java | 2 +- .../mod/nei/NEICoffeeMachineRecipe.java | 2 +- .../mod/nei/NEICompostRecipe.java | 2 +- .../mod/nei/NEIFurnaceDoubleRecipe.java | 8 +- .../mod/nei/NEIHairyBallRecipe.java | 2 +- .../mod/nei/NEIReconstructorRecipe.java | 2 +- .../mod/nei/NEITreasureChestRecipe.java | 2 +- .../mod/network/PacketHandler.java | 100 ++++++------- .../mod/ore/InitOreDict.java | 2 +- .../mod/proxy/ClientProxy.java | 2 +- .../mod/recipe/CrusherRecipeRegistry.java | 2 +- .../mod/recipe/FuelHandler.java | 12 +- .../mod/recipe/HairyBallHandler.java | 2 +- .../mod/recipe/TreasureChestHandler.java | 2 +- .../tile/TileEntityAtomicReconstructor.java | 2 - .../mod/tile/TileEntityBase.java | 3 +- .../mod/tile/TileEntityCanolaPress.java | 1 - .../mod/tile/TileEntityCoalGenerator.java | 2 - .../mod/tile/TileEntityDisplayStand.java | 2 +- .../mod/tile/TileEntityEnervator.java | 1 - .../mod/tile/TileEntityFermentingBarrel.java | 1 - .../mod/tile/TileEntityFurnaceSolar.java | 1 - .../mod/tile/TileEntityLaserRelayEnergy.java | 2 +- .../mod/tile/TileEntityLaserRelayItem.java | 2 +- .../TileEntityLaserRelayItemWhitelist.java | 32 ++--- .../mod/tile/TileEntityLeafGenerator.java | 3 - .../mod/tile/TileEntityMiner.java | 1 - .../mod/tile/TileEntityOilGenerator.java | 2 - .../mod/tile/TileEntityPhantomEnergyface.java | 1 - .../mod/tile/TileEntityPhantomLiquiface.java | 6 - .../mod/tile/TileEntityPhantomPlacer.java | 1 - .../mod/tile/TileEntityPlayerInterface.java | 2 +- .../mod/tile/TileEntityXPSolidifier.java | 136 +++++++++--------- .../mod/update/UpdateChecker.java | 2 +- .../actuallyadditions/mod/util/AssetUtil.java | 3 +- .../mod/util/FakePlayerUtil.java | 2 +- .../actuallyadditions/mod/util/ItemUtil.java | 6 +- .../actuallyadditions/mod/util/ModUtil.java | 2 +- .../actuallyadditions/mod/util/PosUtil.java | 2 +- .../mod/util/RecipeUtil.java | 2 +- .../mod/util/StringUtil.java | 2 +- .../actuallyadditions/mod/util/Util.java | 2 +- .../actuallyadditions/mod/util/WorldUtil.java | 1 - .../mod/util/compat/CompatUtil.java | 2 +- .../mod/util/compat/TeslaUtil.java | 11 +- 157 files changed, 603 insertions(+), 662 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index f061d87ec..83c79e6b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -174,7 +174,7 @@ public final class ActuallyAdditionsAPI{ * @param output The output as an ItemStack * @param energyUse The amount of RF used per conversion * @param type The type of lens used for the conversion. To use the default type, use method below. - * Note how this always has to be the same instance of the lens type that the item also has for it to work! + * Note how this always has to be the same INSTANCE of the lens type that the item also has for it to work! */ public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse, LensConversion type){ RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); @@ -191,7 +191,7 @@ public final class ActuallyAdditionsAPI{ * @param output The output's OreDictionary name * @param energyUse The amount of RF used per conversion * @param type The type of lens used for the conversion. To use the default type, use method below - * Note how this always has to be the same instance of the lens type that the item also has for it to work! + * Note how this always has to be the same INSTANCE of the lens type that the item also has for it to work! */ public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse, LensConversion type){ RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); @@ -204,7 +204,7 @@ public final class ActuallyAdditionsAPI{ /** * Adds an item and the way it is modified to the Atomic Reconstructor's color lens. * This also works for blocks, but they have to be in their item form. - * The way it is modified is an instance of IColorLensChanger. When modifying the item, + * The way it is modified is an INSTANCE of IColorLensChanger. When modifying the item, * its modifyItem() method will be called with a stack containing the item. * * @param item The item (or block's item) to add diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java index e98a877b4..cab1f74ee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/recipe/CompostRecipe.java @@ -15,10 +15,10 @@ import net.minecraft.item.ItemStack; public class CompostRecipe{ - public ItemStack input; - public ItemStack output; - public Block inputDisplay; - public Block outputDisplay; + public final ItemStack input; + public final ItemStack output; + public final Block inputDisplay; + public final Block outputDisplay; public CompostRecipe(ItemStack input, Block inputDisplay, ItemStack output, Block outputDisplay){ this.input = input; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java index 1e80dd6d9..213c79544 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoalGenerator.java @@ -16,10 +16,8 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 78911d8b4..13ea5a03f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -41,8 +41,8 @@ import java.util.Random; public class BlockColoredLamp extends BlockBase{ - public static final TheColoredLampColors[] allLampTypes = TheColoredLampColors.values(); - private static final PropertyInteger META = PropertyInteger.create("meta", 0, allLampTypes.length-1); + public static final TheColoredLampColors[] ALL_LAMP_TYPES = TheColoredLampColors.values(); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, ALL_LAMP_TYPES.length-1); public final boolean isOn; public BlockColoredLamp(boolean isOn, String name){ @@ -106,7 +106,7 @@ public class BlockColoredLamp extends BlockBase{ @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allLampTypes.length; j++){ + for(int j = 0; j < ALL_LAMP_TYPES.length; j++){ list.add(new ItemStack(item, 1, j)); } } @@ -123,7 +123,7 @@ public class BlockColoredLamp extends BlockBase{ @Override protected void registerRendering(){ - for(int i = 0; i < allLampTypes.length; i++){ + for(int i = 0; i < ALL_LAMP_TYPES.length; i++){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), META.getName()+"="+i); } } @@ -149,7 +149,7 @@ public class BlockColoredLamp extends BlockBase{ @Override public String getItemStackDisplayName(ItemStack stack){ - if(stack.getItemDamage() >= allLampTypes.length){ + if(stack.getItemDamage() >= ALL_LAMP_TYPES.length){ return StringUtil.BUGGED_ITEM_NAME; } return StringUtil.localize(this.getUnlocalizedName(stack)+".name")+(((BlockColoredLamp)this.block).isOn ? " ("+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".onSuffix.desc")+")" : ""); @@ -158,7 +158,7 @@ public class BlockColoredLamp extends BlockBase{ @Override public String getUnlocalizedName(ItemStack stack){ - return InitBlocks.blockColoredLamp.getUnlocalizedName()+allLampTypes[stack.getItemDamage()].name; + return InitBlocks.blockColoredLamp.getUnlocalizedName()+ALL_LAMP_TYPES[stack.getItemDamage()].name; } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java index c1da939bf..f7165ced5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCrystal.java @@ -30,8 +30,8 @@ import java.util.List; public class BlockCrystal extends BlockBase{ - public static final TheCrystals[] allCrystals = TheCrystals.values(); - private static final PropertyInteger META = PropertyInteger.create("meta", 0, allCrystals.length-1); + public static final TheCrystals[] ALL_CRYSTALS = TheCrystals.values(); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, ALL_CRYSTALS.length-1); public BlockCrystal(String name){ super(Material.ROCK, name); @@ -48,7 +48,7 @@ public class BlockCrystal extends BlockBase{ @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allCrystals.length; j++){ + for(int j = 0; j < ALL_CRYSTALS.length; j++){ list.add(new ItemStack(item, 1, j)); } } @@ -60,14 +60,14 @@ public class BlockCrystal extends BlockBase{ @Override protected void registerRendering(){ - for(int i = 0; i < allCrystals.length; i++){ + for(int i = 0; i < ALL_CRYSTALS.length; i++){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), META.getName()+"="+i); } } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allCrystals.length ? EnumRarity.COMMON : allCrystals[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_CRYSTALS.length ? EnumRarity.COMMON : ALL_CRYSTALS[stack.getItemDamage()].rarity; } @Override @@ -86,7 +86,7 @@ public class BlockCrystal extends BlockBase{ @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allCrystals.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allCrystals[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_CRYSTALS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_CRYSTALS[stack.getItemDamage()].name; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java index fee3a1b7e..f6224fb32 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemViewer.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemViewer; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelayItem; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java index 9bcee2f6e..de01e8298 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockOilGenerator.java @@ -15,12 +15,9 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoalGenerator; import de.ellpeck.actuallyadditions.mod.tile.TileEntityOilGenerator; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 8985d9a97..28e5b8fbe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -40,8 +40,8 @@ import java.util.List; public class BlockWildPlant extends BlockBushBase{ - public static final TheWildPlants[] allWildPlants = TheWildPlants.values(); - private static final PropertyInteger META = PropertyInteger.create("meta", 0, allWildPlants.length-1); + public static final TheWildPlants[] ALL_WILD_PLANTS = TheWildPlants.values(); + private static final PropertyInteger META = PropertyInteger.create("meta", 0, ALL_WILD_PLANTS.length-1); public BlockWildPlant(String name){ super(name); @@ -59,13 +59,13 @@ public class BlockWildPlant extends BlockBushBase{ @SideOnly(Side.CLIENT) public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player){ int metadata = PosUtil.getMetadata(pos, world); - return metadata >= allWildPlants.length ? null : new ItemStack(((BlockPlant)allWildPlants[metadata].wildVersionOf).seedItem); + return metadata >= ALL_WILD_PLANTS.length ? null : new ItemStack(((BlockPlant)ALL_WILD_PLANTS[metadata].wildVersionOf).seedItem); } @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allWildPlants.length; j++){ + for(int j = 0; j < ALL_WILD_PLANTS.length; j++){ list.add(new ItemStack(item, 1, j)); } } @@ -73,7 +73,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ int metadata = PosUtil.getMetadata(state); - return metadata >= allWildPlants.length ? null : allWildPlants[metadata].wildVersionOf.getDrops(world, pos, allWildPlants[metadata].wildVersionOf.getStateFromMeta(7), fortune); + return metadata >= ALL_WILD_PLANTS.length ? null : ALL_WILD_PLANTS[metadata].wildVersionOf.getDrops(world, pos, ALL_WILD_PLANTS[metadata].wildVersionOf.getStateFromMeta(7), fortune); } @Override @@ -93,14 +93,14 @@ public class BlockWildPlant extends BlockBushBase{ @Override protected void registerRendering(){ - for(int i = 0; i < allWildPlants.length; i++){ + for(int i = 0; i < ALL_WILD_PLANTS.length; i++){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), META.getName()+"="+i); } } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allWildPlants.length ? EnumRarity.COMMON : allWildPlants[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_WILD_PLANTS.length ? EnumRarity.COMMON : ALL_WILD_PLANTS[stack.getItemDamage()].rarity; } @Override @@ -119,7 +119,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allWildPlants.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allWildPlants[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_WILD_PLANTS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_WILD_PLANTS[stack.getItemDamage()].name; } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index 772e00750..d46856e69 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -13,11 +13,11 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockStair; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; -import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; import net.minecraft.block.Block; -public class InitBlocks{ +public final class InitBlocks{ public static Block blockCompost; public static Block blockMisc; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index 6b286cd35..dfacd162e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -37,7 +37,7 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ if(theCloud.name != null && !theCloud.name.isEmpty()){ easterEggs: - for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.cloudStuff){ + for(ISmileyCloudEasterEgg cloud : SmileyCloudEasterEggs.CLOUD_STUFF){ for(String triggerName : cloud.getTriggerNames()){ if(triggerName != null && theCloud.name != null){ if(triggerName.equalsIgnoreCase(theCloud.name)){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 26b8fe0a5..5f040b42b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -40,7 +40,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; -public class BookletUtils{ +public final class BookletUtils{ /** * Tries to open a URL in the Browser @@ -75,7 +75,7 @@ public class BookletUtils{ * Draws the Title of the current chapter, current index entry or just "Actually Additions" if neither is present */ public static void drawTitle(GuiBooklet booklet){ - booklet.mc.getTextureManager().bindTexture(GuiBooklet.resLoc); + booklet.mc.getTextureManager().bindTexture(GuiBooklet.RES_LOC); //Upper title booklet.drawTexturedModalRect(booklet.guiLeft+booklet.xSize/2-142/2, booklet.guiTop-12, 0, 240, 142, 12); //Lower title @@ -134,7 +134,7 @@ public class BookletUtils{ for(Achievement achievement : InitAchievements.ACHIEVEMENT_LIST){ if(achievement.theItemStack != null && ItemUtil.areItemsEqual(stack, achievement.theItemStack, true)){ if(pre){ - booklet.mc.getTextureManager().bindTexture(GuiBooklet.resLoc); + booklet.mc.getTextureManager().bindTexture(GuiBooklet.RES_LOC); booklet.drawTexturedModalRect(booklet.guiLeft+booklet.xSize+1, booklet.guiTop-18, 166, 154, 22, 21); return; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 195ca0f58..70b5c63bc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -57,10 +57,10 @@ import java.util.List; @SideOnly(Side.CLIENT) public class GuiBooklet extends GuiScreen implements IBookletGui{ - public static final ResourceLocation resLoc = AssetUtil.getBookletGuiLocation("guiBooklet"); - public static final ResourceLocation resLocHalloween = AssetUtil.getBookletGuiLocation("guiBookletHalloween"); - public static final ResourceLocation resLocChristmas = AssetUtil.getBookletGuiLocation("guiBookletChristmas"); - public static final ResourceLocation resLocValentine = AssetUtil.getBookletGuiLocation("guiBookletValentinesDay"); + public static final ResourceLocation RES_LOC = AssetUtil.getBookletGuiLocation("guiBooklet"); + public static final ResourceLocation RES_LOC_HALLOWEEN = AssetUtil.getBookletGuiLocation("guiBookletHalloween"); + public static final ResourceLocation RES_LOC_CHRISTMAS = AssetUtil.getBookletGuiLocation("guiBookletChristmas"); + public static final ResourceLocation RES_LOC_VALENTINE = AssetUtil.getBookletGuiLocation("guiBookletValentinesDay"); public static final int CHAPTER_BUTTONS_AMOUNT = 13; public static final int INDEX_BUTTONS_OFFSET = 3; @@ -88,10 +88,10 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public GuiButton buttonPatreon; public GuiButton buttonViewOnline; public GuiTextField searchField; + public boolean changedPageSinceOpen; private int ticksElapsed; private boolean mousePressed; private int hisNameIsAt; - public boolean changedPageSinceOpen; public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){ this.xSize = 146; @@ -128,12 +128,12 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ //Draws the Background GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(ClientProxy.jingleAllTheWay ? resLocChristmas : (ClientProxy.pumpkinBlurPumpkinBlur ? resLocHalloween : (ClientProxy.bulletForMyValentine ? resLocValentine : resLoc))); + this.mc.getTextureManager().bindTexture(ClientProxy.jingleAllTheWay ? RES_LOC_CHRISTMAS : (ClientProxy.pumpkinBlurPumpkinBlur ? RES_LOC_HALLOWEEN : (ClientProxy.bulletForMyValentine ? RES_LOC_VALENTINE : RES_LOC))); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); //Draws the search bar if(this.currentEntrySet.getCurrentEntry() instanceof BookletEntryAllSearch && this.currentEntrySet.getCurrentChapter() == null){ - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft+146, this.guiTop+160, 146, 80, 70, 14); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java index 03abe74d3..c5513f546 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBookletStand.java @@ -26,7 +26,7 @@ public class GuiBookletStand extends GuiBooklet{ private GuiButton buttonSetPage; - private TileEntityBookletStand theStand; + private final TileEntityBookletStand theStand; public GuiBookletStand(TileEntityBase theStand){ super(null, false, false); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index af5b76e11..11f83c78e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -34,11 +34,10 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; -import net.minecraftforge.fml.common.Loader; import java.util.ArrayList; -public class InitBooklet{ +public final class InitBooklet{ public static BookletChapter chapterIntro; @@ -62,7 +61,7 @@ public class InitBooklet{ chapterIntro = new BookletChapter("intro", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageTextOnly(3)); new BookletChapter("videoGuide", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.YOUTUBE_ICON.ordinal()), new PageLinkButton(1, "https://www.youtube.com/watch?v=fhjz0Ew56pM")).setImportant(); new BookletChapter("bookTutorial", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemBooklet), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, ItemCrafting.recipeBook)); - new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.recipesCrystals).setNoText(), new PageCrafting(8, MiscCrafting.recipesCrystalBlocks).setNoText(), new PageReconstructor(9, LensRecipeHandler.mainPageRecipes).setNoText()).setSpecial(); + new BookletChapter("crystals", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockAtomicReconstructor), new PageTextOnly(1).addTextReplacement("", TileEntityAtomicReconstructor.ENERGY_USE), new PageTextOnly(2), new PageTextOnly(3), new PagePicture(4, "pageAtomicReconstructor", 0).setNoText(), new PageTextOnly(5), new PageCrafting(6, BlockCrafting.recipeAtomicReconstructor).setPageStacksWildcard(), new PageCrafting(7, MiscCrafting.RECIPES_CRYSTALS).setNoText(), new PageCrafting(8, MiscCrafting.RECIPES_CRYSTAL_BLOCKS).setNoText(), new PageReconstructor(9, LensRecipeHandler.MAIN_PAGE_RECIPES).setNoText()).setSpecial(); new BookletChapter("coalGen", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitBlocks.blockCoalGenerator), new PageCrafting(1, BlockCrafting.recipeCoalGen).addTextReplacement("", TileEntityCoalGenerator.PRODUCE).setPageStacksWildcard()); new BookletChapter("craftingIngs", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.COIL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeCoil).setNoText(), new PageCrafting(3, ItemCrafting.recipeCoilAdvanced).setNoText(), new PageCrafting(4, BlockCrafting.recipeCase).setNoText(), new PageCrafting(5, BlockCrafting.recipeEnderPearlBlock).setNoText(), new PageCrafting(6, BlockCrafting.recipeEnderCase).setNoText(), new PageCrafting(7, ItemCrafting.recipeRing).setNoText(), new PageCrafting(8, ItemCrafting.recipeKnifeHandle).setNoText(), new PageCrafting(9, ItemCrafting.recipeKnifeBlade).setNoText(), new PageCrafting(10, ItemCrafting.recipeKnife).setNoText(), new PageCrafting(11, ItemCrafting.recipeDough).setNoText(), new PageCrafting(12, ItemCrafting.recipeRiceDough).setNoText(), new PageCrafting(13, BlockCrafting.recipeIronCase).setNoText()).setImportant(); new BookletChapter("rf", ActuallyAdditionsAPI.entryGettingStarted, new ItemStack(Items.REDSTONE), new PageTextOnly(1)); @@ -78,7 +77,7 @@ public class InitBooklet{ ArrayList lampPages = new ArrayList(); lampPages.add(new PageTextOnly(lampPages.size()+1)); lampPages.add(new PageCrafting(lampPages.size()+1, BlockCrafting.recipePowerer).setNoText()); - for(IRecipe recipe : BlockCrafting.recipesLamps){ + for(IRecipe recipe : BlockCrafting.RECIPES_LAMPS){ lampPages.add(new PageCrafting(lampPages.size()+1, recipe).setNoText()); } new BookletChapter("lamps", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockColoredLampOn, 1, TheColoredLampColors.GREEN.ordinal()), lampPages.toArray(new BookletPage[lampPages.size()])); @@ -103,7 +102,7 @@ public class InitBooklet{ new BookletChapter("greenhouseGlass", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGreenhouseGlass), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeGlass)); new BookletChapter("fishingNet", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFishingNet), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFisher).setNoText()); new BookletChapter("feeder", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFeeder), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFeeder).setNoText()); - new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemFertilizer)), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.recipesMashedFood)); + new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemFertilizer)), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.RECIPES_MASHED_FOOD)); new BookletChapter("crate", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGiantChest), new PageCrafting(1, BlockCrafting.recipeCrate), new PageCrafting(2, ItemCrafting.recipeCrateKeeper), new PageCrafting(3, ItemCrafting.recipeChestToCrateUpgrade)); new BookletChapter("rangedCollector", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockRangedCollector), new PageTextOnly(1).addTextReplacement("", TileEntityRangedCollector.RANGE), new PageCrafting(2, BlockCrafting.recipeRangedCollector).setNoText()); @@ -133,7 +132,7 @@ public class InitBooklet{ new BookletChapter("leafBlower", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemLeafBlowerAdvanced), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLeafBlower).setNoText(), new PageCrafting(3, ItemCrafting.recipeLeafBlowerAdvanced).setNoText()).setImportant(); ArrayList aiotPages = new ArrayList(); aiotPages.add(new PageTextOnly(aiotPages.size()+1)); - for(IRecipe recipe : ToolCrafting.recipesPaxels){ + for(IRecipe recipe : ToolCrafting.RECIPES_PAXELS){ aiotPages.add(new PageCrafting(aiotPages.size()+1, recipe).setNoText().setPageStacksWildcard()); } new BookletChapter("aiots", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.emeraldPaxel), aiotPages.toArray(new BookletPage[aiotPages.size()])).setImportant(); @@ -142,7 +141,7 @@ public class InitBooklet{ ArrayList potionRingPages = new ArrayList(); potionRingPages.add(new PageTextOnly(potionRingPages.size()+1)); - for(IRecipe recipe : ItemCrafting.recipesPotionRings){ + for(IRecipe recipe : ItemCrafting.RECIPES_POTION_RINGS){ potionRingPages.add(new PageCrafting(potionRingPages.size()+1, recipe).setNoText()); } new BookletChapter("potionRings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemPotionRing), potionRingPages.toArray(new BookletPage[potionRingPages.size()])); @@ -150,7 +149,7 @@ public class InitBooklet{ new BookletChapter("itemFilter", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitItems.itemFilter), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeFilter).setNoText()).setImportant(); //RF Using Items - new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(3, ItemCrafting.recipesDrillColoring), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); + new BookletChapter("drill", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemDrill, 1, TheColoredLampColors.LIGHT_BLUE.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeDrill).setNoText(), new PageCrafting(3, ItemCrafting.RECIPES_DRILL_COLORING), new PageCrafting(4, ItemCrafting.recipeDrillCore).setNoText(), new PageCrafting(5, ItemCrafting.recipeDrillSpeedI).setNoText(), new PageCrafting(6, ItemCrafting.recipeDrillSpeedII).setNoText(), new PageCrafting(7, ItemCrafting.recipeDrillSpeedIII).setNoText(), new PageCrafting(8, ItemCrafting.recipeDrillFortuneI).setNoText(), new PageCrafting(9, ItemCrafting.recipeDrillFortuneII).setNoText(), new PageCrafting(10, ItemCrafting.recipeDrillSilk).setNoText(), new PageCrafting(11, ItemCrafting.recipeDrillThree).setNoText(), new PageCrafting(12, ItemCrafting.recipeDrillFive).setNoText(), new PageCrafting(13, ItemCrafting.recipeDrillPlacing).setNoText()).setSpecial(); new BookletChapter("staff", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemTeleStaff), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeStaff).setNoText()).setImportant(); new BookletChapter("magnetRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemMagnetRing), new PageCrafting(1, ItemCrafting.recipeMagnetRing)); new BookletChapter("growthRing", ActuallyAdditionsAPI.entryItemsRF, new ItemStack(InitItems.itemGrowthRing), new PageCrafting(1, ItemCrafting.recipeGrowthRing)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 9f45b0b36..9bc03fc12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -57,7 +57,7 @@ public class BookmarkButton extends GuiButton{ @Override public void drawButton(Minecraft minecraft, int x, int y){ if(this.visible){ - minecraft.getTextureManager().bindTexture(GuiBooklet.resLoc); + minecraft.getTextureManager().bindTexture(GuiBooklet.RES_LOC); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.hovered = x >= this.xPosition && y >= this.yPosition && x < this.xPosition+this.width && y < this.yPosition+this.height; int k = this.getHoverState(this.hovered); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java index eea52d598..d106deb9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/TexturedButton.java @@ -46,7 +46,7 @@ public class TexturedButton extends GuiButton{ @Override public void drawButton(Minecraft minecraft, int x, int y){ if(this.visible){ - minecraft.getTextureManager().bindTexture(GuiBooklet.resLoc); + minecraft.getTextureManager().bindTexture(GuiBooklet.RES_LOC); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.hovered = x >= this.xPosition && y >= this.yPosition && x < this.xPosition+this.width && y < this.yPosition+this.height; int k = this.getHoverState(this.hovered); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index a784e0745..306b8d6ab 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -77,8 +77,7 @@ public class BookletChapter implements IBookletChapter{ this.color = TextFormatting.DARK_GREEN; } - public BookletChapter setSpecial(){ + public void setSpecial(){ this.color = TextFormatting.DARK_PURPLE; - return this; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java index f3999a35b..8307d6262 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapterCrusher.java @@ -30,7 +30,7 @@ public class BookletChapterCrusher extends BookletChapter{ ArrayList allPages = new ArrayList(); allPages.addAll(Arrays.asList(pages)); - for(CrusherRecipe recipe : CrusherCrafting.miscRecipes){ + for(CrusherRecipe recipe : CrusherCrafting.MISC_RECIPES){ allPages.add(new PageCrusherRecipe(allPages.size()+1, recipe).setNoText()); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java index f80b9b786..02aaaff39 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCoffeeRecipe.java @@ -37,7 +37,7 @@ public class PageCoffeeRecipe extends BookletPageAA{ @Override @SideOnly(Side.CLIENT) public void renderPre(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ - Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.resLocValentine : GuiBooklet.resLoc); + Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.RES_LOC_VALENTINE : GuiBooklet.RES_LOC); gui.drawRect(gui.getGuiLeft()+19, gui.getGuiTop()+20, 146, 94, 99, 60); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index b0e6bcdeb..59227005f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -52,7 +52,7 @@ public class PageCrafting extends BookletPageAA{ @SideOnly(Side.CLIENT) public void renderPre(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ if(this.recipes[this.recipePos] != null){ - Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.resLocValentine : GuiBooklet.resLoc); + Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.RES_LOC_VALENTINE : GuiBooklet.RES_LOC); gui.drawRect(gui.getGuiLeft()+27, gui.getGuiTop()+20, 146, 20, 99, 60); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index c841f8596..b2e9df9fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -43,7 +43,7 @@ public class PageCrusherRecipe extends BookletPageAA{ @SideOnly(Side.CLIENT) public void renderPre(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ if(this.recipe != null){ - Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.resLocValentine : GuiBooklet.resLoc); + Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.RES_LOC_VALENTINE : GuiBooklet.RES_LOC); gui.drawRect(gui.getGuiLeft()+37, gui.getGuiTop()+20, 60, 180, 60, 60); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index 93018eaa6..e2c1779ac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -46,7 +46,7 @@ public class PageFurnace extends BookletPageAA{ @SideOnly(Side.CLIENT) public void renderPre(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ if(this.input != null || this.getInputForOutput(this.result) != null){ - Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.resLocValentine : GuiBooklet.resLoc); + Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.RES_LOC_VALENTINE : GuiBooklet.RES_LOC); gui.drawRect(gui.getGuiLeft()+37, gui.getGuiTop()+20, 0, 180, 60, 60); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java index 8bf1cd4b9..158d6ce7f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageLinkButton.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.booklet.BookletUtils; public class PageLinkButton extends PageButton{ - private String link; + private final String link; public PageLinkButton(int id, String link){ super(id); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index 8e78062a9..5dafb1c49 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -47,7 +47,7 @@ public class PageReconstructor extends BookletPageAA{ @SideOnly(Side.CLIENT) public void renderPre(IBookletGui gui, int mouseX, int mouseY, int ticksElapsed, boolean mousePressed){ if(this.recipes[this.recipePos] != null){ - Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.resLocValentine : GuiBooklet.resLoc); + Minecraft.getMinecraft().getTextureManager().bindTexture(ClientProxy.bulletForMyValentine ? GuiBooklet.RES_LOC_VALENTINE : GuiBooklet.RES_LOC); gui.drawRect(gui.getGuiLeft()+37, gui.getGuiTop()+20, 188, 154, 60, 60); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java index 193a979fa..070f7552b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigValues.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.config; import de.ellpeck.actuallyadditions.mod.config.values.*; import net.minecraftforge.common.config.Configuration; -public class ConfigValues{ +public final class ConfigValues{ public static void defineConfigValues(Configuration config){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index d4598cf78..bc7436b75 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -27,9 +27,9 @@ import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; -public class BlockCrafting{ +public final class BlockCrafting{ - public static final IRecipe[] recipesLamps = new IRecipe[BlockColoredLamp.allLampTypes.length]; + public static final IRecipe[] RECIPES_LAMPS = new IRecipe[BlockColoredLamp.ALL_LAMP_TYPES.length]; public static IRecipe recipeSmileyCloud; public static IRecipe recipePhantomface; public static IRecipe recipeLiquiface; @@ -704,14 +704,14 @@ public class BlockCrafting{ } if(ConfigCrafting.LAMPS.isEnabled()){ - for(int i = 0; i < BlockColoredLamp.allLampTypes.length; i++){ + for(int i = 0; i < BlockColoredLamp.ALL_LAMP_TYPES.length; i++){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockColoredLamp, 6, i), "GCG", "DQD", "GCG", 'C', new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 'G', "glowstone", - 'D', "dye"+BlockColoredLamp.allLampTypes[i].name, + 'D', "dye"+BlockColoredLamp.ALL_LAMP_TYPES[i].name, 'Q', new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()))); - recipesLamps[i] = RecipeUtil.lastIRecipe(); + RECIPES_LAMPS[i] = RecipeUtil.lastIRecipe(); } GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockLampPowerer, 4), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java index 36d3c8b81..2ed31929c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/CrusherCrafting.java @@ -24,9 +24,9 @@ import net.minecraft.item.ItemStack; import java.util.ArrayList; -public class CrusherCrafting{ +public final class CrusherCrafting{ - public static final ArrayList miscRecipes = new ArrayList(); + public static final ArrayList MISC_RECIPES = new ArrayList(); public static CrusherRecipe recipeIronHorseArmor; public static CrusherRecipe recipeGoldHorseArmor; public static CrusherRecipe recipeDiamondHorseArmor; @@ -35,38 +35,38 @@ public class CrusherCrafting{ ModUtil.LOGGER.info("Initializing Crusher Recipes..."); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.BONE), new ItemStack(Items.DYE, 6, 15)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Items.REEDS), new ItemStack(Items.SUGAR, 3)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.YELLOW_FLOWER), new ItemStack(Items.DYE, 3, 11)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 0), new ItemStack(Items.DYE, 3, 1)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 1), new ItemStack(Items.DYE, 3, 12)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 2), new ItemStack(Items.DYE, 3, 13)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 3), new ItemStack(Items.DYE, 3, 7)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 4), new ItemStack(Items.DYE, 3, 1)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 5), new ItemStack(Items.DYE, 3, 14)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 6), new ItemStack(Items.DYE, 3, 7)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 7), new ItemStack(Items.DYE, 3, 9)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.RED_FLOWER, 1, 8), new ItemStack(Items.DYE, 3, 7)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 0), new ItemStack(Items.DYE, 4, 11)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 1), new ItemStack(Items.DYE, 4, 13)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 4), new ItemStack(Items.DYE, 4, 1)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.DOUBLE_PLANT, 1, 5), new ItemStack(Items.DYE, 4, 9)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe("oreRedstone", "dustRedstone", 10); ActuallyAdditionsAPI.addCrusherRecipe("oreLapis", "gemLapis", 12); @@ -79,10 +79,10 @@ public class CrusherCrafting{ ActuallyAdditionsAPI.addCrusherRecipe("stone", "cobblestone", 1); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.SUGAR, 2)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe(new ItemStack(Blocks.GLOWSTONE), new ItemStack(Items.GLOWSTONE_DUST, 4)); - miscRecipes.add(RecipeUtil.lastCrusherRecipe()); + MISC_RECIPES.add(RecipeUtil.lastCrusherRecipe()); ActuallyAdditionsAPI.addCrusherRecipe("oreNickel", "dustNickel", 2, "dustPlatinum", 1, 15); ActuallyAdditionsAPI.addCrusherRecipe("oreIron", "dustIron", 2, "dustGold", 1, 20); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java index 9ae14c044..cbb4d4f10 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/FoodCrafting.java @@ -24,7 +24,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; -public class FoodCrafting{ +public final class FoodCrafting{ public static IRecipe recipePizza; public static IRecipe recipeHamburger; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java index 5f11ad479..b1146d5fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java @@ -17,7 +17,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -public class InitCrafting{ +public final class InitCrafting{ public static void init(){ ModUtil.LOGGER.info("Initializing Crafting Recipes..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java index e70bb06b5..2ad63e56a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ItemCrafting.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigCrafting; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.*; -import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.IGrowable; @@ -28,7 +27,6 @@ import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.common.IPlantable; -import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapedOreRecipe; @@ -36,11 +34,11 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; import java.util.ArrayList; -public class ItemCrafting{ +public final class ItemCrafting{ - public static final ArrayList recipesMashedFood = new ArrayList(); - public static final ArrayList recipesDrillColoring = new ArrayList(); - public static final ArrayList recipesPotionRings = new ArrayList(); + public static final ArrayList RECIPES_MASHED_FOOD = new ArrayList(); + public static final ArrayList RECIPES_DRILL_COLORING = new ArrayList(); + public static final ArrayList RECIPES_POTION_RINGS = new ArrayList(); public static IRecipe recipePhantomConnector; public static IRecipe recipeCoil; public static IRecipe recipeCoilAdvanced; @@ -195,7 +193,7 @@ public class ItemCrafting{ for(int i = 0; i < 16; i++){ if(i != TheColoredLampColors.LIGHT_BLUE.ordinal()){ GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemDrill, 1, i), lightBlueDrill.copy(), "dye"+TheColoredLampColors.values()[i].name)); - recipesDrillColoring.add(RecipeUtil.lastIRecipe()); + RECIPES_DRILL_COLORING.add(RecipeUtil.lastIRecipe()); } } } @@ -552,9 +550,9 @@ public class ItemCrafting{ public static void addRingRecipeWithStack(ItemStack mainStack, int meta){ GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRing, 1, meta), mainStack, mainStack, mainStack, mainStack, new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), new ItemStack(Items.NETHER_WART), new ItemStack(Items.POTIONITEM), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.RING.ordinal())); - recipesPotionRings.add(RecipeUtil.lastIRecipe()); + RECIPES_POTION_RINGS.add(RecipeUtil.lastIRecipe()); GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemPotionRingAdvanced, 1, meta), new ItemStack(InitItems.itemPotionRing, 1, meta), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal())); - recipesPotionRings.add(RecipeUtil.lastIRecipe()); + RECIPES_POTION_RINGS.add(RecipeUtil.lastIRecipe()); } public static void initMashedFoodRecipes(){ @@ -564,7 +562,7 @@ public class ItemCrafting{ if(!isBlacklisted(item)){ ItemStack ingredient = new ItemStack(item, 1, Util.WILDCARD); GameRegistry.addShapelessRecipe(new ItemStack(InitItems.itemMisc, 8, TheMiscItems.MASHED_FOOD.ordinal()), ingredient, ingredient, ingredient, ingredient, new ItemStack(InitItems.itemKnife, 1, Util.WILDCARD)); - recipesMashedFood.add(RecipeUtil.lastIRecipe()); + RECIPES_MASHED_FOOD.add(RecipeUtil.lastIRecipe()); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index 7d21de824..d0f545007 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -24,10 +24,10 @@ import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; -public class MiscCrafting{ +public final class MiscCrafting{ - public static final IRecipe[] recipesCrystals = new IRecipe[TheCrystals.values().length]; - public static final IRecipe[] recipesCrystalBlocks = new IRecipe[TheCrystals.values().length]; + public static final IRecipe[] RECIPES_CRYSTALS = new IRecipe[TheCrystals.values().length]; + public static final IRecipe[] RECIPES_CRYSTAL_BLOCKS = new IRecipe[TheCrystals.values().length]; public static void init(){ @@ -36,9 +36,9 @@ public class MiscCrafting{ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockCrystal, 1, i), "XXX", "XXX", "XXX", 'X', new ItemStack(InitItems.itemCrystal, 1, i))); - recipesCrystalBlocks[i] = RecipeUtil.lastIRecipe(); + RECIPES_CRYSTAL_BLOCKS[i] = RecipeUtil.lastIRecipe(); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemCrystal, 9, i), new ItemStack(InitBlocks.blockCrystal, 1, i))); - recipesCrystals[i] = RecipeUtil.lastIRecipe(); + RECIPES_CRYSTALS[i] = RecipeUtil.lastIRecipe(); } //Dough diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java index f86e9443f..d0974ae16 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/ToolCrafting.java @@ -26,9 +26,9 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; import java.util.ArrayList; -public class ToolCrafting{ +public final class ToolCrafting{ - public static final ArrayList recipesPaxels = new ArrayList(); + public static final ArrayList RECIPES_PAXELS = new ArrayList(); public static void init(){ @@ -61,56 +61,56 @@ public class ToolCrafting{ new ItemStack(Items.WOODEN_SHOVEL), new ItemStack(Items.WOODEN_SWORD), new ItemStack(Items.WOODEN_HOE))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.stonePaxel), new ItemStack(Items.STONE_AXE), new ItemStack(Items.STONE_PICKAXE), new ItemStack(Items.STONE_SHOVEL), new ItemStack(Items.STONE_SWORD), new ItemStack(Items.STONE_HOE))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.ironPaxel), new ItemStack(Items.IRON_AXE), new ItemStack(Items.IRON_PICKAXE), new ItemStack(Items.IRON_SHOVEL), new ItemStack(Items.IRON_SWORD), new ItemStack(Items.IRON_HOE))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.goldPaxel), new ItemStack(Items.GOLDEN_AXE), new ItemStack(Items.GOLDEN_PICKAXE), new ItemStack(Items.GOLDEN_SHOVEL), new ItemStack(Items.GOLDEN_SWORD), new ItemStack(Items.GOLDEN_HOE))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.diamondPaxel), new ItemStack(Items.DIAMOND_AXE), new ItemStack(Items.DIAMOND_PICKAXE), new ItemStack(Items.DIAMOND_SHOVEL), new ItemStack(Items.DIAMOND_SWORD), new ItemStack(Items.DIAMOND_HOE))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.emeraldPaxel), new ItemStack(InitItems.itemAxeEmerald), new ItemStack(InitItems.itemPickaxeEmerald), new ItemStack(InitItems.itemSwordEmerald), new ItemStack(InitItems.itemShovelEmerald), new ItemStack(InitItems.itemHoeEmerald))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.obsidianPaxel), new ItemStack(InitItems.itemAxeObsidian), new ItemStack(InitItems.itemPickaxeObsidian), new ItemStack(InitItems.itemSwordObsidian), new ItemStack(InitItems.itemShovelObsidian), new ItemStack(InitItems.itemHoeObsidian))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.quartzPaxel), new ItemStack(InitItems.itemAxeQuartz), new ItemStack(InitItems.itemPickaxeQuartz), new ItemStack(InitItems.itemSwordQuartz), new ItemStack(InitItems.itemShovelQuartz), new ItemStack(InitItems.itemHoeQuartz))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalRed), new ItemStack(InitItems.itemAxeCrystalRed), @@ -118,42 +118,42 @@ public class ToolCrafting{ new ItemStack(InitItems.itemSwordCrystalRed), new ItemStack(InitItems.itemShovelCrystalRed), new ItemStack(InitItems.itemHoeCrystalRed))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalGreen), new ItemStack(InitItems.itemAxeCrystalGreen), new ItemStack(InitItems.itemPickaxeCrystalGreen), new ItemStack(InitItems.itemSwordCrystalGreen), new ItemStack(InitItems.itemShovelCrystalGreen), new ItemStack(InitItems.itemHoeCrystalGreen))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalBlue), new ItemStack(InitItems.itemAxeCrystalBlue), new ItemStack(InitItems.itemPickaxeCrystalBlue), new ItemStack(InitItems.itemSwordCrystalBlue), new ItemStack(InitItems.itemShovelCrystalBlue), new ItemStack(InitItems.itemHoeCrystalBlue))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalLightBlue), new ItemStack(InitItems.itemAxeCrystalLightBlue), new ItemStack(InitItems.itemPickaxeCrystalLightBlue), new ItemStack(InitItems.itemSwordCrystalLightBlue), new ItemStack(InitItems.itemShovelCrystalLightBlue), new ItemStack(InitItems.itemHoeCrystalLightBlue))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalBlack), new ItemStack(InitItems.itemAxeCrystalBlack), new ItemStack(InitItems.itemPickaxeCrystalBlack), new ItemStack(InitItems.itemSwordCrystalBlack), new ItemStack(InitItems.itemShovelCrystalBlack), new ItemStack(InitItems.itemHoeCrystalBlack))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(InitItems.itemPaxelCrystalWhite), new ItemStack(InitItems.itemAxeCrystalWhite), new ItemStack(InitItems.itemPickaxeCrystalWhite), new ItemStack(InitItems.itemSwordCrystalWhite), new ItemStack(InitItems.itemShovelCrystalWhite), new ItemStack(InitItems.itemHoeCrystalWhite))); - recipesPaxels.add(RecipeUtil.lastIRecipe()); + RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 4547e4974..a8b23940a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -28,7 +28,7 @@ import java.util.List; public class CreativeTab extends CreativeTabs{ - public static final CreativeTab instance = new CreativeTab(); + public static final CreativeTab INSTANCE = new CreativeTab(); private List list; public CreativeTab(){ @@ -310,13 +310,13 @@ public class CreativeTab extends CreativeTabs{ public void add(Item item){ if(item != null){ - item.getSubItems(item, instance, this.list); + item.getSubItems(item, INSTANCE, this.list); } } public void add(Block block){ if(block != null){ - block.getSubBlocks(new ItemStack(block).getItem(), instance, this.list); + block.getSubBlocks(new ItemStack(block).getItem(), INSTANCE, this.list); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java index ef93eda0d..2c4f5b8d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/PlayerData.java @@ -16,7 +16,7 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; import java.util.UUID; -public class PlayerData{ +public final class PlayerData{ public static PlayerSave getDataFromPlayer(EntityPlayer player){ ArrayList data = WorldData.PLAYER_SAVE_DATA; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java index 7cc6515cb..7735892aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/data/WorldData.java @@ -34,10 +34,10 @@ public class WorldData{ public static final String DATA_TAG = ModUtil.MOD_ID+"data"; public static final ArrayList PLAYER_SAVE_DATA = new ArrayList(); - private static Map worldData = new ConcurrentHashMap(); + private static final Map WORLD_DATA = new ConcurrentHashMap(); public final ConcurrentSet laserRelayNetworks = new ConcurrentSet(); - private ISaveHandler handler; - private int dimension; + private final ISaveHandler handler; + private final int dimension; public WorldData(ISaveHandler handler, int dimension){ this.handler = handler; @@ -46,13 +46,13 @@ public class WorldData{ public static WorldData getDataForWorld(World world){ int dim = world.provider.getDimension(); - WorldData data = worldData.get(dim); + WorldData data = WORLD_DATA.get(dim); if(data == null){ data = new WorldData(null, dim); if(world.isRemote){ - worldData.put(dim, data); + WORLD_DATA.put(dim, data); ModUtil.LOGGER.info("Creating temporary WorldData for world "+dim+" on the client!"); } else{ @@ -66,7 +66,7 @@ public class WorldData{ public static void load(World world){ if(!world.isRemote && world instanceof WorldServer){ WorldData data = new WorldData(new WorldSpecificSaveHandler((WorldServer)world, world.getSaveHandler()), world.provider.getDimension()); - worldData.put(data.dimension, data); + WORLD_DATA.put(data.dimension, data); try{ File dataFile = data.handler.getMapFileFromName(DATA_TAG+data.dimension); @@ -92,7 +92,7 @@ public class WorldData{ public static void save(World world){ if(!world.isRemote){ - WorldData data = worldData.get(world.provider.getDimension()); + WorldData data = WORLD_DATA.get(world.provider.getDimension()); if(data != null && data.handler != null){ try{ File dataFile = data.handler.getMapFileFromName(DATA_TAG+data.dimension); @@ -122,7 +122,7 @@ public class WorldData{ public static void unload(World world){ if(!world.isRemote){ - worldData.remove(world.provider.getDimension()); + WORLD_DATA.remove(world.provider.getDimension()); ModUtil.LOGGER.info("Unloading WorldData for world "+world.provider.getDimension()+"!"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java index 6c5b16eed..57f8bb81c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java @@ -18,7 +18,7 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Loader; -public class InitEvents{ +public final class InitEvents{ public static void init(){ ModUtil.LOGGER.info("Initializing Events..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java index f385ce589..8e1484145 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.data.PlayerData; import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java index 98f73541d..9e4130746 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/fluids/InitFluids.java @@ -19,7 +19,7 @@ import net.minecraftforge.fluids.FluidRegistry; import java.util.Locale; -public class InitFluids{ +public final class InitFluids{ public static Fluid fluidCanolaOil; public static Fluid fluidOil; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java index 42911866c..ddacb3eff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/InitVillager.java @@ -15,7 +15,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraftforge.fml.common.registry.VillagerRegistry; -public class InitVillager{ +public final class InitVillager{ public static final String JAM_HOUSE_CHEST_NAME = ModUtil.MOD_ID+".jamHouseChest"; @@ -33,8 +33,8 @@ public class InitVillager{ private static void initJamVillagePart(){ //TODO Fix villager /*int jamID = ConfigIntValues.JAM_VILLAGER_ID.getValue(); - VillagerRegistry.instance().registerVillagerId(jamID); - VillagerRegistry.instance().registerVillageTradeHandler(jamID, new JamVillagerTradeHandler()); + VillagerRegistry.INSTANCE().registerVillagerId(jamID); + VillagerRegistry.INSTANCE().registerVillageTradeHandler(jamID, new JamVillagerTradeHandler()); ChestGenHooks jamHouseChest = ChestGenHooks.getInfo(JAM_HOUSE_CHEST_NAME); jamHouseChest.setMin(5); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java index a02677ed7..f8f0ab7e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/JamVillagerTradeHandler.java @@ -50,17 +50,17 @@ public class JamVillagerTradeHandler{ //@Override public void manipulateTradesForVillager(EntityVillager villager, MerchantRecipeList recipeList, Random rand){ - for(int trade = 0; trade < trades.size(); trade++){ - for(int want = 0; want < trades.get(trade).wants.size(); want++){ - ItemStack wantsOne = trades.get(trade).wants.get(want); - wantsOne.stackSize = MathHelper.getRandomIntegerInRange(rand, trades.get(trade).minStackSize, trades.get(trade).maxStackSize); + for(int trade = 0; trade < this.trades.size(); trade++){ + for(int want = 0; want < this.trades.get(trade).wants.size(); want++){ + ItemStack wantsOne = this.trades.get(trade).wants.get(want); + wantsOne.stackSize = MathHelper.getRandomIntegerInRange(rand, this.trades.get(trade).minStackSize, this.trades.get(trade).maxStackSize); ItemStack wantsTwo = null; if(rand.nextInt(3) == 0){ - int randomSecondTrade = rand.nextInt(trades.size()); - for(int randomSecondWant = 0; randomSecondWant < trades.get(randomSecondTrade).wants.size(); randomSecondWant++){ - wantsTwo = trades.get(randomSecondTrade).wants.get(randomSecondWant); - wantsTwo.stackSize = MathHelper.getRandomIntegerInRange(rand, trades.get(randomSecondTrade).minStackSize, trades.get(randomSecondTrade).maxStackSize); + int randomSecondTrade = rand.nextInt(this.trades.size()); + for(int randomSecondWant = 0; randomSecondWant < this.trades.get(randomSecondTrade).wants.size(); randomSecondWant++){ + wantsTwo = this.trades.get(randomSecondTrade).wants.get(randomSecondWant); + wantsTwo.stackSize = MathHelper.getRandomIntegerInRange(rand, this.trades.get(randomSecondTrade).minStackSize, this.trades.get(randomSecondTrade).maxStackSize); } } if(wantsOne == wantsTwo){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java index 19ce4ab0a..61c054aa0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentCustomCropField.java @@ -26,9 +26,9 @@ import java.util.Random; public class VillageComponentCustomCropField extends StructureVillagePieces.House1{ - private static final int xSize = 13; - private static final int ySize = 4; - private static final int zSize = 9; + private static final int X_SIZE = 13; + private static final int Y_SIZE = 4; + private static final int Z_SIZE = 9; private int averageGroundLevel = -1; @@ -42,7 +42,7 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous } public static VillageComponentCustomCropField buildComponent(List pieces, int p1, int p2, int p3, EnumFacing p4){ - StructureBoundingBox boundingBox = StructureBoundingBox.getComponentToAddBoundingBox(p1, p2, p3, 0, 0, 0, xSize, ySize, zSize, p4); + StructureBoundingBox boundingBox = StructureBoundingBox.getComponentToAddBoundingBox(p1, p2, p3, 0, 0, 0, X_SIZE, Y_SIZE, Z_SIZE, p4); return canVillageGoDeeper(boundingBox) && StructureComponent.findIntersecting(pieces, boundingBox) == null ? new VillageComponentCustomCropField(boundingBox, p4) : null; } @@ -53,15 +53,15 @@ public class VillageComponentCustomCropField extends StructureVillagePieces.Hous if(this.averageGroundLevel < 0){ return true; } - this.boundingBox.offset(0, this.averageGroundLevel-this.boundingBox.maxY+ySize-1, 0); + this.boundingBox.offset(0, this.averageGroundLevel-this.boundingBox.maxY+Y_SIZE-1, 0); } - this.fillWithBlocks(world, sbb, 0, 0, 0, xSize-1, ySize-1, zSize-1, Blocks.AIR); + this.fillWithBlocks(world, sbb, 0, 0, 0, X_SIZE-1, Y_SIZE-1, Z_SIZE-1, Blocks.AIR); this.spawnActualHouse(world, rand, sbb); - for(int i = 0; i < xSize; i++){ - for(int j = 0; j < zSize; j++){ - this.clearCurrentPositionBlocksUpwards(world, i, ySize, j, sbb); + for(int i = 0; i < X_SIZE; i++){ + for(int j = 0; j < Z_SIZE; j++){ + this.clearCurrentPositionBlocksUpwards(world, i, Y_SIZE, j, sbb); this.replaceAirAndLiquidDownwards(world, Blocks.DIRT.getDefaultState(), i, -1, j, sbb); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java index d73824d21..2ce2f0e6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/VillageComponentJamHouse.java @@ -24,9 +24,9 @@ import java.util.Random; public class VillageComponentJamHouse extends StructureVillagePieces.House1{ - private static final int xSize = 11; - private static final int ySize = 8; - private static final int zSize = 12; + private static final int X_SIZE = 11; + private static final int Y_SIZE = 8; + private static final int Z_SIZE = 12; private int averageGroundLevel = -1; @@ -40,7 +40,7 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ } public static VillageComponentJamHouse buildComponent(List pieces, int p1, int p2, int p3, EnumFacing p4){ - StructureBoundingBox boundingBox = StructureBoundingBox.getComponentToAddBoundingBox(p1, p2, p3, 0, 0, 0, xSize, ySize, zSize, p4); + StructureBoundingBox boundingBox = StructureBoundingBox.getComponentToAddBoundingBox(p1, p2, p3, 0, 0, 0, X_SIZE, Y_SIZE, Z_SIZE, p4); return canVillageGoDeeper(boundingBox) && StructureComponent.findIntersecting(pieces, boundingBox) == null ? new VillageComponentJamHouse(boundingBox, p4) : null; } @@ -51,15 +51,15 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{ if(this.averageGroundLevel < 0){ return true; } - this.boundingBox.offset(0, this.averageGroundLevel-this.boundingBox.maxY+ySize-1, 0); + this.boundingBox.offset(0, this.averageGroundLevel-this.boundingBox.maxY+Y_SIZE-1, 0); } - this.fillWithBlocks(world, sbb, 0, 0, 0, xSize-1, ySize-1, zSize-1, Blocks.AIR); + this.fillWithBlocks(world, sbb, 0, 0, 0, X_SIZE-1, Y_SIZE-1, Z_SIZE-1, Blocks.AIR); this.spawnActualHouse(world, rand, sbb); - for(int i = 0; i < xSize; i++){ - for(int j = 0; j < zSize; j++){ - this.clearCurrentPositionBlocksUpwards(world, i, ySize, j, sbb); + for(int i = 0; i < X_SIZE; i++){ + for(int j = 0; j < Z_SIZE; j++){ + this.clearCurrentPositionBlocksUpwards(world, i, Y_SIZE, j, sbb); this.replaceAirAndLiquidDownwards(world, Blocks.COBBLESTONE.getDefaultState(), i, -1, j, sbb); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java index 71c5c5c2d..d32505358 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBreaker.java @@ -44,10 +44,10 @@ public class ContainerBreaker extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 9; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 9; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java index 8a666ba2a..0fa580100 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCanolaPress.java @@ -42,10 +42,10 @@ public class ContainerCanolaPress extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 1; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 1; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java index 89162aed5..ac31b4c08 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoalGenerator.java @@ -41,10 +41,10 @@ public class ContainerCoalGenerator extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 1; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 1; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java index 34902031a..6a3235757 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerCoffeeMachine.java @@ -52,10 +52,10 @@ public class ContainerCoffeeMachine extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 11; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 11; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java index b461964e4..31f567093 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDirectionalBreaker.java @@ -44,10 +44,10 @@ public class ContainerDirectionalBreaker extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 9; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 9; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index fb2213e5f..e0871a873 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -66,10 +66,10 @@ public class ContainerDrill extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 5; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 5; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java index 7ac5ef2df..f6843b5b9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDropper.java @@ -44,10 +44,10 @@ public class ContainerDropper extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 9; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 9; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index e99b39bd4..4f3382ad8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -70,10 +70,10 @@ public class ContainerEnergizer extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 2; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 2; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index 112e894b4..d13fa3cd6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -69,10 +69,10 @@ public class ContainerEnervator extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 2; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 2; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java index f83139cd6..847331f2a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFeeder.java @@ -39,10 +39,10 @@ public class ContainerFeeder extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 1; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 1; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java index 07090c987..eaa94d1f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFermentingBarrel.java @@ -38,10 +38,10 @@ public class ContainerFermentingBarrel extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 0; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 0; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java index 846e3d731..e0855fe6c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java @@ -63,10 +63,10 @@ public class ContainerFilter extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = SLOT_AMOUNT; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = SLOT_AMOUNT; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java index f622045a4..e48cd81d1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFluidCollector.java @@ -38,10 +38,10 @@ public class ContainerFluidCollector extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 0; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 0; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java index fdc5c6f20..cc5a34e4f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFurnaceDouble.java @@ -45,10 +45,10 @@ public class ContainerFurnaceDouble extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 4; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 4; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 2964b390e..5a1da714f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -45,10 +45,10 @@ public class ContainerGiantChest extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 117; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 117; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java index 3730ba761..9ec622969 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGrinder.java @@ -51,10 +51,10 @@ public class ContainerGrinder extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = this.isDouble ? 6 : 3; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = this.isDouble ? 6 : 3; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 87a82485e..d8ae94535 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -56,10 +56,10 @@ public class ContainerInputter extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = this.isAdvanced ? 25 : 1; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = this.isAdvanced ? 25 : 1; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index db269a3f9..db0bfd991 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -48,10 +48,10 @@ public class ContainerLaserRelayItemWhitelist extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 0; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 0; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java index d7f1bff70..f88888640 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerMiner.java @@ -44,10 +44,10 @@ public class ContainerMiner extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 9; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 9; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java index 9a1bbe2d9..a77bcc3cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerOilGenerator.java @@ -37,10 +37,10 @@ public class ContainerOilGenerator extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 0; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 0; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java index ea7e57b2f..9b82c73b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerPhantomPlacer.java @@ -44,10 +44,10 @@ public class ContainerPhantomPlacer extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 9; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 9; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index 052834770..44ae77f02 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -51,10 +51,10 @@ public class ContainerRangedCollector extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 18; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 18; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java index adb34ed27..6f1e45d81 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRepairer.java @@ -42,10 +42,10 @@ public class ContainerRepairer extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 2; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 2; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java index e67d4b50d..a224ac39e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerXPSolidifier.java @@ -41,10 +41,10 @@ public class ContainerXPSolidifier extends Container{ @Override public ItemStack transferStackInSlot(EntityPlayer player, int slot){ - final int inventoryStart = 1; - final int inventoryEnd = inventoryStart+26; - final int hotbarStart = inventoryEnd+1; - final int hotbarEnd = hotbarStart+8; + int inventoryStart = 1; + int inventoryEnd = inventoryStart+26; + int hotbarStart = inventoryEnd+1; + int hotbarEnd = hotbarStart+8; Slot theSlot = this.inventorySlots.get(slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java index 07c5bca4c..6bb2f8022 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java @@ -24,7 +24,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiBreaker extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiBreaker"); private final TileEntityBreaker breaker; public GuiBreaker(InventoryPlayer inventory, TileEntityBase tile){ @@ -46,7 +46,7 @@ public class GuiBreaker extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java index bf66e1fe7..73050816d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java @@ -27,7 +27,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiCanolaPress extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCanolaPress"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiCanolaPress"); private final TileEntityCanolaPress press; public GuiCanolaPress(InventoryPlayer inventory, TileEntityBase tile){ @@ -63,7 +63,7 @@ public class GuiCanolaPress extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.press.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java index edb494e16..025ecb650 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java @@ -26,7 +26,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiCoalGenerator extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCoalGenerator"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiCoalGenerator"); private final TileEntityCoalGenerator generator; public GuiCoalGenerator(InventoryPlayer inventory, TileEntityBase tile){ @@ -57,7 +57,7 @@ public class GuiCoalGenerator extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.generator.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index e51d0f729..2e01a67b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -34,7 +34,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiCoffeeMachine extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiCoffeeMachine"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiCoffeeMachine"); private final TileEntityCoffeeMachine machine; private final int x; private final int y; @@ -91,7 +91,7 @@ public class GuiCoffeeMachine extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.machine.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java index 4988e219f..b097bf05f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCrafter.java @@ -23,7 +23,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiCrafter extends GuiContainer{ - private static final ResourceLocation resLoc = new ResourceLocation("textures/gui/container/crafting_table.png"); + private static final ResourceLocation RES_LOC = new ResourceLocation("textures/gui/container/crafting_table.png"); public GuiCrafter(EntityPlayer player){ super(new ContainerCrafter(player)); @@ -40,7 +40,7 @@ public class GuiCrafter extends GuiContainer{ @Override public void drawGuiContainerBackgroundLayer(float f, int x, int y){ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java index 9f9465439..fb6e86771 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java @@ -26,7 +26,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiDirectionalBreaker extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiDirectionalBreaker"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiDirectionalBreaker"); private final TileEntityDirectionalBreaker breaker; public GuiDirectionalBreaker(InventoryPlayer inventory, TileEntityBase tile){ @@ -58,7 +58,7 @@ public class GuiDirectionalBreaker extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.breaker.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java index 58823fdad..24cdb2e1c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDrill.java @@ -23,7 +23,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiDrill extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiDrill"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiDrill"); public GuiDrill(InventoryPlayer inventory){ super(new ContainerDrill(inventory)); @@ -43,7 +43,7 @@ public class GuiDrill extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+54, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 54); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java index d8846d419..e4e08238d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java @@ -24,7 +24,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiDropper extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiBreaker"); private final TileEntityDropper dropper; public GuiDropper(InventoryPlayer inventory, TileEntityBase tile){ @@ -46,7 +46,7 @@ public class GuiDropper extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java index f4054b7ab..2d1fde488 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java @@ -26,7 +26,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiEnergizer extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiEnergizer"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiEnergizer"); private final TileEntityEnergizer energizer; public GuiEnergizer(EntityPlayer inventory, TileEntityBase tile){ @@ -57,7 +57,7 @@ public class GuiEnergizer extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.energizer.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java index 5a5bae828..96ed0b201 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java @@ -26,7 +26,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiEnervator extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiEnergizer"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiEnergizer"); private final TileEntityEnervator enervator; public GuiEnervator(EntityPlayer inventory, TileEntityBase tile){ @@ -57,7 +57,7 @@ public class GuiEnervator extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.enervator.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java index a7a3f48c6..761527709 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java @@ -28,7 +28,7 @@ import java.util.Arrays; @SideOnly(Side.CLIENT) public class GuiFeeder extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFeeder"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiFeeder"); public final TileEntityFeeder tileFeeder; public GuiFeeder(InventoryPlayer inventory, TileEntityBase tile){ @@ -57,7 +57,7 @@ public class GuiFeeder extends GuiContainer{ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+70, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 70); if(this.tileFeeder.currentTimer > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java index a9318fd33..0f23fd9f3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java @@ -27,7 +27,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiFermentingBarrel extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFermentingBarrel"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiFermentingBarrel"); private final TileEntityFermentingBarrel press; public GuiFermentingBarrel(InventoryPlayer inventory, TileEntityBase tile){ @@ -64,7 +64,7 @@ public class GuiFermentingBarrel extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.press.canolaTank.getFluidAmount() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java index df766a5d9..abeebadc9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java @@ -27,7 +27,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiFluidCollector extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFluidCollector"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiFluidCollector"); private final TileEntityFluidCollector collector; public GuiFluidCollector(InventoryPlayer inventory, TileEntityBase tile){ @@ -59,7 +59,7 @@ public class GuiFluidCollector extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.collector.tank.getFluidAmount() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java index b1cb32229..9619ebc7e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java @@ -26,7 +26,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiFurnaceDouble extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFurnaceDouble"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiFurnaceDouble"); private final TileEntityFurnaceDouble tileFurnace; public GuiFurnaceDouble(InventoryPlayer inventory, TileEntityBase tile){ @@ -57,7 +57,7 @@ public class GuiFurnaceDouble extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.tileFurnace.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index f7de51720..f3dfb19b0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -24,7 +24,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiGiantChest extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiGiantChest"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiGiantChest"); final TileEntityGiantChest chest; @@ -44,7 +44,7 @@ public class GuiGiantChest extends GuiContainer{ @Override public void drawGuiContainerBackgroundLayer(float f, int x, int y){ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 242, 190); this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft+33, this.guiTop+172, 0, 0, 176, 86); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java index 5e2255a3e..04e289b8b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java @@ -26,8 +26,8 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiGrinder extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiGrinder"); - private static final ResourceLocation resLocDouble = AssetUtil.getGuiLocation("guiGrinderDouble"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiGrinder"); + private static final ResourceLocation RES_LOC_DOUBLE = AssetUtil.getGuiLocation("guiGrinderDouble"); private final TileEntityGrinder tileGrinder; private final boolean isDouble; @@ -64,7 +64,7 @@ public class GuiGrinder extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(this.isDouble ? resLocDouble : resLoc); + this.mc.getTextureManager().bindTexture(this.isDouble ? RES_LOC_DOUBLE : RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.tileGrinder.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index f88974876..f8efd24ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -26,7 +26,6 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -37,7 +36,7 @@ import java.util.List; @SideOnly(Side.CLIENT) public class GuiLaserRelayItemWhitelist extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiLaserRelayItemWhitelist"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiLaserRelayItemWhitelist"); private final TileEntityLaserRelayItemWhitelist tile; private SmallerButton whitelistLeft; @@ -124,7 +123,7 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index 2a850cb1f..770908793 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -30,7 +30,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiMiner extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiBreaker"); private final TileEntityMiner miner; public GuiMiner(InventoryPlayer inventory, TileEntityBase tile){ @@ -63,7 +63,7 @@ public class GuiMiner extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); String mining = this.miner.onlyMineOres ? "Only Mining Ores" : "Mining Everything"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index 58149624d..f219d9e2c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -27,7 +27,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiOilGenerator extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiOilGenerator"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiOilGenerator"); private final TileEntityOilGenerator generator; public GuiOilGenerator(InventoryPlayer inventory, TileEntityBase tile){ @@ -62,7 +62,7 @@ public class GuiOilGenerator extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.generator.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java index 5b7341b87..a603f2edb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java @@ -24,7 +24,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiPhantomPlacer extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiBreaker"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiBreaker"); private final TileEntityPhantomPlacer placer; public GuiPhantomPlacer(InventoryPlayer inventory, TileEntityBase tile){ @@ -46,7 +46,7 @@ public class GuiPhantomPlacer extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index 9362b6f16..7b0ff8806 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -34,7 +34,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiRangedCollector extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiRangedCollector"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiRangedCollector"); private final TileEntityRangedCollector collector; private final int x; private final int y; @@ -85,7 +85,7 @@ public class GuiRangedCollector extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+86, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 86); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 452d725a1..1348641c1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -26,7 +26,7 @@ import java.util.Collections; @SideOnly(Side.CLIENT) public class GuiRepairer extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiRepairer"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiRepairer"); private final TileEntityItemRepairer tileRepairer; public GuiRepairer(InventoryPlayer inventory, TileEntityBase tile){ @@ -57,7 +57,7 @@ public class GuiRepairer extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); if(this.tileRepairer.storage.getEnergyStored() > 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java index 93c0c8568..5238f6ea4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiSmileyCloud.java @@ -35,7 +35,7 @@ import java.io.IOException; @SideOnly(Side.CLIENT) public class GuiSmileyCloud extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiSmileyCloud"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiSmileyCloud"); private final int x; private final int y; @@ -76,7 +76,7 @@ public class GuiSmileyCloud extends GuiContainer{ public void drawGuiContainerBackgroundLayer(float f, int x, int y){ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); this.nameField.drawTextBox(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index 47c1f52ab..8d97b7cd2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -31,7 +31,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class GuiXPSolidifier extends GuiContainer{ - private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiXPSolidifier"); + private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiXPSolidifier"); private final TileEntityXPSolidifier solidifier; private final int x; private final int y; @@ -86,7 +86,7 @@ public class GuiXPSolidifier extends GuiContainer{ this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION); this.drawTexturedModalRect(this.guiLeft, this.guiTop+93, 0, 0, 176, 86); - this.mc.getTextureManager().bindTexture(resLoc); + this.mc.getTextureManager().bindTexture(RES_LOC); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); this.drawCenteredString(this.fontRendererObj, Integer.toString(this.solidifier.amount), this.guiLeft+88, this.guiTop+30, StringUtil.DECIMAL_COLOR_WHITE); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java index c179ad18c..6bb6368b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitForeignPaxels.java @@ -24,14 +24,14 @@ import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.ShapelessOreRecipe; -public class InitForeignPaxels{ +public final class InitForeignPaxels{ public static final int[] MT_COLORS = new int[]{4166, 2248890, 8882649, 12410135, 11451392, 3684412}; public static final String[] MT_NAMES = new String[]{"Obsidian", "LapisLazuli", "Osmium", "Bronze", "Glowstone", "Steel"}; public static final int[] TF_COLORS = new int[]{13332762, 5407943, 5407895, 5394789, 12960613, 12960653, 12410135, 2999795, 10143162}; public static final int[] SO_COLORS = new int[]{9409450, 2040021, 5714944, 526344, 545032}; - public static final Item[] tfPaxels = new Item[9]; - public static final Item[] soPaxels = new Item[5]; + public static final Item[] TF_PAXELS = new Item[9]; + public static final Item[] SO_PAXELS = new Item[5]; //MekanismTools private static final String MEKANISM_TOOLS = "MekanismTools"; private static final String[] MT_REPAIR_NAMES = new String[]{"ingotRefinedObsidian", "gemLapis", "ingotOsmium", "ingotBronze", "ingotRefinedGlowstone", "ingotSteel"}; @@ -42,7 +42,7 @@ public class InitForeignPaxels{ private static final String SIMPLE_ORES = "simpleores"; private static final String[] SO_NAMES = new String[]{"tin", "mythril", "copper", "onyx", "adamantium"}; private static final String[] SO_REPAIR_NAMES = new String[]{"ingotTin", "ingotMythril", "ingotCopper", "gemOnyx", "ingotAdamantium"}; - private static final Item[] mtPaxels = new Item[6]; + private static final Item[] MT_PAXELS = new Item[6]; public static void init(){ //SimpleOres @@ -50,7 +50,7 @@ public class InitForeignPaxels{ if(Loader.isModLoaded(SIMPLE_ORES)){ ModUtil.LOGGER.info("Initializing "+SIMPLE_ORES+" AIOTs..."); - for(int i = 0; i < soPaxels.length; i++){ + for(int i = 0; i < SO_PAXELS.length; i++){ Item axe = ItemUtil.getItemFromName(SIMPLE_ORES+":"+SO_NAMES[i]+"_axe"); Item pickaxe = ItemUtil.getItemFromName(SIMPLE_ORES+":"+SO_NAMES[i]+"_pickaxe"); Item hoe = ItemUtil.getItemFromName(SIMPLE_ORES+":"+SO_NAMES[i]+"_hoe"); @@ -59,11 +59,11 @@ public class InitForeignPaxels{ if(axe != null && pickaxe != null && hoe != null && sword != null && shovel != null && axe instanceof ItemTool){ Item.ToolMaterial material = ((ItemTool)axe).getToolMaterial(); - soPaxels[i] = new ItemAllToolAA(material, SO_REPAIR_NAMES[i], "paxelSO"+SO_NAMES[i], EnumRarity.RARE, SO_COLORS[i]); + SO_PAXELS[i] = new ItemAllToolAA(material, SO_REPAIR_NAMES[i], "paxelSO"+SO_NAMES[i], EnumRarity.RARE, SO_COLORS[i]); if(ConfigCrafting.PAXELS.isEnabled()){ - GameRegistry.addRecipe(new ShapelessOreRecipe(soPaxels[i], axe, pickaxe, hoe, sword, shovel)); - ToolCrafting.recipesPaxels.add(RecipeUtil.lastIRecipe()); + GameRegistry.addRecipe(new ShapelessOreRecipe(SO_PAXELS[i], axe, pickaxe, hoe, sword, shovel)); + ToolCrafting.RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); } } } @@ -78,7 +78,7 @@ public class InitForeignPaxels{ if(Loader.isModLoaded(MEKANISM_TOOLS)){ ModUtil.LOGGER.info("Initializing "+MEKANISM_TOOLS+" AIOTs..."); - for(int i = 0; i < mtPaxels.length; i++){ + for(int i = 0; i < MT_PAXELS.length; i++){ Item axe = ItemUtil.getItemFromName(MEKANISM_TOOLS+":"+MT_NAMES[i]+"Axe"); Item pickaxe = ItemUtil.getItemFromName(MEKANISM_TOOLS+":"+MT_NAMES[i]+"Pickaxe"); Item hoe = ItemUtil.getItemFromName(MEKANISM_TOOLS+":"+MT_NAMES[i]+"Hoe"); @@ -87,11 +87,11 @@ public class InitForeignPaxels{ if(axe != null && pickaxe != null && hoe != null && sword != null && shovel != null && axe instanceof ItemTool){ Item.ToolMaterial material = ((ItemTool)axe).getToolMaterial(); - mtPaxels[i] = new ItemAllToolAA(material, MT_REPAIR_NAMES[i], "paxelMT"+MT_NAMES[i], EnumRarity.RARE, MT_COLORS[i]); + MT_PAXELS[i] = new ItemAllToolAA(material, MT_REPAIR_NAMES[i], "paxelMT"+MT_NAMES[i], EnumRarity.RARE, MT_COLORS[i]); if(ConfigCrafting.PAXELS.isEnabled()){ - GameRegistry.addRecipe(new ShapelessOreRecipe(mtPaxels[i], axe, pickaxe, hoe, sword, shovel)); - ToolCrafting.recipesPaxels.add(RecipeUtil.lastIRecipe()); + GameRegistry.addRecipe(new ShapelessOreRecipe(MT_PAXELS[i], axe, pickaxe, hoe, sword, shovel)); + ToolCrafting.RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); } } } @@ -106,7 +106,7 @@ public class InitForeignPaxels{ if(Loader.isModLoaded(THERMAL_FOUNDATION)){ ModUtil.LOGGER.info("Initializing "+THERMAL_FOUNDATION+" AIOTs..."); - for(int i = 0; i < tfPaxels.length; i++){ + for(int i = 0; i < TF_PAXELS.length; i++){ Item axe = ItemUtil.getItemFromName(THERMAL_FOUNDATION+":tool.axe"+TF_NAMES[i]); Item pickaxe = ItemUtil.getItemFromName(THERMAL_FOUNDATION+":tool.pickaxe"+TF_NAMES[i]); Item hoe = ItemUtil.getItemFromName(THERMAL_FOUNDATION+":tool.hoe"+TF_NAMES[i]); @@ -115,11 +115,11 @@ public class InitForeignPaxels{ if(axe != null && pickaxe != null && hoe != null && sword != null && shovel != null && axe instanceof ItemTool){ Item.ToolMaterial material = ((ItemTool)axe).getToolMaterial(); - tfPaxels[i] = new ItemAllToolAA(material, "ingot"+TF_NAMES[i], "paxelTF"+TF_NAMES[i], EnumRarity.RARE, TF_COLORS[i]); + TF_PAXELS[i] = new ItemAllToolAA(material, "ingot"+TF_NAMES[i], "paxelTF"+TF_NAMES[i], EnumRarity.RARE, TF_COLORS[i]); if(ConfigCrafting.PAXELS.isEnabled()){ - GameRegistry.addRecipe(new ShapelessOreRecipe(tfPaxels[i], axe, pickaxe, hoe, sword, shovel)); - ToolCrafting.recipesPaxels.add(RecipeUtil.lastIRecipe()); + GameRegistry.addRecipe(new ShapelessOreRecipe(TF_PAXELS[i], axe, pickaxe, hoe, sword, shovel)); + ToolCrafting.RECIPES_PAXELS.add(RecipeUtil.lastIRecipe()); } } } @@ -131,19 +131,19 @@ public class InitForeignPaxels{ } public static void addToCreativeTab(){ - for(Item item : tfPaxels){ + for(Item item : TF_PAXELS){ if(item != null){ - CreativeTab.instance.add(item); + CreativeTab.INSTANCE.add(item); } } - for(Item item : mtPaxels){ + for(Item item : MT_PAXELS){ if(item != null){ - CreativeTab.instance.add(item); + CreativeTab.INSTANCE.add(item); } } - for(Item item : soPaxels){ + for(Item item : SO_PAXELS){ if(item != null){ - CreativeTab.instance.add(item); + CreativeTab.INSTANCE.add(item); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index bdf9f281f..4be4f5e4a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -22,17 +22,16 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.material.InitToolMaterials; -import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.Loader; -public class InitItems{ +public final class InitItems{ public static Item itemBooklet; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java index b8153d1e2..d14a9e45c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemCrystal.java @@ -40,27 +40,27 @@ public class ItemCrystal extends ItemBase{ @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+BlockCrystal.allCrystals[stack.getItemDamage()].name; + return stack.getItemDamage() >= BlockCrystal.ALL_CRYSTALS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+BlockCrystal.ALL_CRYSTALS[stack.getItemDamage()].name; } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? EnumRarity.COMMON : BlockCrystal.allCrystals[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= BlockCrystal.ALL_CRYSTALS.length ? EnumRarity.COMMON : BlockCrystal.ALL_CRYSTALS[stack.getItemDamage()].rarity; } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < BlockCrystal.allCrystals.length; j++){ + for(int j = 0; j < BlockCrystal.ALL_CRYSTALS.length; j++){ list.add(new ItemStack(this, 1, j)); } } @Override protected void registerRendering(){ - for(int i = 0; i < BlockCrystal.allCrystals.length; i++){ - String name = this.getRegistryName()+BlockCrystal.allCrystals[i].name; + for(int i = 0; i < BlockCrystal.ALL_CRYSTALS.length; i++){ + String name = this.getRegistryName()+BlockCrystal.ALL_CRYSTALS[i].name; ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(name), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 3fbed02c5..b96b4f794 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -73,6 +73,32 @@ public class ItemDrill extends ItemEnergy{ this.setHarvestLevel("pickaxe", HARVEST_LEVEL); } + /** + * Gets all of the Slots from NBT + * + * @param stack The Drill + */ + public static void loadSlotsFromNBT(ItemStack[] slots, ItemStack stack){ + NBTTagCompound compound = stack.getTagCompound(); + if(compound != null){ + TileEntityInventoryBase.loadSlots(slots, compound); + } + } + + /** + * Writes all of the Slots to NBT + * + * @param slots The Slots + * @param stack The Drill + */ + public static void writeSlotsToNBT(ItemStack[] slots, ItemStack stack){ + NBTTagCompound compound = stack.getTagCompound(); + if(compound == null){ + compound = new NBTTagCompound(); + } + TileEntityInventoryBase.saveSlots(slots, compound); + stack.setTagCompound(compound); + } @Override //Places Blocks if the Placing Upgrade is installed @@ -139,19 +165,6 @@ public class ItemDrill extends ItemEnergy{ return null; } - /** - * Gets all of the Slots from NBT - * - * @param stack The Drill - */ - public static void loadSlotsFromNBT(ItemStack[] slots, ItemStack stack){ - NBTTagCompound compound = stack.getTagCompound(); - if(compound != null){ - TileEntityInventoryBase.loadSlots(slots, compound); - } - } - - @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ if(!world.isRemote && player.isSneaking()){ @@ -197,13 +210,11 @@ public class ItemDrill extends ItemEnergy{ } } - @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; } - @Override public Multimap getAttributeModifiers(EntityEquipmentSlot slot, ItemStack stack){ Multimap map = super.getAttributeModifiers(slot, stack); @@ -263,7 +274,6 @@ public class ItemDrill extends ItemEnergy{ return this.getEnergyStored(stack) >= this.getEnergyUsePerBlock(stack) && (this.hasExtraWhitelist(block) || block.getMaterial(state).isToolNotRequired() || (block == Blocks.SNOW_LAYER || block == Blocks.SNOW || (block == Blocks.OBSIDIAN ? harvestLevel >= 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial(state) == Material.ROCK || (block.getMaterial(state) == Material.IRON || block.getMaterial(state) == Material.ANVIL)) : harvestLevel >= 2) : harvestLevel >= 1) : harvestLevel >= 1) : harvestLevel >= 2) : harvestLevel >= 2) : harvestLevel >= 2)))); } - @Override public Set getToolClasses(ItemStack stack){ HashSet hashSet = new HashSet(); @@ -388,21 +398,6 @@ public class ItemDrill extends ItemEnergy{ return efficiency; } - /** - * Writes all of the Slots to NBT - * - * @param slots The Slots - * @param stack The Drill - */ - public static void writeSlotsToNBT(ItemStack[] slots, ItemStack stack){ - NBTTagCompound compound = stack.getTagCompound(); - if(compound == null){ - compound = new NBTTagCompound(); - } - TileEntityInventoryBase.saveSlots(slots, compound); - stack.setTagCompound(compound); - } - /** * Breaks Blocks in a certain Radius * Has to be called on both Server and Client diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java index c8942b086..0d40df918 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDust.java @@ -27,7 +27,7 @@ import java.util.List; public class ItemDust extends ItemBase implements IColorProvidingItem{ - public static final TheDusts[] allDusts = TheDusts.values(); + public static final TheDusts[] ALL_DUSTS = TheDusts.values(); public ItemDust(String name){ super(name); @@ -42,26 +42,26 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allDusts.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allDusts[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_DUSTS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_DUSTS[stack.getItemDamage()].name; } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allDusts.length ? EnumRarity.COMMON : allDusts[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_DUSTS.length ? EnumRarity.COMMON : ALL_DUSTS[stack.getItemDamage()].rarity; } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allDusts.length; j++){ + for(int j = 0; j < ALL_DUSTS.length; j++){ list.add(new ItemStack(this, 1, j)); } } @Override protected void registerRendering(){ - for(int i = 0; i < allDusts.length; i++){ + for(int i = 0; i < ALL_DUSTS.length; i++){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), "inventory"); } } @@ -72,7 +72,7 @@ public class ItemDust extends ItemBase implements IColorProvidingItem{ return new IItemColor(){ @Override public int getColorFromItemstack(ItemStack stack, int pass){ - return stack.getItemDamage() >= allDusts.length ? 0xFFFFFF : allDusts[stack.getItemDamage()].color; + return stack.getItemDamage() >= ALL_DUSTS.length ? 0xFFFFFF : ALL_DUSTS[stack.getItemDamage()].color; } }; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java index e94fb72e4..6a5343bc5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFilter.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.inventory.ContainerDrill; import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 9af9a471b..4030dcc96 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -31,7 +31,7 @@ import java.util.List; public class ItemFoods extends ItemFoodBase{ - public static final TheFoods[] allFoods = TheFoods.values(); + public static final TheFoods[] ALL_FOODS = TheFoods.values(); public ItemFoods(String name){ super(0, 0.0F, false, name); @@ -43,7 +43,7 @@ public class ItemFoods extends ItemFoodBase{ @Override public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); - ItemStack returnItem = stack.getItemDamage() >= allFoods.length ? null : allFoods[stack.getItemDamage()].returnItem; + ItemStack returnItem = stack.getItemDamage() >= ALL_FOODS.length ? null : ALL_FOODS[stack.getItemDamage()].returnItem; if(returnItem != null && player instanceof EntityPlayer){ if(!((EntityPlayer)player).inventory.addItemStackToInventory(returnItem.copy())){ if(!world.isRemote){ @@ -58,23 +58,23 @@ public class ItemFoods extends ItemFoodBase{ @Override public int getMaxItemUseDuration(ItemStack stack){ - return stack.getItemDamage() >= allFoods.length ? 0 : allFoods[stack.getItemDamage()].useDuration; + return stack.getItemDamage() >= ALL_FOODS.length ? 0 : ALL_FOODS[stack.getItemDamage()].useDuration; } @Override public EnumAction getItemUseAction(ItemStack stack){ - return stack.getItemDamage() >= allFoods.length ? EnumAction.EAT : (allFoods[stack.getItemDamage()].getsDrunken ? EnumAction.DRINK : EnumAction.EAT); + return stack.getItemDamage() >= ALL_FOODS.length ? EnumAction.EAT : (ALL_FOODS[stack.getItemDamage()].getsDrunken ? EnumAction.DRINK : EnumAction.EAT); } @Override public int getHealAmount(ItemStack stack){ - return stack.getItemDamage() >= allFoods.length ? 0 : allFoods[stack.getItemDamage()].healAmount; + return stack.getItemDamage() >= ALL_FOODS.length ? 0 : ALL_FOODS[stack.getItemDamage()].healAmount; } @Override public float getSaturationModifier(ItemStack stack){ - return stack.getItemDamage() >= allFoods.length ? 0 : allFoods[stack.getItemDamage()].saturation; + return stack.getItemDamage() >= ALL_FOODS.length ? 0 : ALL_FOODS[stack.getItemDamage()].saturation; } @Override @@ -85,27 +85,27 @@ public class ItemFoods extends ItemFoodBase{ @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allFoods.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allFoods[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_FOODS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_FOODS[stack.getItemDamage()].name; } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allFoods.length ? EnumRarity.COMMON : allFoods[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_FOODS.length ? EnumRarity.COMMON : ALL_FOODS[stack.getItemDamage()].rarity; } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allFoods.length; j++){ + for(int j = 0; j < ALL_FOODS.length; j++){ list.add(new ItemStack(this, 1, j)); } } @Override protected void registerRendering(){ - for(int i = 0; i < allFoods.length; i++){ - String name = this.getRegistryName()+allFoods[i].name; + for(int i = 0; i < ALL_FOODS.length; i++){ + String name = this.getRegistryName()+ALL_FOODS[i].name; ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ModelResourceLocation(name), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java index 36a0374bb..5dfd93ffe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemJams.java @@ -34,7 +34,7 @@ import java.util.List; public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ - public static final TheJams[] allJams = TheJams.values(); + public static final TheJams[] ALL_JAMS = TheJams.values(); public ItemJams(String name){ super(0, 0.0F, false, name); @@ -51,19 +51,19 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allJams.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allJams[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_JAMS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_JAMS[stack.getItemDamage()].name; } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allJams.length ? EnumRarity.COMMON : allJams[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_JAMS.length ? EnumRarity.COMMON : ALL_JAMS[stack.getItemDamage()].rarity; } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allJams.length; j++){ + for(int j = 0; j < ALL_JAMS.length; j++){ list.add(new ItemStack(this, 1, j)); } } @@ -72,11 +72,11 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ public ItemStack onItemUseFinish(ItemStack stack, World world, EntityLivingBase player){ ItemStack stackToReturn = super.onItemUseFinish(stack, world, player); - if(player instanceof EntityPlayer && !world.isRemote && stack.getItemDamage() < allJams.length){ - PotionEffect firstEffectToGet = new PotionEffect(Potion.getPotionById(allJams[stack.getItemDamage()].firstEffectToGet), 200); + if(player instanceof EntityPlayer && !world.isRemote && stack.getItemDamage() < ALL_JAMS.length){ + PotionEffect firstEffectToGet = new PotionEffect(Potion.getPotionById(ALL_JAMS[stack.getItemDamage()].firstEffectToGet), 200); player.addPotionEffect(firstEffectToGet); - PotionEffect secondEffectToGet = new PotionEffect(Potion.getPotionById(allJams[stack.getItemDamage()].secondEffectToGet), 600); + PotionEffect secondEffectToGet = new PotionEffect(Potion.getPotionById(ALL_JAMS[stack.getItemDamage()].secondEffectToGet), 600); player.addPotionEffect(secondEffectToGet); ItemStack returnItem = new ItemStack(Items.GLASS_BOTTLE); @@ -91,17 +91,17 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ @Override public int getHealAmount(ItemStack stack){ - return stack.getItemDamage() >= allJams.length ? 0 : allJams[stack.getItemDamage()].healAmount; + return stack.getItemDamage() >= ALL_JAMS.length ? 0 : ALL_JAMS[stack.getItemDamage()].healAmount; } @Override public float getSaturationModifier(ItemStack stack){ - return stack.getItemDamage() >= allJams.length ? 0 : allJams[stack.getItemDamage()].saturation; + return stack.getItemDamage() >= ALL_JAMS.length ? 0 : ALL_JAMS[stack.getItemDamage()].saturation; } @Override protected void registerRendering(){ - for(int i = 0; i < allJams.length; i++){ + for(int i = 0; i < ALL_JAMS.length; i++){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), "inventory"); } } @@ -112,7 +112,7 @@ public class ItemJams extends ItemFoodBase implements IColorProvidingItem{ return new IItemColor(){ @Override public int getColorFromItemstack(ItemStack stack, int pass){ - return pass > 0 ? (stack.getItemDamage() >= allJams.length ? 0xFFFFFF : allJams[stack.getItemDamage()].color) : 0xFFFFFF; + return pass > 0 ? (stack.getItemDamage() >= ALL_JAMS.length ? 0xFFFFFF : ALL_JAMS[stack.getItemDamage()].color) : 0xFFFFFF; } }; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java index dff7de1e5..a2318f1d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLaserWrench.java @@ -136,7 +136,7 @@ public class ItemLaserWrench extends ItemBase{ NO_PARTICLES("never show particles"), HOLDING_PARTICLES("show particles when holding a Laser Wrench"); - public String name; + public final String name; WrenchMode(String name){ this.name = name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java index d13099d81..49f9c5063 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemMisc.java @@ -26,7 +26,7 @@ import java.util.List; public class ItemMisc extends ItemBase{ - public static final TheMiscItems[] allMiscItems = TheMiscItems.values(); + public static final TheMiscItems[] ALL_MISC_ITEMS = TheMiscItems.values(); public ItemMisc(String name){ super(name); @@ -40,19 +40,19 @@ public class ItemMisc extends ItemBase{ @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allMiscItems.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allMiscItems[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_MISC_ITEMS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_MISC_ITEMS[stack.getItemDamage()].name; } @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allMiscItems.length ? EnumRarity.COMMON : allMiscItems[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_MISC_ITEMS.length ? EnumRarity.COMMON : ALL_MISC_ITEMS[stack.getItemDamage()].rarity; } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allMiscItems.length; j++){ + for(int j = 0; j < ALL_MISC_ITEMS.length; j++){ if(j != TheMiscItems.YOUTUBE_ICON.ordinal()){ list.add(new ItemStack(this, 1, j)); } @@ -61,8 +61,8 @@ public class ItemMisc extends ItemBase{ @Override protected void registerRendering(){ - for(int i = 0; i < allMiscItems.length; i++){ - String name = this.getRegistryName()+allMiscItems[i].name; + for(int i = 0; i < ALL_MISC_ITEMS.length; i++){ + String name = this.getRegistryName()+ALL_MISC_ITEMS[i].name; ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), new ResourceLocation(name), "inventory"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java index 805ee857a..325bea2aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemPotionRing.java @@ -38,7 +38,7 @@ import java.util.List; public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDisplayStandItem{ - public static final ThePotionRings[] allRings = ThePotionRings.values(); + public static final ThePotionRings[] ALL_RINGS = ThePotionRings.values(); private final boolean isAdvanced; @@ -57,14 +57,14 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi @Override public String getUnlocalizedName(ItemStack stack){ - return stack.getItemDamage() >= allRings.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+allRings[stack.getItemDamage()].name; + return stack.getItemDamage() >= ALL_RINGS.length ? StringUtil.BUGGED_ITEM_NAME : this.getUnlocalizedName()+ALL_RINGS[stack.getItemDamage()].name; } @Override public void onUpdate(ItemStack stack, World world, Entity player, int par4, boolean par5){ super.onUpdate(stack, world, player, par4, par5); - if(!world.isRemote && stack.getItemDamage() < allRings.length){ + if(!world.isRemote && stack.getItemDamage() < ALL_RINGS.length){ if(player instanceof EntityPlayer){ EntityPlayer thePlayer = (EntityPlayer)player; ItemStack equippedStack = thePlayer.getHeldItemMainhand(); @@ -76,8 +76,8 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi @Override public String getItemStackDisplayName(ItemStack stack){ String standardName = StringUtil.localize(this.getUnlocalizedName()+".name"); - if(stack.getItemDamage() < allRings.length){ - String effect = StringUtil.localize(allRings[stack.getItemDamage()].name); + if(stack.getItemDamage() < ALL_RINGS.length){ + String effect = StringUtil.localize(ALL_RINGS[stack.getItemDamage()].name); return standardName+" "+effect; } return standardName; @@ -86,20 +86,20 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi @Override public EnumRarity getRarity(ItemStack stack){ - return stack.getItemDamage() >= allRings.length ? EnumRarity.COMMON : allRings[stack.getItemDamage()].rarity; + return stack.getItemDamage() >= ALL_RINGS.length ? EnumRarity.COMMON : ALL_RINGS[stack.getItemDamage()].rarity; } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs tab, List list){ - for(int j = 0; j < allRings.length; j++){ + for(int j = 0; j < ALL_RINGS.length; j++){ list.add(new ItemStack(this, 1, j)); } } @Override protected void registerRendering(){ - for(int i = 0; i < allRings.length; i++){ + for(int i = 0; i < ALL_RINGS.length; i++){ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this, 1, i), this.getRegistryName(), "inventory"); } } @@ -110,7 +110,7 @@ public class ItemPotionRing extends ItemBase implements IColorProvidingItem, IDi return new IItemColor(){ @Override public int getColorFromItemstack(ItemStack stack, int tintIndex){ - return stack.getItemDamage() >= allRings.length ? 0xFFFFFF : allRings[stack.getItemDamage()].color; + return stack.getItemDamage() >= ALL_RINGS.length ? 0xFFFFFF : ALL_RINGS[stack.getItemDamage()].color; } }; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index 4c1325210..18a599c7c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -29,7 +29,7 @@ public class ItemWingsOfTheBats extends ItemBase{ *

* (Partially excerpted from Botania's Wing System by Vazkii (as I had fiddled around with the system and couldn't make it work) with permission, thanks!) */ - public static final ArrayList wingedPlayers = new ArrayList(); + public static final ArrayList WINGED_PLAYERS = new ArrayList(); public ItemWingsOfTheBats(String name){ super(name); @@ -43,7 +43,7 @@ public class ItemWingsOfTheBats extends ItemBase{ * @return Winged? */ public static boolean isPlayerWinged(EntityPlayer player){ - return wingedPlayers.contains(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); + return WINGED_PLAYERS.contains(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); } /** @@ -60,7 +60,7 @@ public class ItemWingsOfTheBats extends ItemBase{ * @param worldRemote If the World the Player is in is remote */ public static void removeWingsFromPlayer(EntityPlayer player, boolean worldRemote){ - wingedPlayers.remove(player.getUniqueID()+(worldRemote ? "-Remote" : "")); + WINGED_PLAYERS.remove(player.getUniqueID()+(worldRemote ? "-Remote" : "")); } /** @@ -69,7 +69,7 @@ public class ItemWingsOfTheBats extends ItemBase{ * @param player The Player */ public static void addWingsToPlayer(EntityPlayer player){ - wingedPlayers.add(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); + WINGED_PLAYERS.add(player.getUniqueID()+(player.worldObj.isRemote ? "-Remote" : "")); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java index 935d8929c..44e94a84a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensRecipeHandler.java @@ -28,9 +28,9 @@ import net.minecraft.item.ItemStack; import java.util.ArrayList; -public class LensRecipeHandler{ +public final class LensRecipeHandler{ - public static final ArrayList mainPageRecipes = new ArrayList(); + public static final ArrayList MAIN_PAGE_RECIPES = new ArrayList(); public static LensConversionRecipe recipeColorLens; public static LensConversionRecipe recipeSoulSand; public static LensConversionRecipe recipeGreenWall; @@ -43,29 +43,29 @@ public class LensRecipeHandler{ public static void init(){ //Crystal Blocks ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.REDSTONE_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.LAPIS_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.LAPIS.ordinal()), 400); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.DIAMOND_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.DIAMOND.ordinal()), 600); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.EMERALD_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.EMERALD.ordinal()), 1000); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.COAL_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), 600); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Blocks.IRON_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.IRON.ordinal()), 800); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); //Crystal Items ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.REDSTONE), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.REDSTONE.ordinal()), 40); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.DYE, 1, 4), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.LAPIS.ordinal()), 40); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.DIAMOND), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.DIAMOND.ordinal()), 60); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.EMERALD), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.EMERALD.ordinal()), 100); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.COAL), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.COAL.ordinal()), 60); - mainPageRecipes.add(RecipeUtil.lastReconstructorRecipe()); + MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(new ItemStack(Items.IRON_INGOT), new ItemStack(InitItems.itemCrystal, 1, TheCrystals.IRON.ordinal()), 80); //Lenses diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java index 572e18895..aca4cb11e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/Lenses.java @@ -13,7 +13,7 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.lens.LensConversion; -public class Lenses{ +public final class Lenses{ public static void init(){ ActuallyAdditionsAPI.lensDefaultConversion = new LensConversion(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java index 97ca8781d..b8b9f7e94 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -18,7 +18,7 @@ import net.minecraftforge.common.util.EnumHelper; import java.util.Locale; -public class InitArmorMaterials{ +public final class InitArmorMaterials{ public static ArmorMaterial armorMaterialEmerald; public static ArmorMaterial armorMaterialObsidian; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java index 74c267311..d631d2d69 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitToolMaterials.java @@ -16,7 +16,7 @@ import net.minecraftforge.common.util.EnumHelper; import java.util.Locale; -public class InitToolMaterials{ +public final class InitToolMaterials{ public static ToolMaterial toolMaterialEmerald; public static ToolMaterial toolMaterialObsidian; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java index 3b7692ce5..db69bb24d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/BannerHelper.java @@ -18,7 +18,7 @@ import net.minecraftforge.common.util.EnumHelper; import java.util.Locale; -public class BannerHelper{ +public final class BannerHelper{ public static void init(){ addCraftingPattern("Drill", new ItemStack(InitItems.itemDrill)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java index 1ef86a672..2c238b662 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DungeonLoot.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; //TODO Fix dungeon loot (oh god) -public class DungeonLoot{ +public final class DungeonLoot{ public static void init(){ if(ConfigBoolValues.DUNGEON_LOOT.isEnabled()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 1a7e1fe86..05da083e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -19,7 +19,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -public class LaserRelayConnectionHandler{ +public final class LaserRelayConnectionHandler{ public static NBTTagCompound writeNetworkToNBT(Network network){ NBTTagList list = new NBTTagList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java index 0105f55fb..8b88c32c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/SoundHandler.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; -public class SoundHandler{ +public final class SoundHandler{ public static SoundEvent duhDuhDuhDuuuh; public static SoundEvent coffeeMachine; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java index 4bb38ad46..3c4fa9f73 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/cloud/SmileyCloudEasterEggs.java @@ -24,9 +24,9 @@ import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.List; -public class SmileyCloudEasterEggs{ +public final class SmileyCloudEasterEggs{ - public static final List cloudStuff = new ArrayList(); + public static final List CLOUD_STUFF = new ArrayList(); static{ //Glenthor @@ -374,7 +374,7 @@ public class SmileyCloudEasterEggs{ } private static void register(ISmileyCloudEasterEgg egg){ - cloudStuff.add(egg); + CLOUD_STUFF.add(egg); } private static void renderHoldingItem(boolean leftHand, ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index b48ed9ea6..b0f840077 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -25,7 +25,7 @@ import java.util.Properties; public class SpecialRenderInit{ - public static final HashMap specialList = new HashMap(); + public static final HashMap SPECIAL_LIST = new HashMap(); public static void init(){ new ThreadSpecialFetcher(); @@ -60,7 +60,7 @@ public class SpecialRenderInit{ //Add a new Special Renderer to the list if(stack != null){ - specialList.put(key, new RenderSpecial(stack)); + SPECIAL_LIST.put(key, new RenderSpecial(stack)); } } } @@ -68,8 +68,8 @@ public class SpecialRenderInit{ @SubscribeEvent(priority = EventPriority.HIGHEST) public void onPlayerRender(RenderPlayerEvent.Pre event){ - if(!specialList.isEmpty()){ - for(Map.Entry entry : specialList.entrySet()){ + if(!SPECIAL_LIST.isEmpty()){ + for(Map.Entry entry : SPECIAL_LIST.entrySet()){ //Does the player have one of the names from the list? String playerName = event.getEntityPlayer().getName(); if(entry.getKey() != null && playerName != null){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java index dbdb8349d..46d93673b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.nei; -public class NEIBookletRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ +public final class NEIBookletRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ public static final String NAME = "actuallyadditions.booklet"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java index 8c18cf273..c16894c90 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.nei; -public class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ +public final class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ public static final String NAME = "actuallyadditions.coffee"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java index e281a37cd..3e0019800 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.nei; -public class NEICompostRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ +public final class NEICompostRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ public static final String NAME = "actuallyadditions.compost"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java index 554545af7..edb1ad4c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.nei; -public class NEIFurnaceDoubleRecipe /*extends TemplateRecipeHandler implements INEIRecipeHandler*/{ +public final class NEIFurnaceDoubleRecipe /*extends TemplateRecipeHandler implements INEIRecipeHandler*/{ public static final String NAME = "actuallyadditions.furnaceDouble"; @@ -33,7 +33,7 @@ public class NEIFurnaceDoubleRecipe /*extends TemplateRecipeHandler implements I @Override public void loadCraftingRecipes(String outputId, Object... results){ if(outputId.equals(NAME) && getClass() == NEIFurnaceDoubleRecipe.class){ - Map recipes = FurnaceRecipes.instance().getSmeltingList(); + Map recipes = FurnaceRecipes.INSTANCE().getSmeltingList(); for(Map.Entry recipe : recipes.entrySet()){ arecipes.add(new CachedFurn(recipe.getKey(), recipe.getValue())); } @@ -46,7 +46,7 @@ public class NEIFurnaceDoubleRecipe /*extends TemplateRecipeHandler implements I @SuppressWarnings("unchecked") @Override public void loadCraftingRecipes(ItemStack result){ - Map recipes = FurnaceRecipes.instance().getSmeltingList(); + Map recipes = FurnaceRecipes.INSTANCE().getSmeltingList(); for(Map.Entry recipe : recipes.entrySet()){ if(NEIServerUtils.areStacksSameType(recipe.getValue(), result)){ arecipes.add(new CachedFurn(recipe.getKey(), recipe.getValue())); @@ -57,7 +57,7 @@ public class NEIFurnaceDoubleRecipe /*extends TemplateRecipeHandler implements I @SuppressWarnings("unchecked") @Override public void loadUsageRecipes(ItemStack ingredient){ - Map recipes = FurnaceRecipes.instance().getSmeltingList(); + Map recipes = FurnaceRecipes.INSTANCE().getSmeltingList(); for(Map.Entry recipe : recipes.entrySet()){ if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getKey(), ingredient)){ CachedFurn theRecipe = new CachedFurn(recipe.getKey(), recipe.getValue()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java index 2ac2f4288..3f05da9a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.nei; -public class NEIHairyBallRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ +public final class NEIHairyBallRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ public static final String NAME = "actuallyadditions.ballOfHair"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java index daf7fd1b8..ce3fe9e1f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.nei; -public class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ +public final class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ public static final String NAME = "actuallyadditions.reconstructor"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java index f803df38e..586e8bd0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java @@ -10,7 +10,7 @@ package de.ellpeck.actuallyadditions.mod.nei; -public class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ +public final class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ public static final String NAME = "actuallyadditions.treasureChest"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 7d7962e17..360c5db25 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -37,9 +37,7 @@ import java.util.List; public final class PacketHandler{ - public static SimpleNetworkWrapper theNetwork; public static final List DATA_HANDLERS = new ArrayList(); - public static final IDataHandler PARTICLE_HANDLER = new IDataHandler(){ @Override @SideOnly(Side.CLIENT) @@ -47,7 +45,6 @@ public final class PacketHandler{ AssetUtil.renderParticlesFromAToB(compound.getDouble("StartX"), compound.getDouble("StartY"), compound.getDouble("StartZ"), compound.getDouble("EndX"), compound.getDouble("EndY"), compound.getDouble("EndZ"), compound.getInteger("ParticleAmount"), compound.getFloat("ParticleSize"), new float[]{compound.getFloat("Color1"), compound.getFloat("Color2"), compound.getFloat("Color3")}, compound.getFloat("AgeMultiplier")); } }; - public static final IDataHandler TILE_ENTITY_HANDLER = new IDataHandler(){ @Override @SideOnly(Side.CLIENT) @@ -61,7 +58,53 @@ public final class PacketHandler{ } } }; + public static final IDataHandler GUI_BUTTON_TO_TILE_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + if(tile instanceof IButtonReactor){ + IButtonReactor reactor = (IButtonReactor)tile; + reactor.onButtonPressed(compound.getInteger("ButtonID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); + } + } + }; + public static final IDataHandler GUI_NUMBER_TO_TILE_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + + if(tile instanceof INumberReactor){ + INumberReactor reactor = (INumberReactor)tile; + reactor.onNumberReceived(compound.getInteger("Number"), compound.getInteger("NumberID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); + } + } + }; + public static final IDataHandler GUI_STRING_TO_TILE_HANDLER = new IDataHandler(){ + @Override + public void handleData(NBTTagCompound compound){ + World world = DimensionManager.getWorld(compound.getInteger("WorldID")); + TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); + + if(tile instanceof IStringReactor){ + IStringReactor reactor = (IStringReactor)tile; + reactor.onTextReceived(compound.getString("Text"), compound.getInteger("TextID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); + } + } + }; + public static final IDataHandler PLAYER_DATA_TO_CLIENT_HANDLER = new IDataHandler(){ + @Override + @SideOnly(Side.CLIENT) + public void handleData(NBTTagCompound compound){ + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if(player != null){ + PlayerData.getDataFromPlayer(player).theCompound = compound; + } + } + }; + public static SimpleNetworkWrapper theNetwork; public static final IDataHandler BOOKLET_STAND_BUTTON_HANDLER = new IDataHandler(){ @Override public void handleData(NBTTagCompound compound){ @@ -79,46 +122,6 @@ public final class PacketHandler{ } } }; - - public static final IDataHandler GUI_BUTTON_TO_TILE_HANDLER = new IDataHandler(){ - @Override - public void handleData(NBTTagCompound compound){ - World world = DimensionManager.getWorld(compound.getInteger("WorldID")); - TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); - - if(tile instanceof IButtonReactor){ - IButtonReactor reactor = (IButtonReactor)tile; - reactor.onButtonPressed(compound.getInteger("ButtonID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); - } - } - }; - - public static final IDataHandler GUI_NUMBER_TO_TILE_HANDLER = new IDataHandler(){ - @Override - public void handleData(NBTTagCompound compound){ - World world = DimensionManager.getWorld(compound.getInteger("WorldID")); - TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); - - if(tile instanceof INumberReactor){ - INumberReactor reactor = (INumberReactor)tile; - reactor.onNumberReceived(compound.getInteger("Number"), compound.getInteger("NumberID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); - } - } - }; - - public static final IDataHandler GUI_STRING_TO_TILE_HANDLER = new IDataHandler(){ - @Override - public void handleData(NBTTagCompound compound){ - World world = DimensionManager.getWorld(compound.getInteger("WorldID")); - TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); - - if(tile instanceof IStringReactor){ - IStringReactor reactor = (IStringReactor)tile; - reactor.onTextReceived(compound.getString("Text"), compound.getInteger("TextID"), (EntityPlayer)world.getEntityByID(compound.getInteger("PlayerID"))); - } - } - }; - public static final IDataHandler CHANGE_PLAYER_DATA_HANDLER = new IDataHandler(){ @Override public void handleData(NBTTagCompound compound){ @@ -136,17 +139,6 @@ public final class PacketHandler{ } }; - public static final IDataHandler PLAYER_DATA_TO_CLIENT_HANDLER = new IDataHandler(){ - @Override - @SideOnly(Side.CLIENT) - public void handleData(NBTTagCompound compound){ - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if(player != null){ - PlayerData.getDataFromPlayer(player).theCompound = compound; - } - } - }; - public static void init(){ theNetwork = NetworkRegistry.INSTANCE.newSimpleChannel(ModUtil.MOD_ID); theNetwork.registerMessage(PacketServerToClient.Handler.class, PacketServerToClient.class, 0, Side.CLIENT); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java index b83861a1e..ba0693038 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ore/InitOreDict.java @@ -24,7 +24,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; -public class InitOreDict{ +public final class InitOreDict{ public static void init(){ ModUtil.LOGGER.info("Initializing OreDictionary Entries..."); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index 9ab99f51a..aa549d507 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -162,7 +162,7 @@ public class ClientProxy implements IProxy{ ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDisplayStand.class, new RenderDisplayStand()); - //VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png")); + //VillagerRegistry.INSTANCE().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID, "textures/entity/villager/jamVillager.png")); for(Item item : COLOR_PRODIVIDING_ITEMS_FOR_REGISTERING){ if(item instanceof IColorProvidingItem){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java index a8d518ad4..9d9772cb0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/CrusherRecipeRegistry.java @@ -22,7 +22,7 @@ import java.util.ArrayList; import java.util.List; -public class CrusherRecipeRegistry{ +public final class CrusherRecipeRegistry{ public static final ArrayList SEARCH_CASES = new ArrayList(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index ed15811e5..ad8235be2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -26,7 +26,7 @@ import java.util.HashMap; public class FuelHandler implements IFuelHandler{ - private static HashMap, Integer> fuelList = new HashMap, Integer>(); + private static final HashMap, Integer> FUEL_LIST = new HashMap, Integer>(); public static void init(){ ModUtil.LOGGER.info("Initializing Fuelstuffs..."); @@ -42,7 +42,7 @@ public class FuelHandler implements IFuelHandler{ } private static void addFuel(Item item, int metadata, int value){ - fuelList.put(Pair.of(item, metadata), value); + FUEL_LIST.put(Pair.of(item, metadata), value); } private static void addFuel(Block block, int metadata, int value){ @@ -53,13 +53,13 @@ public class FuelHandler implements IFuelHandler{ if(stack != null && stack.getItem() != null){ Pair pair = Pair.of(stack.getItem(), stack.getItemDamage()); - if(fuelList.containsKey(pair)){ - return fuelList.get(pair); + if(FUEL_LIST.containsKey(pair)){ + return FUEL_LIST.get(pair); } else{ pair = Pair.of(stack.getItem(), 0); - if(fuelList.containsKey(pair)){ - return fuelList.get(pair); + if(FUEL_LIST.containsKey(pair)){ + return FUEL_LIST.get(pair); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java index 97a642993..e3e8bc7cb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/HairyBallHandler.java @@ -16,7 +16,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -public class HairyBallHandler{ +public final class HairyBallHandler{ public static void init(){ ActuallyAdditionsAPI.addBallOfFurReturnItem(new ItemStack(Items.STRING), 100); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java index 2f848a05c..8ff8a54e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/TreasureChestHandler.java @@ -16,7 +16,7 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheJams; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -public class TreasureChestHandler{ +public final class TreasureChestHandler{ public static void init(){ ActuallyAdditionsAPI.addTreasureChestLoot(new ItemStack(Items.DIAMOND), 5, 1, 2); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 3b5739b6e..bdf0ff9ba 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -18,7 +18,6 @@ import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; @@ -28,7 +27,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 61c3c70bb..ebdd0c15b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -37,12 +37,11 @@ import net.minecraftforge.fml.common.registry.GameRegistry; public abstract class TileEntityBase extends TileEntity implements ITickable{ + public static boolean teslaLoaded; public final String name; public boolean isRedstonePowered; protected int ticksElapsed; - public static boolean teslaLoaded; - public TileEntityBase(String name){ this.name = "container."+ModUtil.MOD_ID+"."+name; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 6570a6750..5e6bbfd03 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 2a652e4bd..3dba7652c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -12,8 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntityFurnace; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java index 091b9cc83..d6c9ef76d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java @@ -22,7 +22,7 @@ import net.minecraft.util.EnumFacing; public class TileEntityDisplayStand extends TileEntityInventoryBase implements IEnergyDisplay, IEnergyReceiver{ - private EnergyStorage storage = new EnergyStorage(300000); + private final EnergyStorage storage = new EnergyStorage(300000); private int oldEnergy; public TileEntityDisplayStand(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 36363aeee..d040975ff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyContainerItem; import cofh.api.energy.IEnergyProvider; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index b76b7dda1..1919c1f60 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.*; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 1ec9e0536..93a66acfc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index c62515d97..793d9e183 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -25,7 +25,7 @@ import java.util.Map; public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements IEnergyReceiver{ - public Map receiversAround = new HashMap(); + public final Map receiversAround = new HashMap(); public TileEntityLaserRelayEnergy(){ super("laserRelay", false); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index 5adc60c5f..f6e7284bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -26,7 +26,7 @@ import java.util.List; public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ - public List handlersAround = new ArrayList(); + public final List handlersAround = new ArrayList(); public TileEntityLaserRelayItem(String name){ super(name, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index b090192e9..65eb218e9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -163,22 +163,6 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem }.setTile(this); } - @Override - public boolean isWhitelisted(ItemStack stack, boolean output){ - int slotStart = output ? 12 : 0; - return checkFilter(stack, output ? this.isRightWhitelist : this.isLeftWhitelist, this.slots, slotStart, slotStart+12); - } - - @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); - if(!isForSync){ - TileEntityInventoryBase.saveSlots(this.slots, compound); - } - compound.setBoolean("LeftWhitelist", this.isLeftWhitelist); - compound.setBoolean("RightWhitelist", this.isRightWhitelist); - } - public static boolean checkFilter(ItemStack stack, boolean isWhitelist, ItemStack[] slots, int start, int end){ if(stack != null){ for(int i = start; i < end; i++){ @@ -203,6 +187,22 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem return !isWhitelist; } + @Override + public boolean isWhitelisted(ItemStack stack, boolean output){ + int slotStart = output ? 12 : 0; + return checkFilter(stack, output ? this.isRightWhitelist : this.isLeftWhitelist, this.slots, slotStart, slotStart+12); + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + super.writeSyncableNBT(compound, isForSync); + if(!isForSync){ + TileEntityInventoryBase.saveSlots(this.slots, compound); + } + compound.setBoolean("LeftWhitelist", this.isLeftWhitelist); + compound.setBoolean("RightWhitelist", this.isRightWhitelist); + } + @Override public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.readSyncableNBT(compound, isForSync); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index c6f1d273e..29447fa9a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -13,15 +13,12 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 9f0e75805..8d80fc380 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -29,7 +29,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index 9f5163931..d4621656d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -13,9 +13,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.*; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 4b7fb4036..3609a9822 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java index de7f76ed0..3c5ddc8e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomLiquiface.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.fluids.Fluid; @@ -27,11 +26,6 @@ public class TileEntityPhantomLiquiface extends TileEntityPhantomface implements this.type = BlockPhantom.Type.LIQUIFACE; } - @Override - public void updateEntity(){ - super.updateEntity(); - } - @Override public boolean isBoundThingInRange(){ if(super.isBoundThingInRange()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 36cf1b918..439742590 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index efa5ae58c..e386e9c6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -24,7 +24,7 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement public static final int DEFAULT_RANGE = 32; public UUID connectedPlayer; - private EnergyStorage storage = new EnergyStorage(30000); + private final EnergyStorage storage = new EnergyStorage(30000); private int range; public TileEntityPlayerInterface(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 8ef3bdfa1..5cd50e63c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -21,6 +21,14 @@ import net.minecraft.util.EnumFacing; public class TileEntityXPSolidifier extends TileEntityInventoryBase implements IButtonReactor{ + private static final Integer[] XP_MAP = new Integer[256]; + + static{ + for(int i = 0; i < XP_MAP.length; i++){ + XP_MAP[i] = getExperienceForLevelImpl(i); + } + } + private final int[] buttonAmounts = new int[]{1, 5, 10, 20, 30, 40, 50, 64, -999}; public short amount; private short lastAmount; @@ -29,6 +37,66 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I super(1, "xpSolidifier"); } + public static int getExperienceForLevel(int level){ + if(level >= 0 && level < XP_MAP.length){ + return XP_MAP[level]; + } + if(level >= 21863){ + return Integer.MAX_VALUE; + } + return getExperienceForLevelImpl(level); + } + + private static int getExperienceForLevelImpl(int level){ + int res = 0; + for(int i = 0; i < level; i++){ + res += getXpBarCapacity(i); + if(res < 0){ + return Integer.MAX_VALUE; + } + } + return res; + } + + public static int getXpBarCapacity(int level){ + if(level >= 30){ + return 112+(level-30)*9; + } + else if(level >= 15){ + return 37+(level-15)*5; + } + return 7+level*2; + } + + public static int getLevelForExperience(int experience){ + for(int i = 0; i < XP_MAP.length; i++){ + if(XP_MAP[i] > experience){ + return i-1; + } + } + int i = XP_MAP.length; + while(getExperienceForLevel(i) <= experience){ + i++; + } + return i-1; + } + + public static int getPlayerXP(EntityPlayer player){ + return (int)(getExperienceForLevel(player.experienceLevel)+(player.experience*player.xpBarCap())); + } + + /* + * The below methods were excerpted from EnderIO by SleepyTrousers with permission, thanks! + */ + + public static void addPlayerXP(EntityPlayer player, int amount){ + int experience = Math.max(0, getPlayerXP(player)+amount); + player.experienceTotal = experience; + player.experienceLevel = getLevelForExperience(experience); + int expForLevel = getExperienceForLevel(player.experienceLevel); + player.experience = (float)(experience-expForLevel)/(float)player.xpBarCap(); + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ super.writeSyncableNBT(compound, sync); @@ -94,72 +162,4 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I } } } - - /* - * The below methods were excerpted from EnderIO by SleepyTrousers with permission, thanks! - */ - - private static final Integer[] XP_MAP = new Integer[256]; - - static{ - for(int i = 0; i < XP_MAP.length; i++){ - XP_MAP[i] = getExperienceForLevelImpl(i); - } - } - - public static int getExperienceForLevel(int level){ - if(level >= 0 && level < XP_MAP.length){ - return XP_MAP[level]; - } - if(level >= 21863){ - return Integer.MAX_VALUE; - } - return getExperienceForLevelImpl(level); - } - - private static int getExperienceForLevelImpl(int level){ - int res = 0; - for(int i = 0; i < level; i++){ - res += getXpBarCapacity(i); - if(res < 0){ - return Integer.MAX_VALUE; - } - } - return res; - } - - public static int getXpBarCapacity(int level){ - if(level >= 30){ - return 112+(level-30)*9; - } - else if(level >= 15){ - return 37+(level-15)*5; - } - return 7+level*2; - } - - public static int getLevelForExperience(int experience){ - for(int i = 0; i < XP_MAP.length; i++){ - if(XP_MAP[i] > experience){ - return i-1; - } - } - int i = XP_MAP.length; - while(getExperienceForLevel(i) <= experience){ - i++; - } - return i-1; - } - - public static int getPlayerXP(EntityPlayer player){ - return (int)(getExperienceForLevel(player.experienceLevel)+(player.experience*player.xpBarCap())); - } - - public static void addPlayerXP(EntityPlayer player, int amount){ - int experience = Math.max(0, getPlayerXP(player)+amount); - player.experienceTotal = experience; - player.experienceLevel = getLevelForExperience(experience); - int expForLevel = getExperienceForLevel(player.experienceLevel); - player.experience = (float)(experience-expForLevel)/(float)player.xpBarCap(); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java index 25866dd9b..97b4eab24 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; -public class UpdateChecker{ +public final class UpdateChecker{ public static final String DOWNLOAD_LINK = "http://ellpeck.de/actadddownload"; public static final String CHANGELOG_LINK = "http://ellpeck.de/actaddchangelog"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index b62508cf8..34c5e9711 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -25,7 +25,6 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.NetworkRegistry; @@ -33,7 +32,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.opengl.GL11; -public class AssetUtil{ +public final class AssetUtil{ public static final ResourceLocation GUI_INVENTORY_LOCATION = getGuiLocation("guiInventory"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java index 49f92d963..22d61c54f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java @@ -18,7 +18,7 @@ import net.minecraftforge.common.util.FakePlayerFactory; import java.util.UUID; -public class FakePlayerUtil{ +public final class FakePlayerUtil{ private static final String FAKE_NAME = ModUtil.MOD_ID+"fakeplayer"; private static final GameProfile FAKE_PROFILE = new GameProfile(UUID.nameUUIDFromBytes(FAKE_NAME.getBytes()), FAKE_NAME); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java index 4bfe8c252..5c5c198ad 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ItemUtil.java @@ -24,7 +24,7 @@ import net.minecraftforge.fml.common.registry.GameRegistry; import java.util.List; -public class ItemUtil{ +public final class ItemUtil{ public static Item getItemFromName(String name){ ResourceLocation resLoc = new ResourceLocation(name); @@ -43,7 +43,7 @@ public class ItemUtil{ itemBlock.setRegistryName(block.getRegistryName()); GameRegistry.register(itemBlock); - block.setCreativeTab(addTab ? CreativeTab.instance : null); + block.setCreativeTab(addTab ? CreativeTab.INSTANCE : null); } public static void registerItem(Item item, String name, boolean addTab){ @@ -52,7 +52,7 @@ public class ItemUtil{ item.setRegistryName(ModUtil.MOD_ID, name); GameRegistry.register(item); - item.setCreativeTab(addTab ? CreativeTab.instance : null); + item.setCreativeTab(addTab ? CreativeTab.INSTANCE : null); if(item instanceof IColorProvidingItem){ ActuallyAdditions.proxy.addColoredItem(item); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java index a7fc537d8..ddf051598 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/ModUtil.java @@ -14,7 +14,7 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -public class ModUtil{ +public final class ModUtil{ public static final String VERSION = "@VERSION@"; //build.gradle diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java index be19a509b..afe2996af 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java @@ -20,7 +20,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class PosUtil{ +public final class PosUtil{ public static Material getMaterial(BlockPos pos, IBlockAccess world){ return getBlock(pos, world).getMaterial(world.getBlockState(pos)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java index 2a4274056..084b5d91c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/RecipeUtil.java @@ -18,7 +18,7 @@ import net.minecraft.item.crafting.IRecipe; import java.util.List; -public class RecipeUtil{ +public final class RecipeUtil{ public static LensConversionRecipe lastReconstructorRecipe(){ List list = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index e36e07e0c..827ddb41f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -16,7 +16,7 @@ import net.minecraftforge.fluids.FluidTank; import java.util.List; -public class StringUtil{ +public final class StringUtil{ public static final int DECIMAL_COLOR_WHITE = 16777215; public static final int DECIMAL_COLOR_GRAY_TEXT = 4210752; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 437b61bb8..e8cbb43df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -20,7 +20,7 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.Locale; import java.util.Random; -public class Util{ +public final class Util{ public static final Random RANDOM = new Random(); public static final int WILDCARD = OreDictionary.WILDCARD_VALUE; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 127176cf2..809170d5e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -32,7 +32,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.play.client.CPacketPlayerDigging; import net.minecraft.network.play.server.SPacketBlockChange; import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityBanner; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java index 08331ef6a..e255ff944 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java @@ -17,7 +17,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.event.FMLInterModComms; -public class CompatUtil{ +public final class CompatUtil{ public static void registerMFRPlant(Block block){ FMLInterModComms.sendMessage("MineFactoryReloaded", "registerHarvestable_Crop", new ItemStack(block, 1, 7)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java index b0cf1fd36..96b2a607a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java @@ -21,25 +21,20 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; import java.util.HashMap; import java.util.Map; public final class TeslaUtil{ + private static final Map TESLA_MAP = new HashMap(); @CapabilityInject(ITeslaConsumer.class) public static Capability teslaConsumer = null; - @CapabilityInject(ITeslaProducer.class) public static Capability teslaProducer = null; - @CapabilityInject(ITeslaHolder.class) public static Capability teslaHolder = null; - private static final Map TESLA_MAP = new HashMap(); - public static T getTeslaCapability(TileEntityBase tile, Capability capability, EnumFacing facing){ boolean receive = tile instanceof IEnergyReceiver && capability == teslaConsumer; boolean provide = tile instanceof IEnergyProvider && capability == teslaProducer; @@ -52,7 +47,7 @@ public final class TeslaUtil{ } } - public static boolean doTeslaInteraction(TileEntity tile, TileEntity otherTile, EnumFacing side){ + public static void doTeslaInteraction(TileEntity tile, TileEntity otherTile, EnumFacing side){ ITeslaConsumer handlerTo = null; ITeslaProducer handlerFrom = null; @@ -68,10 +63,8 @@ public final class TeslaUtil{ if(drain > 0){ long filled = handlerTo.givePower(drain, false); handlerFrom.takePower(filled, false); - return true; } } - return false; } private static TeslaHandler getHandler(TileEntityBase tile, EnumFacing facing){ From dec060241c87201d4ee44f1ffe21a08e5e907980 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 17 Jun 2016 23:54:20 +0200 Subject: [PATCH 287/322] no --- .../ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 83c79e6b1..f061d87ec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -174,7 +174,7 @@ public final class ActuallyAdditionsAPI{ * @param output The output as an ItemStack * @param energyUse The amount of RF used per conversion * @param type The type of lens used for the conversion. To use the default type, use method below. - * Note how this always has to be the same INSTANCE of the lens type that the item also has for it to work! + * Note how this always has to be the same instance of the lens type that the item also has for it to work! */ public static void addReconstructorLensConversionRecipe(ItemStack input, ItemStack output, int energyUse, LensConversion type){ RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); @@ -191,7 +191,7 @@ public final class ActuallyAdditionsAPI{ * @param output The output's OreDictionary name * @param energyUse The amount of RF used per conversion * @param type The type of lens used for the conversion. To use the default type, use method below - * Note how this always has to be the same INSTANCE of the lens type that the item also has for it to work! + * Note how this always has to be the same instance of the lens type that the item also has for it to work! */ public static void addReconstructorLensConversionRecipe(String input, String output, int energyUse, LensConversion type){ RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(new LensConversionRecipe(input, output, energyUse, type)); @@ -204,7 +204,7 @@ public final class ActuallyAdditionsAPI{ /** * Adds an item and the way it is modified to the Atomic Reconstructor's color lens. * This also works for blocks, but they have to be in their item form. - * The way it is modified is an INSTANCE of IColorLensChanger. When modifying the item, + * The way it is modified is an instance of IColorLensChanger. When modifying the item, * its modifyItem() method will be called with a stack containing the item. * * @param item The item (or block's item) to add From 7a26ae70dff3f70a5fc80a535d7ee41dc1627281 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 18 Jun 2016 01:04:25 +0200 Subject: [PATCH 288/322] Updated logo and pictures~ --- pics/forum1.png | Bin 745704 -> 0 bytes pics/forum2.png | Bin 926509 -> 0 bytes pics/items.png | Bin 511684 -> 0 bytes pics/logo.png | Bin 0 -> 1472158 bytes pics/logoBig.png | Bin 355678 -> 0 bytes pics/logoSquare.png | Bin 2921 -> 5212 bytes .../actuallyadditions/textures/logo.png | Bin 103313 -> 115053 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 pics/forum1.png delete mode 100644 pics/forum2.png delete mode 100644 pics/items.png create mode 100644 pics/logo.png delete mode 100644 pics/logoBig.png diff --git a/pics/forum1.png b/pics/forum1.png deleted file mode 100644 index 58192e5b7a4067fb7573502b0869691753eb9e28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745704 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

ZR@YXpaKh`tI$*ar<#?xOQLP4b#1=UC&%)kBaz7 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

A6+t(AwOL zzPvBP3n}RRKe--L_`LD=Ro56^m9j{My|Ca}nw|SH^qEpSNljMN^38Rdd(IjG7p}X9 z|Jk)<-*!w7oivN2Gg+o2`)j!EEZrV^W~_vyqok?U3G#PF6F;70e^zJv7gyY8b0ZFE zdr(i1cXX^{S$N&!I&cy4i23xGS1)^h8Q=f+w{<(ii!zl0vM+?5b)M#8oiKx8eGui- zD)3yPZsmUBSwr5k2v#GceGGkJQOjt%4;)#U?^DVIdCav|DH$lkqvgJ@uzh?M7+hzq zBi!~WvW=H68gb?JL;3mS53AP=Ca#p9>qne^K6e&QW(X zk><$K7SZ(8I>y>uKJBZ*eZ#^*R$rUsd6P6JX&hrTID7n`5XV6MPeKaOGY>g_hoRJ}G0snZ0`S<6KgePhJ5 z7zn)QKO|j!tUP!!0XX2TLbf;)FLG!PQBM|mHxzh1ac9(Li%P5(J;=f}Wgpyg-TsFA zO!uq%lyhbK>?kb9=lS6VSk?*l;xx#LQ*4z zs|fVOYf|#GiYXtcQ0q0;1xK&|J9~J~agfaYA zJL)TvbzLU1p(LDm&Gxxvtj}a5Yqwg)~I0(?H|8m2X!L=0Ic9hNyk-U*BwtDiLj}!#{~Mbsf1ee7(hW?hO%fvkD5Q3Ct6PYGWmJ#m-!`}}olIrh+ZIf$cP+wU& zigKQ7WqC;c>OG{Ljv;hNTBl0tc|>NcUp;m&a4-35PX1c-psx!XNu6bAd3AZh-@Gj7 zUH>tX>kpJWj!OrI-_!3-QTJmVRf|~SIqt86-D`94-<_sNpNL7!H0mgU=ws3hAN@+M z&u_#Ny@C0A?gHQuURK*F4TiWOtpHY zLcaNzXW!u2F#R_4cu<;CWD*6SIh-zqR7rwr#?-W47W@c8ExFwH<9OG7MW)>G3d}|v(yRxSxx)d_XYg_rm&ZXM57_~B7=Hl1kP0> zq!WDoZw%5R_ajhl;&981Owy>Bs+7K+qE5tD=l5rej<7a)4te0WA81g9WUEE7e3 zxanNlekC0}`DXAkiD!?(?-ltUunm9P{nc&jzZ3uVpV{BnG-9#!x8%BkuS;z1L1;r} zZB9QO!pp)QBZ6#7l0lt=&r3jt@*)_C2K2*_@x%#;0095=NklrZA5+R5LWPU&|>>e}&0hmfZQ1J)3_%kxuhupJ8Lkz^8$-a#JyUM(S(*p2_ z3cwqZiG)ug09iWuDTV+e0OcZFJAJ4Lz&mG;EH+H-%Dym*(FWB61K*J=HdlBpKcm|y~hjpAH+EJ17@R<0R105F5OCNA9n$JgZtO5@m z(nP1u8fux)TgH2mmp+fJbH(SG*c*dRVQVA^t&`@UGsFMl!_z}U(~DxnmI=QxN=KITBKlT^#=v*~Rq|V4Aq?c9mw2<0hqYg!ko>YvKjo-5LHGpL zfnNsK$~v=InTFQL6Qb;!MDo|)YbviQ2$D?l&7pL9$~E^QZxxV-ElN?!pLNDx`gl6Z zFM_}4Pn*Z z?q!nRS5j`k_L(nWP(ShEh^~2YG63%go0yRMBy`~mkp;>7Ake(y#A3?tIU;G8JWgZimL8_(C5)H#_D>?mz4+GQs% zB?6ErzK@6ioFM?eE88)&H}2yB@x+eD7DqSsYjg>ncgmK1~nC&|jkOX5t5|OUq{4TDg|FEq(V?A5q(Utwz0UPLu)H_Xf6AjBLx|jo6Rj~ z`>^!bagmvs6r^1E^NNd!crna{hMfcGN+nY!-6+J2RQDggO@h7)<4r3t`s z>DL#2Uiuy0yS+sW8YPksY1eT~$wi-W)Yw-zuzQ=rzK*j``QMs+eoB4^WZ&(xM^yq& z3BX(Dj;H`UeYFe$K69}M!0YP=RRB_Oya2o)KY8$KfieMj`?xM5!j0q~w(-G9reh-s>_M46Tq~3rYv6DVfBgTvzZ4T|{-MId##U6N4EcPYij-Amc`oH_feUEw0ld^ zOS-d;i|5TRwXq}jhtpj?Z zYn*#T%DQM-C>>!UOuKtzik>W~P!C#t#Iw=nIoN{MPfdI#Wr`En?T@ zvp>I~k>MVD{&S4%d_2}cdL8L0c{Me}&Udf|$nhAO%RLr5%FFofzuZ&4C(lsI&3ELS zXp^PKnF;kH6V-Fi`Us(^^BY5-k>4q1C zh`lUdmqFd!EBEp@QZKe8W+C^dL3!%8FQv|qdO+I|lJ+U$c{1GBK%lT#L=Tf;Z*_Rd zVoar(YZ~h!(mlwtA3VKM{mi{(5nzpX%i0T<^A0aF}lpIA4p>y8&$|F|x3egoC;N zJWc9(PL=)2epqnCSalx|=M^M!uqXQ@Z@|wP7$HA1NqFsYSs54!c*6u>6?SnkkRkv( z33wI(s1k6W!f4ik_}eT_{27d#g}wkxqWzBS-L7&^IanYPFGl-$`8P-Wffs*<3cy`O z0G>FyM+G2JfXKgN^8c%nXfiemz?ZL|(h$lwssOxswg|wp*N&;_ymInD5rC%;EpAF7 zJa^~BKmbz6w6N5IWCD;Iqr9alBEfgO?+5M7Sw(*z_{I`YNqea`hDApiJm6zx-$Nc2 zA0V5Y?1R`4(N48g*mL2y$i9}xmAB=Xnb=##J$X=QzDOs4PR{J1UI7|TgM5?9o(3zT zqbKy1ppz$8h@gwI(;y!**=KN0EuZDQvWHwsX!y}tx2Qh&!TEYDZQ z8c!AO4fd6m!zI}8dO%KC^cm0@;ImBfMdCf>^Dja}jdW+ykIuG9NcPijh%Le0moc(0 zlQDBZRB?Y%#yLiIK6B9_G;}bamNoK=&Q~V)#_;!jcHfy)qd}5394pkTME`Pr{$fO63Y z=SH+9`AmL(|3BU?1OaI9JhEs|F!2N2hsZ0WUF?7@gYOu0KL2BJ92? z`E8McS*L9dRtI=#(Cdiu|Kz+P)^W5tE#&hN5SDiSJVVy6CIXN-{N8xHtmeB+0Dg}l zz~TE32!{S50O@pcKhySsa&FXZyzE&1!eb2b$3HvyeNa!&gmiV!Jy!dc=Ooa^k^g1a z**{z7(Aupt(Ds3}4SEC-*fETbqg+#;Fw((C{YIvQAaqewH_QDhlYzYCDFUuvK8#HEjln+V(xjj-FEt%rZbccW)Rlp= zVYMm&E0h^qCAgD;Q&O<(qbJYm@467kvwaz8Ov^kdLht75=Os_OdyyzVq5$XZr;~zg zO8^+F1A`9zbwiio`YUI~rC^O5y!G7a#nsb?69HHxAo35E2|%I=+xNc&Isv$3h%a;d zEt}sDL06>T%!t1r{X8ZB+17>)pEy_qATkgEi2Nhtu5BC|2tXnLugm9T>V>s^i?i3) z7B@B+qkTXZ|6ph^A*2YvtCx;;LxANcp`BVVYN0U!h_%*^%L*{$ZVq3o5BV{&M$a;+ z!0j!*K_h@p*sA!Bu(27T78@jBojyZ5IXwKAfZ+4=L{b8IoTW*ng+qs`)Jl8~q?h@Q zRPsss4LZkB?9Ig@pFa8htJ=Uqre+VVW$44uohuD9$|d_=RrdKP)e?y*jlYB}?|VpN ze=}s|(hDOm_*Ma-$`B%J%)+1%HWM0<{vITa+S$5K`W@b9nz)KGCd1}dgsg7yklyUP zfHG)UCvYz8`#XOri}N7*tb8Nhyx?1v^2WbJoFYvI!YrjP|9}bNZGI^PLMzX%Ol$_k zkDtR4IA@KNlj9DApF`8ec1S<@UL@`p!EDmY*RLwU>h+Cv?J`6oF3wDYo1%ntQ!jAhE zL8Eos7YM0>y#$y<^2H!p4YIOL^h~=pKay(`>OYUwwLB|Rq^ueUE0b7|b>O`4TZMS8 z?8~B%?+5nd_v_QY5>-U_G9RBab6_8||KdwYkB>m~Y4B|k;90_p5}P_;8NU5#atx?v zyx1Cpj_`>K(&35njRibd#dl5w;O9>)w(Q@;5MUMvfrs5^30oh3RQnsxNhg-)8|P>9 zycw^5w+xfkXR-d2dR6X)DY$k-TxLTAJ-lR#*C^KI^ey@?C**mz1nOQNXb_{UXF}xji{V_PlvanExzh{@C=PPxkoo|KDeBak-b*Xz6`L-(c zt>14(FM7LT&kuvotQ^gSNJNVqRBGhlv+rH)P0P~}%7CYq2Sxt2{kNz#VQi?YiNY~S zNLi;mQ0KC5E&CtJ^{jMJl^s1v=;R>v5YtB#aS3u>lGfn@BV~xNNxdldn3H$VN2q;t zi!$ea*SY*;e;)R4`@#Kitf?W)WnRM~33VY5fqWs~Sk3wNo9C4q=Z-F(zPL7&fK>qE zq)Y$;0#GI3u_6I+T6}j^qUamL3BbPi^YRZe;pbr`-y#5W;b+95zGLj)wQaF)=Qd5p zsY82;02DS3msNtv7{*v%lMK9Ye7~-!!e>mJ$k1R`P#kg2A^cTi7=PadG8ut_Hdzs)egW+I2Y^a88rH%q@v@+ z!ytW7S9tIgM=$+wtCb5S8uqXHvD ziO~4+52-QO&gT(Qz?V@Eoj9&-Ci}n-yPgt$5#9!~@0RaX;5`U9AKo%^ztCCEgx(xD zZ{OkMK4eHOog&}(nuD%@S?^(_Q;huM^KZyD+VIszRE{>{-F~yqZiM{(OZ-!ZRlu}fRKqmBJmhLZ}{jd zqjhea)XVUlR9~(OLd{_ggCcX23!c7HLLZqGg17_ BpVbM> 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�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⪙-SzXJ5xX4eAh`&xw+=V~2*v<+SNSppI1I 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 Lv!p5Bfj?3z#wl+zo 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 z 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

)GnBhV0BqU`fYn|Q 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ࢥic3UzI=1ZcR*TXIe!czF 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%0D%F)XzKdv!r_ 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�~zwr?iyFa1%j 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

    *}Z%7>AtwS%n52YqCgOi&we`4g2$T2 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©K$puuG<%qNCg&YaX5 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 z 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%0AdX-p58SQ)kPo%Ua22ig{fP+BuR@EkV(jZ} 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

    DVoEMCN6 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 z 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

    n*6T|B= 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 z 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ξ8qg1qAyxyt%0}(Y7J3<92SJYYCrQXNZ_nosJSqPAsFqjTtqI{* z)H?_LY-ie>E*6eB+rk%2_uT#W>gFfqB@wvV&GgUzk&?O&@Nt<6O7FJ8DPQ#|mbUrC zgLMw%aK63Qs=}9s*^X9#tgv6`q!0*YMSeD%@+aOr_}ka+ZD2?$AlZX7lr5Wb*EVY{ zXk5C)k+IA$K#A_C_`eMrJ)3<|Dbxh(ung_z zgOpim&X$xTu1G@@y=q|sjnx6c^88B^XQFe~c~#JDWW9uo|H9@^(6r`LB4+?InjHzZ zf@Zcbf7RAxu52y>8=N1MDoo^2*HTCI@5W)+k7@$ihr4{re5IgOE!0DV3EGbHl3pr5 zNrpN6Sdpuw5<|wj)ap_PoAXYBZWyNqpqn~wWdi|5IFZi?Kjm4$g>np_24*augRd$w zn{ggwI!c~J{2s|e>Kj3<%)>Fe4uJ%q83aZ!Q+LTlR`deFIYd@M_-bdSB21!5)8 zeuEz$N7X++ko&54F?9}}fLy1{*4{jd*(97tH6ljW&xec|!DDgAzkT7!5;A7YPx{T$ zlPYSjqQ2oZ)prTAF*kL(w*J4g1SYWa^3w;HR47b}Qt}ei0`}q31q@fu9l2=pzXQEc zrhtzWH?=F~io%mklTiZrv8Q}b1Oy`WZ7%yiGa1P;T8^p^!icRDQ-Xx3_;wn33^rSq z@(Y+%;)&IM)@F9@@L_RMBZH{$K_q8GG8GdgmBJ9=qYVT+d?=?7t#Jb{qHz~w2p6Sv zx2>f}zG9=-lxvaGl$U(C=GeTej*eom8rvUi)iCtibpm%ZO!eUT2uQyKTE!3v-Lk8d zcNr%qC$gOTqN9Ya)xKz@B`A&`q|<3!p>2-krYo)u08K&zRI+b2obl+oGKPTxd$ICho3$62Dd>7J!#VoB~7dG6p*pKiI9d8hpkPP}VFGZ?9oTWtg3 zSh9;)V*k`Mp2ds2-Szv7ndoA#iWdz-c=|eDP z^Qq)1SjVH!4!06y^R|nDMTA=Y*zON@bPsqC>!o|wY-=}`+%;!Exe}jtu%_5@d)Q@E zpIO3kb~=*E^Bi*mrcSK=&R(luWvI}Njz$!3Yv)Gl##>RmhFd?U+k!Dvi?}P8J(&DA z`0v?+xZT@=ib1!Wzxz3h(uP+L)gJP9nYs~9oh@GZd{w{s^`Y?i+>Auk1-2mE#I|~2z_vO-) z>@UE+YYyJjm&)5Pu{mG*i_?!}r`TSYL#eIypz@28+w)G)>79k1_OxwhVRjGEj<$9S zaeZio#nU8UQI8&84kr^8g6ZRr$O(8lgKXzCR9Mqqc@hwWdP3eIyPRWoexJs)*0R1% zL8vQ5 zsO=^(``dVbwzyG>`Iq$YOh0*$PFqmC!ri3M7BmSD?lj0F{3v0W`$Rt zw4oS>uIg#AhB4G+cF8(N4}hMJi_HDWhUzm;R(%)!qcdYq3XP>fBAqe%Do5Xf5O;a_ zgAX4Xp)LRZMGRfrnAX*J`A6-A4U#(V0S(81L;PU@Kgxop{^PHU`yO*^@(wc>IL zu+O18wKv)>(mYD%eE9dL#>~ktjr4pcT;TJELb)P9r+9Yd6KngdAT|L3m_Bnw>1M;> z=V7zsNsL=Q*M%C7-?P`R3e~TB?8k-ZwqLff}Qr2>^QV%S^SD=-yFJh@XEn>ve$N~cu2F4Vy(@A4Y~h_x*}JQ& z1rzDQ!L5WC>x`=D!-kNrQTSiG3r>PzuHx^osQ$5EacR5bU{%>lsh!{L$=*NxHxmV0 zgcA-5&A&5Os6!hA$7E8})M}fK3&q>2`qWCd0T*U;4{#eiH3DM5YWGpC+r5sMUxH=W zRYqxu^<1LlR-s;F@pgbzF;-va`14)h;cMd@8c&x1o+1Js5x-- z&dukKLsN9>PUhl($Y3HL`L3ps+MQ_s@iSNo4fD^VTfnt5T0im0IU456_3tB7%funp z6g=J#>ZlvCPgjf$98ZD+R&u&<$dJ_Ce6ap21xY%tKL*z;=XfCjs>4khx7{v!PDf`; zpzN+@@8SO=>Mi`5`s4Qhv(X@}grt&6hjfb4tr$XvMJ1p(7-iPc4 zoRVfH`$X$uUoq0h1Q*xq#RXH-&Wei#4FUE~HshgzahNpK*#&DNm6}WW2zNu+QhGP+ zTKumW#J^EIiL0a0@v80zLH(((ovH==L;z;NgdjhmL>PsAaKGIC-D-gQdyz-MJaoRS z4q-rs7ynToY~~4>u`FmAo!C|7MuWC1_4WVx@Q;W=DC-wL8{Xk7<0Y!7JofH1pn|$c z5cKzQ)o)eC{JEmU6B0EZ#3sX}>Hxh-6e z176}bNE91r2X58bf>TC*=_wg6FYt`=gRKlyguU3}W5dw4Z4}YV z&cmj&64l|V9lME$X={=+oK7Uqgm6BXSa>zxc&^!fsg^#{o?7vpol0Zzx;%tY;2z$} zgWz%MO)vH5lEq3f{p4~#zKvh$&?cP#7lS-mTkb!`2b8ZZZE3)XRtw^}8I`LtPc78R z_C3c3QV-ul8454JD}Cel|BO$Yi)2o8FjS_h;6KG0q4zOhY{_Nn+x6vVJ99JVY4~DwRGiAEk6vxtO{=O+@QDw~i+a9k6SkUm^ z03eX2fMxQF{xELqt1x*cA zr_0_R&{onY^4b%V;Bx$>RJc_!lMo5^fn+Tsh5zHZ^m6!o0H@VXb{Y)|R4xh1lrJg;X)Dvqn`#{5gnk0@XP7X`wOCjrb8bFOrHO| zuO4#3V`8+oV={lyTS!OBd)cgS_hN6c^Dxt*;E;!2vH8`%{~Z#lkhedoc?%)0lF+-m zqg?BHz{{28?~ge8l&SK;5Qis|YD|U>ZDC%&2ApCui7(Pj2SS-N0pBE!QPi`7{i!&TelE$978~E}M<4z#&N*nNFcCe#y&<+&dUm-!N2nhv3+%$i59l zF9qn_1DBG1>n;JL-E9}^pI-L=g_ zKk6A?cy7o$g7c;VtEqeJkKn4zNELFz;jdI+MHMNsdaeP~=#oPHLCe<0Pe*3t&}r>! z4NwGMo`1!iQeltvs3qI>Yjx-t!%^;Cs}(nLk)fIzV~fA=k=cI-WvJu&{h}!8<=1_- zUo%qX7Uy%x+p`OS^qi{gM^=Ps_KQPxSVcy}7Y9~5p*Gfp)XyAbyoE}8CskFK)5Jab z_Ibn@9yrOU#JCIY%i~s$upfYItRTQzeEF}$LL;3RCz5}#NwO1hSxlP0Fi+Zv2hB;$ z5`Li)qSz+YA;%WQ!;9^_R5&K`-<_xrP6B(Js&9sf% z6yh?&KT3~_StY(KvwDGo?!De%T6~BaJLm1DP!~MxSmCLA`3Y=;oC1#x)sNaQM@bju z!TZ8@b-II)!VzGu7zN0X>rS$5vsf!V{5;d6$&S+@Xi-&Jl#*nRl#7hX)xzTZBdZdT#_x^y>+UfjiAlo>(=y zYA95lC+&^ABP!v+A9(4r!>nfit5FaTQVI0dfs{meFAtb;$OL4)CoxGa?rxx}uYL?0 z*C6r+N?ZNwTgxn&vX60Ft#e$SI6hXQ^hv*fmwW$y__TkQy(n~DE!j0*^ThN;kXUG) zYJxjicq>f*tUEv2W!fR-seiBm;AKxxyt%4xm8ttZE(tlV^dr9T)EbUj0UVaKcPX{NFKy3-aV9<^C!Og9&wL^ml9L%)%id{{|;%5|IC6%%t8g{EO3{sXB&{}NJ*LZ=n43fEsV#S{RpDmNaw zAhVq~U}>|$JO+uQ#t$z!@F$oHF{)VoSM^}W(aV0oL=Rw+yu8>Q5-v5+;P$nt4$mAR zU5P-pbw81jkWF{W(8#bxzNNdjM0X}V$ahmvHck-oc2AfJED@l+cO_8jO@6M%g4X=R z?$;AYk`Oi!ayrrISbx%PzbuD7ZTHO{Jnh?;zWe&sVh;#=Kn;gTZ%D)c7Wwi9RD7_H z>DVFV)rA?IJ{w%JYHdWmW0~2x#YIsw>PX+th-_J>f^DfOO3<$f`>NT&ZInAUC_AvZ z%|@>?ha2!~>X(^STirAoi?MVr3=jp6k@714C6#MP5YA-yU*x>XhkX|!3$bb^sj>&o zQ;}zZ#|9t z$O=)rkU4KJ@mlB1^B3*2If6(O!Ki6C!DXCOW z2%|rtd}+Ces4(GFcNhk;m4#H${+c11{X$(bhikPaTkRDb5Z#4+@s42Y@%!kNQXoa5 zMi7u-Q&1wfFJ`>cbV>Hd-yvI^Zx0LV$&)(VDSqDLh_Q7qtdZcxZ{DJEwA!q_&Adp@%)&9JJMYxb26m) zm6sx3L{8LxuUsP6$S4rABh)`9wp)HJgrpEjK+z?;cLg6MY4gSwC=VW4_TxLkU(`}~^IV~Ia45%}Yx z8Uxct0x@M-onpJ`f3xXeCiNG8PN%_8gz1w==PUO#NUp6IK-@2HK+aUjRE<<_dr~I} zcEYK=0{7R@dNEh{rnr%*{3oYT)IjlAMXh@>*W{(L7=+K zZ~+`TXgUmvO+c@Yuhkzk0BH^PM^Y1B?01$IgV+4yLOR8`L~{-)IQ4eRZfrYKNO&c~ zqF2HeX>R1zd&0c5feEC|0BL+b*dPMxxr#)GlP;z^B4*Um3VE>k7ZbVhb8=>_@e~=h?4BK_3GSRs-Ss1Lvbj)T zRuOL_qk zGHN2m4>f1~FganGY%(qyL2ZM@#;jn+YEj--yX`^i^g{LuP!08B*VJm)<8He*j%~C z8Zy(S=K+!abf9`x08%OI@lp5Z?}A+!u_ zu^w2?>$(FbG;m>>7I4w=S3f86JPIA|7~c%rG;-cfyTfEPPR4!8+sn_1Z5OV-IIAYT z1^BjMfk_}3a=~a?MvkV*nCJyJ3dL!hX390is%hUWMsBQd7~1m3v2EU{_%(fyT&SlI%5QB6F<;9ub{D-N7bRcMn^B9W+`?a zu%2o#wu~n4+ReEZ)rA+Kcy%@!PkoTf&c2f;uQYeOIL!|XZrk(7E4{dm*X}z9+FT#- z+s8C)X=<)qO$Z;Dwkr9dQlL<#2_s8d!O0eRwEi3I-*PIU)OrFdD8Ws|*o$mb&%~Ky zH3t?*b30%3HEKo8aq{}w`Os+M?~ScIxhOA>>tTPJVv^I}ND7b;@i zcE>j$dTw136rPWiMixWH+#uEkLNPH-UN_a#4x~aq{O(g`FgW^Xq?i_(o}YaeqY26- zv%KVQ?@W)t*a98iUHESM+@rEeW{oc(kj#pZ_uUcxG_JOYl?hy{4UVqFD5mn~M;;!a zq==)S&`nt8>5IG^m+(`3ODoZv&krzO9ZVCa60v+3DFyXkjy_^asQ?KbAws;U@B2$m zHKYl!)VCs)BUyv$Rl(5EFJ=)`7Y3DNU}R|hmuZi@diXE3G&WXi%;t2RlncV(a$+$z zA$cu_sza)F){CuNr3;`dkY-+J(^A~waM;lB1TTcJ#! z6=B5?+@U>_(Dm(9z8b+^uk!oY4%ob~84Cf~jZisXkAKp~9o!H($SJsJiB5O0VRC@O ztQWbEx&`{cQ&4?Dm&}9#Gd(6~LipKgdVQd8IgV`5Prii_Y1f-(A`WwMR5vdudB#7FJX$HG9p$yb%0 z*qbn#Vl-aA@~8zMG=Lv`6-IX17;xu?M;v---hX*zCdPX=vy`y^lk7Hx779(i zn_EG)D5e#3JpPFOA&nRR5(~-XQ__5*aR-T%Q5VI%Gd0a9J!Ol0QC+AccUJPi-xJE+ zC(G0OCr4%w1=v!d4Y0Bw`9@D6Sx{R<(vwT)@?0#(R4FAB%mX>YM{4xv?zLwx|#bQ z7gF+@JxTp>>Czx`dG5P^!9L+GTE0GKI$Z{LM;=^fK0AGFM-1>=*Aq`lr~gL#O8&%* zc#yjLvf*8*5F}))pJANKw}fX zORv@N%cDrm(o6?!wBph=lBlveEjXs=er5#o(htG^Zp2pjf|dx^JWO5)Lli;hnKa9g)6Fm{L ztbYW-!F7-2&DKSJ5ECx$_sM{xVuekWo*B+PqFTwZJ@FBK|I9;Ik)=+s&?w`h)s{q5 zwb|nMl%v2t_N5~#qE>&cFg_vGJ1y2#zTeCA6~ z->MfoZT%kYcHaeX#-gucVyMC_*&&J&E2I6Zc>$lngNUG}%G+KWCB?PvHw}#_p$%_| zlDb`Nk1-WHN3P0(A@H*QtKjBI61AiJ{mo>48tHGiQT~hq{6VNCy)E5McBU|m)CZ(TR&w8?3jMk@ON{wQ6yd;ILo`#+`B|g<^+t~ai3zZqtWnW z)|%~DK$v6ql`nLZzt^P?m#jQ*1>$;LxASmA15ru9t1=Hqy9=R=zr$#&=#DF+gB~YS zL>}eZycIqy-)yA?_wxP3<=2%D0gFmtky~3i9REHG@&uX?42Wm*xk{98B0$E z>@wYzEoJg7qk}3dHuQnq^Ubo3+ts%L%tj8-c3Ojdhaz{3IC1fmtQW`zUf*!g22u>m zd%Q)I4noT7_nm0RZ9S6{Vy%$7KVP6Wu8MuK;g6D&SEAM!6f$Ra8}AwWWFdWkTV?TaokE)$;urV3%dX#>6rP4CK=eMwft5mc73e z+OIiwz6u{XdIc{uz*~EZ0}l0xH~b8z=VbD&jEx?%H}lI(?-ZK7442mLGT?y-=Bcz- z7VC_Bd~tE_;j7i4G+z}Ww!!|#!O+P4MzdgvsVfcM9H#OVSei2t&b85gGas7BgX4&$ zjfaiqc~R*tieKUdbi4P-o~s9m?H#@=1}8$4cMU%gxtpRq=ktd%SMpYj`r`STLt=X4 zv$Z$3iJ)Z_i9SHhAPDyeXE8THb{5>nSYGDCL0H1i|I%)2mpQEH+)o@CU-%mh%d5Ziey<}OCjC4hSbLZNVq#l=xs4GLSvov$b zn$v_2Q$cS=GG^fw9=yw;UZ{6kHD!)6KDX_gsht;e;vukHf)!VtEMn*o6lOi9x z>D!;vhyUe$d;2ESe1n^DKj?w5i1}~4&2v8BE1mY&w!7z~c)|tp5ROpM(E!d59xo;T zq3&B*ir=yU?v|!wSw7}G4LhHl6@7S)0WU$kl#r$;KbJQ^%`}4xKj3u@S++7;0=67i z!JgfrN$@TZ02aW~BiC2y(-y`;kWrLV_DWcvS-Q)oJobp{hPZHA{;2u}@ zYbWI&seM1DaLg_IDaATiATjgwVnz=bLy3~!Z3(F5UwrOTaJzWmL9bI6i0L5Z-PYvb zTQdZ>6$2H9RwLs3>^26$CCKGWBv@&*@ki(I%i+fn+zMAoID5K8MKS+nUXdNV=C;q# z!8hw`$Xr?uxk7e?NqLACw7{!qK{Hs5U7Yhp{a*tZ>mk>5@#e=>zy)oVt>fgm?B`!?d|+Zf zn8R=X-lM%z6RYZHi_J|gW;P_iHd4|d0@e>g<+)c2+f?RkgH#khtnlFbgg)`N zF(8ZTY;ynkEsHDeGD)Mcv$0zRDQ|wH$(biRac^eY`%z;Jw#nK(-%zgEm$Ul%2JJ@x z|CXmYzeF8lID~R%&sKHOMWM)C+b=2~K?91?P-Ot$<=mbmUIO!1l`|{-d;5B_N$G3# z<8ACG)Ftje*0LsmQ+>Dl=v&HJwSfMKB)uo@|DOw3@Lm7-U~yKUzN4AMSJPD6wj2oxhlaa11tyqF9Q>6JV$8H)-wlS0e_9zM5xytH+10qC=`&?tpWpxsYc?aHnWUW$` z4NM&zC=|en`#Mf4ZlZ`sT=IUEl=q(e_8NBfV?l?WlE&gHl;M;o3*5oV00-eGyV$bG zeSOk5RRP^f5jrfW?_Yqq7HhSH`2>lC-E~ood0OXK(GW04o-CHDBF5_*ejQgN=EIUw z3lXdsAoRCUwE`P|XvA7Tql1Icy8o zRCjhZ(Ia?-^DGhtaa_WC^XhpGrRn3gqsngrZ=&PjtxhMiAg}L>FrXTzcf8M>_)UR~ zJL-cv;%UgAnAfyW|JT$V?>V-h2@>{xZTs3xNYN`VW&aG)p^D7~SI?@w92?jM7iE}i z#{LV*>v65%>9s+t_Z;`XU`8T&Pa+&5p3W|O-F5)RSb`v@sUXPF^9xN!u@^J}&xtu8 zs@v|pJ-IwG268DK2S+Q7;a{Zvce?I7ue({kabEVLW~FVv30k*Kud}{Cvu|1{rMhNm zqQnQG1O-s;XRsuB7eV{N0++t_3v-Rn(mh%~Zgv{m159(Wqza_kxLVr&!GSxs9%Hje z^FjOK5(sU;T;lMbs`Jyph47R27PgdnYF5f@)j2xG6|rK>NLcF_Tu`Na zn>nqxgRQDf9J4EL9_=HKTYk(n`z^yC>|IJD@UclvLgvHTj?7*xi5WLk?Na> z4=Rl-Up|~hEiIo%m+f*E%$*j0RNC6jg>?r_IDX6PM_+~+)Q?qqgk42ew#n9k>DF9z zrMYl~0Wdo~z8~WR@%7M|9Jw7#I(EMNQ8;hM%cOWYpV#{xG$9~qjSAG$$Hfe=hka$# z8eg7amH!rU`}QeF45-iK=Do?KnTlSSh#vp$=n*|RVIWDrcD=IxRSw2a$YhdS+tyZ> zJM{gXdLh}EPC+wjb7MV1r1-l>N+t#Tj<*dm&gO<@?`&_#;!)liqwfU`fh3(= zi9A1|lDr!6G|GQbqkfM91%R4j@JOuG6T`IQ#cxA5qQ>}c3u=XM$ zXf7^u>2cNYJl=zFf{Ynx#%nddvaI=z*TiR2$zKKgB`@G~e93?LfqaAGNjcND zv&xS*+z8qkh5oTau-9&cRFBN%(EzS5;7*P7Y!BTDx(}o%wmY6y?~H9O>|8fk6Q4>X zK6k?_<$&g;iDAB8j(WK-E+@0|lpUO|T)U8P!akYv{vV+nz^+K$`pP}acR?t~GhbdJ z!%N!+pP%`8z1nAiJ?UJ`NGECf5Fd2Xq`J@-+6J$EFjoIVY7sluh}p$XuT2eoWqA(P zU#)a{Uum-RM6|l}TQ;24v@jz%Mf#4VYRRLw{t~sD!&y*}2TvavA2s*y=1wXD%|bs| zh8X@D{F^E^eqCvtnLa`?~XEP*yH3vtYLXVv-+SN^63d5K3^)+{#28b0eCC-#5r#9zG zwLBnC)ET`Lm4o5ss3Y7j0|n^K!8gy}ULWIB4Yb0itF4+jt?)#Al>tyZv^wZh(Qsp+ z9^rTDx~8-ARo;<4OCHpV5*EuoL>%S*&D64Hxo6!h={lBRgZ+&BJ=^(qTjjC2tVk>NOM@rL;_pMK> zgvo)^6-9odtWz0R1c$&Gg*5Tt;D`6yUW7m;C*nQK{Nma4NYLMNEl+*=q8FscX52wT zy0E`}$B!d6=;Lo?^R0}H{<3gHtzfOV*Gz@I>*DtB53+0oS-jlJvg`>d9gW`%tsgCB zB03~$&7aj1|4Vd$?Nyu0Xi;M45C#;eDq9!B#w9QWZ}-dpl?;M+C^dMpualB6h1-&*^mm%zIxtbs$uI?)r z*O{*D{%!SUl^#&TpbIL~w9mAh1f2fEH$k2zN~HODISs`X-(F}Tb+z4SM}X6n^k^lu z_&#z4$`F1=juOVJB$C;x&5yxJdO@cYD9!4_n= zv^kd|3*+*^C~k1~TH%+RD1$P@RE3D%*8Wjd;L6%t_NX8;il|@KiFX}>Kw_jA|)9Cf3sTmGo1w= z_9aRNHykb#U`zc%-1H`V&+;O)9fN*=@Fk4ac|hLs1>&5pBY6I2-l2#@zYb;fUC~;= zni5nuhWH97HSYZsQdUpHZ@zIp8+bJFsWYla5VGFO0e~M z*hP2D!WFdLLEDq@^{Wgw_Zbv)n;I6GC~YVm_!p~PLgW`7(Gzq)X_w2-6DGm6%W_YY zF7I1ux76F@3+-#N6PJRgW80)DjCm5PVDHpnzp}ZhOQ(4;vP2&0zkqIEQokh1b3I4} zR8m=hv&|K%oYnrDym|Tz^?tigx3Ru{Xcjp?E6|uxnHUzeYR!a90o!BhUQ8V{HUKp7 zZg{6NtZuF1ZmY&vKk?N+p|3Z31=%&=iP{j|mg}6@SO5G<8+Vdr1*ZL$=|oX?&m4fy z_uXE7JUM=}w6?VGIL4;smOV8KEsWy_RB9?;O;}&bL9Qxdp_1tcko?oblc%bfvNQv- zSmKW^D2}5kiVeN4BB$nL_~&qaRRsW{(unom*%TA9ERBxlMBO?DqkfayObHJMOMb@-JEd{ z6_KD2=D8*8f{9)MZ{10V?NDjZYvr2fr===1V^JRKG?gCjhImTMrVU1;bFOXPnlg!L zs3Tv~ypTS;?p+$?)2I|yM|^!CLpa(ogZZqbYQbvq_ESHBcsk1Dzef6?_hLwGv?!yq zenUMkuqo{VL_n$Wyx+!VUYsPN@w=e$>5=ik+RT(AqUbWf=6k{r5no2MANbXMA<7C@ zZ2mX&zqKJFz7V!%XNNo+Uh9{=Sv{jW*u09nRG?`aRv1UM88n&v0czUcre`s9Eu##k;qLg%}+waScEaXET zb1H@__{_AKku83(wAfGvthtgqGLRV^)9z4dj%bxzzwX5*j*fo{hZBRZvTzR^6^!KX zz-$`M!rv!-1LIZTx@tp+ov)tg>hnuSI|W(qjqQnf&(Z8KOA0E7V@06Y6Mi9#by*hR zn@Gk8ERZ5v38mIA&EJrEDv199&ldGt1FKsH@`lhJog`Y~^7oz5WsiY~$w;8>@ua{~ zw1P`{3!;9uI1O|2Y|VcjJ)cNnsaCQ~78C8SRk*tRg#*&3-vMfU6;S`-50+372P12ay_i-Pb0^oafY84nnc5@PmDX_z+Aayw$6)v(WqPJ$pf`cUdtomSf!ff$G4EXy8KQXmU-WE1 zx}D;^1^m=*OXRt@>|&y>yAtCS&mYB_X0I0buBR}DP#Hl@qqxU5rI^MU`0tkzY~4EE z>V0Lm1U~|vS@bPpwD_RT*jU+xUY3PaC}Y?w)^OyX4GRET#%%%J!-FCvS)b^rpYfyJ zaKhb}#Uug8dBeb5opTQQ5;bZ#SgQw|w@i>Oe!DTF7*_hC{D!9?@qKoPCzA`9%jZmY z1>E}7TwFPoB|&_@XZ90&FaPrH%};&ss5)`PMQhq*C!8ZVVQqP_{T2Cg#L72nmYC{l zkGPz0=XSc6tTN4{3gGoxqnZDba`Bm`&X3(+V6pN! zo&a$Z;;qg|>W(cT%i2pYg#9lymIExf4VVC3dMBcs%sU^{^?!zgs|**RD|DZBQsfSA z>gHb_1e6wBnfcSV%2SfikBh2v#F+(XArdF41nl3Z9}XojkMVt}k>H84$um3_PMVzR z6^;=GVdX9yDMEN`LWHlbYAjA7EKafiw(x{4&cxRlL4q+*Bw1Ce)Z}PB{;J6_c$ECf zEq(04=Q^`(ID=lTpn)k}uiJY4lcUkZ<$pFFSFBo}U{}sOu0Z=g(KfJdf?LAnu0N}> z*b1$vt)Gs)+!Y&RQrd8?FopR+b+GrD%lVS13KkL4Z!BZV34_X)AlvgqkjR`LO1-+f zp?*yXT;l(W`QOFo!d-yLl}R@HRvSeOLDuwX2gSv$Q*fe4;p%)DIIXKJ7Qt?_A|(#r znyy$zxR3$}A&F`O?V_3)-+(IewIR5~g-VgjP4H-?w)oXK2-Ft)&g#WBal#wRQaODB z`Srt;bCAbr?8=YYOnvfO$3gB8g_q%rXX~1WAN4 zAaSeLei;Be8*ftF5yQV$}lnN1!jCM(I8 z(?MOsC**it`+G0)W2jxtwYeuw_ccC8T8bppNauTl3$BQ_JZG)92Rj>LNX*e5Hvuu; zQhw^%{ETa_*}hmXy5AvOCh@)vRsp%M#yKfyqCUtCWLfNI?!66Z@HEPmqcFVOiXk|IWS2hw$)ym(#ioGN4= zwBbrtj2ROm*TQK+87wI&*4LV+)s$;0UK1f0LI9aNcrk%eBHthMfJE7`;r6 z6yHbp%q8Zas7+3{-%tP6^_D) zxiuAHu9598Rw=PR2`*s*fSCI5Gb^?`&rI25ypfZuU|q?hwLc^MaCyj+-3vlyCQ_Zi zU<`709Uo&-B%1SHM^VskDg%!IHMA)!1h#*+)-}ctSe5{Fmy0Ff8_wwD5Y`drF;8+D zAHFd^lD=`$u(gcFQ~@z5WlRZ~Z}zzY9CL+fI#|=uSH;)WRqTG4tgF|IAkDziL;SpK z0d)_*>81r><8Mxub?p{IN*!O0DZA3g%0h24c|BlYv_-))RVw^(Fx0dY7gbv59uLkM4_1W~`N0g|!B_VkxpzN<;Be{I3zV0ex={e~W(+#qpBLr|UP$43bxvnex(Sq%C&*QCU? zlx^Lhf?US2fb7l%sT}I`48MVerJ^{qLF`WuBXU0it!*@-%bhSXygIy4ABt=AIjI|o zFbxS@y*ZWlwHMAF3^R@IJE(dekQuAllki5?fw-^e;xgp2JjZ)!uB46~WeXnc@IT_x zx|(%FLD@#Z`kwk%Ud8FIQ3Tkj-fBS)re}{&L1tFgMewh@=xFbq+msz)O^px#n0$}z zzr&S9cMKD?cg~)|1+T8S{EH*YAO9rRaI*y!uHy46?8`q2IBLzD$ucyq5;0WF&v|73 zE?9dh-K>S1cVbYBYo^yD?v0#VUL{J?b|dJgv6QMVoTvm9O9xkWYnhQqa8EFubczO_jG|dS5@n|a>6L!VV zFZ9r(d%tlVkr$!6=k-guQ~$H~yuea+nAL7dZ@tI%YIM`Jmcp*#7XqidS=;3S{9^4D{c5Nyit2B!mBIVG33#<*>j zg6zD58hOX0YChjBwoW#;xy_(kST+iWG3bRej(%nLJm?0#oe%|fTI8QVTeXE-#ppZj z9YePVt@KRAVIlY_51FamPwp$bvFp``*o*x@16&L&!p_&m$!#I0JkfA zS})&&fiqEI4V~;%*+kY33QS}8d>`7eyjSz))negX}QNN^IQ4JvVo4C@U z58MO@3MWB({$DvJUh=4~XB5MIw%!Bd#Fb*~)9oVlqW0b)wvyNv9bmBS&DPq?^7I6; zAI1j;t#}soxK*h%1`Vnsq$GwVQm-X0z<7Q);U#p}PCAm4k3wH^wOqg1 zmhQ^iiDC_4d3e@a+7QfuygYIYG&x-rYCcB)QmZF(2r17xx%`6N=U9UVT;UZVydP+@?reV2toBunvSdaI$lR42EElV zBHf^J>d#3Qu@)xe%1?n85gAv@!3(QfSS=7Pee8B^X|8C^<0qm9c&xB4|+I+H$K z6e|Dk9-<8}v7L9|o;N?;dHuSLORDO2zxpQ*h?UZaDZ8ertpeSca@*%S%Tb&2<}_V0 zrLtl-ev${Jzqq|b^7Cfkj<5enQ6NJkL6nQ{i4!%dK33!9!kCl|%gqXYptujFhny9J zWPV(C%k8CT%r&>+tt>Zsia36e>Z;gwKwZ7&90m^mUkQ}WS4bp=kn|9!BN#vj4wCaT z7Be!XS*{)=&q%hd%opYr^8;m}b?!3k;gqXKNIL)u3v-4R4j+&XXwhA-`)S}O`e-Aa zMg!##7DpoSCjmJVRIuDddIKZFH_r3R7NXl6hqB>*$#D|5_5mc(aEf#+Xz@FKYRHpT zx-q5k6>Zw8CQVSgVZW74F_pBmN$=ub=P>ib41k__5o<6Yo14YQCgB_no(>v*lP-e1 z@Hpt6wLS1E7_g}E%NbB3U7W4=4#J)vr2_ntVOw9l$ax*7{|&OaO!YKWMinz5jskq9 zWS3`9p17s9(~C?o)GH|&iiRU2A;??*R-Yc^IIHOA`*^zI_YwG)$EcOg5a|{cWKtT= z4j$TeA*(wm6(|Ze7A5p<$h<%2177dK%N>{j41rMFkj0A3yF=N*nu{>@kjK<`70qL9 zpjDw1i|!j3J76rGi)=AC2-4@$;TV4WWdH+qe7z>YAD7CWpMn?GtQGuhnvwITl#_wd zYb`hTX$;a{(U8X*Kdxj>cNl!kgHxq?T-DjSP&S5eh?iE188|Y?^x*Xd}rZ6kCe}s5hV9 zfP4C6NB>;I6*%rBYjH}cG(ztns4x$GuQ^R~IAR+kjCGd3w z6$;lNN7n_c2>FIfhx*e~qmXB39eX`EP3Os9e7}Y;f{>7itH>y!I_{&1%x{z(%7qfD zudB!Ffw;$|Rxhf4`K$SzK4vTx7E?!H{H4PVmTNJDMD zN?pkbkmJuMZ#TM%^VY)M>QbX!S6Y18qar*?0@j{1@ArKPa?5`zJbR@Gz!0#IhhERrsX@@cwT(0Q7 ze2}c|;$FL#!H2S8oCY~HythR)PE1k%l}IJ9BLqO!Bj?y(7&NHwV1~AOVZ>A= z3>=`H?J|I?(E|&|6?Lyhm!*g!q`XrfFcrSxA%-t#e4z|;M@kO|z`)qR;ncHSb-aRO zemL>C@6OK_I+~`fx)<%wcoJMXNzKTPd~;BL{Z_TaF0Ig-7ooR+uM6xla!*gKuV*=J zfG>o=qDL;w22}qb<*r~F8@4j#4w;o>Mv^{O*))w`Uz{EViBM_8A50~$E*-$0 zZhhJ~DD$c;r9Fag?`>Q3H#w)70H^c&RdStm&Mh9iEK1}4qEA75@ z)vl-RNCp4#vF!}Vh)Ry4$QtrN79SM`59Mm3y|I@UXA8NrYE%^=;TeRELR0Fiv^>0w zDQ?icclb*!O@QfNX_^@PKGFu#|N?WEIjOrs-$G$K8vU+zK z`tYowsztbF^he#D!lCR8omeZ!c!`7&TXic_t{_D@W-8!%9x}ML+<9@H6 z4hc!KU<}3HKOuF_1I(M1Hac{`K+ANpDB(}7}+zV4`q$(-b*{!ugH{ZbJan1pY7$7))mb%-mBypE-Ds2?Hh$VO z&!imiBa33v$_w^~?GxOhauXvb6jD9TYSWi?D0$LWR(Hg*&csO-PL`42EdkJ6Yu`AM z$<7`IBe>=zPKNAkB<6+)#?yrKz$?iGzt(Ja=nvfEek)A)X))Yv8ESb(M|BI>nefLFe72ehJ0*zFDrg!XFDQ zVeiShpY#cKP5w0CyKy%l-bZ9N%stBH7jbfq9%1}?PO88KBpUvUH8D6#mE>Z|h8;+= zuzvq6QP5G1t2K}x>xdCTQ1!}f33J6k_Stj>1B^xzr{varz!u% zJf!UrNL-n+q)^OZ|2zn|Dc>tUl;?1%uIn-+CA7W|>)K05IZ%0?IacP~(?@Kr4li_0 zl{-7!DEAvcyr>y72-Z1iToPnf&H&=$G+V(K&5n`(i!^3P0W#%}$1A-n0?-znwe5W2 z1D4Uews9a}Ug?Wz8Ef%}?NeW-ONRQpgdhEa!gk6jS-J?nvW!$KD#BZ7fE~7r|S;$X(sgDr$>x6^2mVt)A#em&)(THd2lQ{Y)0x;U*AcONRA3aGDXs2 z3tFRb0GYuYI}vlj|?r5;yFx~(6xWPF#1Er2Lt!n+GVjdUarOBnjHr?8=GA^;Ocgb4grB=BNF}I4tpZD4C%tyP zub&CS?)>fz?madmjo8>Or3AwTaCUbCNUoF+3u~e9(<`CI)15q-~+G=9e?QF5ql+1*tmvo ze}Q{=$|jBR159`)5^Gydop^9_$U6OvXvVkj+(`B1!C=Ay-l5K)p{n=)w;yGO-Emo8 zaNqhsX%Ih3>^Kv?%NicV^l3TzgY=!~j9Ret-#{6eBZxJULAiTuA&-n|qn zx}G96ia#>CPdEw;rbqJ;wZZv zOW^RGSC#rAm>31()7PzUgFf2sPypmKnZ)DB(7wJsJGFEH{IMe^N%|V8hmhZ~ob$h*iTB;D}K9NaD3`%p_x_T zzQ0D<))7fl4E>8@Eq*R)hRiJjNORN`QS_k3SlmVBTBoW5AFlA{tZz^dcsxkq8Zut_ zAxtH?!>+8$eVTNWuRZ7Lmwp3VtNU|uD9&$MK&lb!^~Cs#$heF6r|jF|xo?Wu{}w=A zXoIg&MBjGRQ(x&Nis-Ff7#C<0ySTC@CYDX+_heU_U8N+Fysa`(a5@PSby!aFgbu@c zD;G6*{l5Oi%rTwO8G;y1G&N<4uo_H7y=-gh=NbK>K4%JL8w#K<$`QqoZL-4^uM_iA z4A7f?B$i`RkZ-WU9VEsfsNB@D%R;;d%DJE*GiQWyjWAxJy)$C925iDpZ6mCM3U$lw zHckf@`&{gk(l6!?Sv|&wm+J^~STQPx`$t~bRpGb3aSXV!N44_w8dvMBq7q2KXPm(^ zkXn?TDY9HKgUN$wGnQX}1Rd^;CaoRzUwi#PkU_l@v zn8o2-eXedn^|vPpWJD7U}f-L3ir-8-ap5`%=M>X3lU z=w<}#n36-1{jyzv*Jjep+kMiRkL0l;3kaea$CeC{$RP7#o-fWQ6DWmvw#=d#x1)Ic zo6`QQ$6;zUdwmndt=byDlQdpz2e>)qb~a6@`em;#EW7fl=MB5rwLAc@8&V#!8V|A3 zt2|&y3s2!qBe~;$8Y)on_a%)CWpwth`ZScotk4O>L+ivzBFDyQp-yNwp$p~oyQ~hg zAc}ad_m#itVOG&Y_M{QGpSI^nTSu$DysZ0IIIX@e8-IZwnWwbS~sA#ba8VW+ClcA?ay?jYTjTmgx8@N{WSBE_l!d717Tg;H2k!G+oqDWhb)cG?fgMT)~3@N)=gmI)$Pr zIoX&PVleJpn&r>SK8Hht^sd#BJ10S#{eJ8C^0@1r z+XJXdq)=x>S8XzEnKX5Pm9}$WyQqA-!D)~u2EJR&2c5v*Lbvt&e}8{=861b~p6TKN zMvv}L8Coac*sj64s56O%6pR-SR!C_a{DacX2FB=SYh1EV2=$;fINMFVdgL?#p*ZmQ@<3`xbrcMrt9JL_B=m2FJqK(2*Z?yfA1|DdEe}X zG>M97ElqWK`2 zTH=MGWXP5-9$SxMsM84Hg4TwzFxbO`YDPoIR94YNX+G83H9ti2>sVH0xd#~N7(FHL z=^|FK$1IVD8izS2O{-Xbf>c#RAN zbiXJdF>Zuxskmkv&T-G6Xe9=Z;TULHA--r04DcGNGv!i*t*$=(ihmE_>-{Knp;0wq z+f-Cwwk19Sp;BZL!jR2c)ZFaV@DH&i1ljyEi8MzlD}8{P4=W!#{*2SZb~mVCX5U?N zHDyVR7Mbj%286IzVi#Qt=`dF%&29(1XsV-;UuHpk{HJqXVb=vryOJqTydO@i%zo72@Kh*iN`*Z-&Q4K)MG zZ<@5akKzri$4c&go$(M`-nTAzb0nHVA{{b;f205 zr#G`~Q%Hk8T;7eI~f2^zjmoJJ-VJ=9lD}+_qpxQ6y>X%^nd;1i7l@(HIjiM zN_;TUbHtxZeNzf{`D3#+AmIMD2G)@Ue36y_1Hdgr)NI&-3mbE`?YmGcHb4Qk{ z!n!MY&vSSuZ4oE_$|ceyic{wddR979=H7e_WnmhI7$IOt-E$feptGha}R z(EWwxo09^j`%(j)l8N2AWtlKDN7@M(ci=c;PY@OOE8VDxu0?a@cOnx&Oj6 zct$e(F@SPB=_c~$fuvJh^GAb@d@d_8Fi~G|sU%NM3hXktl}==uS}h1QUbq-eoo}YB z*;|V_V|_U*lEgiraHu4LcHLR&0cZ^HjR>MuE)Es4PE>S7p3g->g51{8Ztj+ z$oypY^48XkM;t5@DyQ}N5`iHFfiH6za9;vT8}77I^?eb_Gb}`~H@_?%S3N4Iyf%i} zjgRb@G<@MG!jx92e6<_fGtW$O5@p5r4F-!bnWw4SBu0DMVa}@R|lTxN67x=wX_&M#~<=ynmo^;0`qa%v+(-@Usrfm?6Tj=C5)kv z`^NoTizHBVOzM?0(D0`7b;~>KlkgN-esln_V z6&*2epOWotht%_uQHjt-YtRxN5?wor3pq1B2GlCqyQY|K63*r-|K!2g#UR596Zqt$ z)jXi!Y>8P1&@4nT+?ZL18f&0l@ybPh^;ljFJBfE3xa{*2?Cx%Fn*JiYa8sa9yBeaf15p?j^lSm%hjGN$%o<7y|$z{=E;ZM(0T#rx#}$32=6 zm-~I(AF*f^7@wmJ;eBTT?hmfK!)hhCGblDYFc-fV$#I}CmIz{H%gUGCguIf7a}M&z z6_>3{VGVboDtghl*YBbGmx6GI{J;o%{F7S(*4^~m_n}u;0NRiq!1!=vApXJA{e-0E zvQS-nUX!u1c2#4 z5QnP{kq2y{q(?jCJ1w|6g^__JR6%n)h7^_QpLG%Th>amC#5u$C>r3KYc3IvXMBgYT z0sk+*^ykyc;_$QI-<3)MPvs`pm|zTfxO?Jlct}xD!c9gcLksYd1D24gJG=>V=cHp9 zaw#0Hvrn=TKL`mRd>jt-W(aRxHS}8*rxJX{uombN# z&3R>%U>CZHyL04e3?Dx2!it5A{zKIXsIhH|J*=DT{G0=hsIb=@)sBH0COo-C-qis` zc}XeL;r^Kk*-9H0pH%s+3X+WW%T_Zm_0HFounw*XGX-HI_#6hpRp4eGA7z1kLKco0 zy%}SpSj}?}Btp+k8#UhybEch6MJALoq?DOavrZN7;DCP<;0R3jv-6s-Mr6zJbiPb* zL*Wa3o9{LrolM_fn@j2l;zyJX`N4b#&t+GE{5DMVMSJ*5-p--s8lKbloN3)~Mw(*g zquZ3bx8N)oX@fw~WIf71nt%7+$<5c4f2hA;BPJ?%@BKYA--8uqaK(6g&!QRHOxf^l zj?SrqRvxuwz^znUMdq{P33|58D`V_LgP%y2-;M8-Ym5vb>D!Rv(H`*^KpFcy@fiGw zi+W$`w-SE>E$h%|vSm8yxyJ=@Ft_66SFNP(UAV>JT&4H*k^a7qA6E?ZU3_s1D9n~u z(NQCNaY7+#=-Y>Ec;KIlBsqPvL3GR}y=r&)V;|P%28`*a&tcE=xER;VTyk8R(ph)x zZ=Y+G-33U}q{j!K8fn9KDnQg*jXbfyXzEJcAT#VXnc+8KdjL@gIgQjpNw=t+9cDxa z(w1AI#+0!?PF0Lro45}BMjM{YY?Cb5%yD4Ps!t#7zLzNfemTszxaP6Sf@z}ybfUUY z=QvupJL7D&f^~hj-Vz$^*=v1<)|gcjvLb-nlQ0@(`1x=sgkW%Yj=Q04eYIRX?F?fp zf37F~#n=us;bTm*J0-QJf+pSl3S1BJh+ua-{5Qmw1nn&Z{Q4BaDu;W^1wuCagHJh} zjXF@mw@J6Hhd$W>?tlsBAXVzV@6;7i9sr_tm1` zKenp(ijfHfsk;mjs$URy8)VBsw>#5A!77<`d+MReCC<-m-H}@g!pG0^EP3syrk|cY zo8vh2KlGvxwba;`MaxB7A#jmP4K%wP8d-9WZlIdkt?hgS|4CV^^dN7P z&aVx6wXs2r@1E-U)Dm*@9{b_Oi%Q*YgI%O#j7}Z;QPf{QT`Qk?O)N^Nl*@7d>w2Tz zim{)@ObK4#OOUjwgHH>SpPxk4k*Jf0P{%y!*WBki{JJHn@oy3M4+8n(U&IpIpBDt) zj7lma+1fq$^5b!2;Ge0(KYLXoky`~wxq_wlQ%&G*gq<#rgLdYJkZt4rD7TX#p_3js zrxw{FA{)CoZP4G58>uBpcp66F*%SdR=A@vv2ns zto1Y#r`MpZpmiVrKDm|<{!vDNd}6I zj0h;giTmSJWlBuIW0Y>exEKp*XNRAt6RjTO@8q)?mf1THcsWhnsDBKJGXS56U{Y_51khs{mnsu@Gk^E7z z;o}obYKK#!q>F_0bxxZK9!P3kNO76t_fRX9*dRZ^gjQ^YLd5wK=Y*Ye0kv;(@)f`A zH?_?rE1fhSANRLE?k|DW4h;aE!V~mv`i~YJ#{M@;+%bX`trCB^X&j#*gJ;qP{W=^mdME_ECicSQ)6wKiWsmp5a2-IrpdUa>rFzGfb>e<(rNjYPauW%s+kZ7_~I zZ^a*(;W=EdgC|4~uT?14817D(tpKJLhins8%fLnHOp-^8p&Q@q*Hq{JjjvL~;qlpR zlG{FNJnV;fv{eY;R=3KW*c}sO`LP)W0vFPSC%`^KcxkDY5At*I`q9_twdpcjareck zE4r>gWPle!oGrWnN)c;r66Y(+Jv+)UCiT0Y7mxP-iiY1L@lvp$>ILti6SF!&vFvvG z+wB$PL5Wn$V)LfEJa<2jhx9MM)yK;%M?eQ2r95M%?IU1fN6&ff`5M3}{Ud|QhC{Xy zt9Y4ePn;~;cGe4wNEj32@mqz3Y6Da}sZvqaA!!SQRhM%X=MBim2jZFY4-@FZE1xO;T>eG?k5M zws6(%!`7|8-LD9|EpqfMx~rbWJJD6bwh2T~PgOl#uTbd^*^}&nwy!$k#e#HdNIdCA ze&7BKCvv~a`ISIkS^OQIH>kaOY6{~yg*)a!tJayBKKT4x$MN|l-$0+oczj4=_SJIu z?g^vnXMoqC{kJQwxdBi+;xONpOeLqSQuuIZ>f$NyT_CCx>%d0jo~)kyj610B7&_IQ z6+Y}EZq&$?LxKB_N*+}5YoDtYPd#Xi`O+?#&HGJy)qB`q?UZ*@Mr)FLO?GjHyY}t! z=xg@TuQXmt=o6VY-fz6P@g8sN+_fXNvYIbO*P2a?m6_=jF$WeLWNCM$Orb)`1ATtw z!D;DyfqC_G4v~S!F2y0beY(~^gPXyHmD8ai`d=Ut*%V!XJ+J&9Uq>81{FX%#v*wbf zO`HEDN1ueAi|;Pyp)=wFRjqaFOZIt&mFB*!ghirnAM~?0ab(1~TWMK* zD-O2pg<&PNUGrZfRKqm=^r&~f^z!8BZ6b1OK4~u5+}ukuKQruB(9yyj5$c_P4~hCM zh^fcFm<1&kdFl_y9oRCRwLQ!zj@bAX@Cnvw>f#6ia)n2hcRZHW5^fY}N{oKS<0HtZ zMJ@s&`8AP9*LuVu?mhG{-408|-CO!nTf$zwx#lZ4M?kj z?F?u9BJ@TtMw86w4xfK|jk@uhsj}5+g?Y~r{~Tkpxo@eCn~g`Q{*o0ifA-^Y(EvcE zmC{$#gGa3_n3c$v5|>m%+5Y+*L}f-W%g^wqe1;_s_zMY;YvRSh{vaC z&;Py*R>ve0a~_8N)IWb8Ds~;H8Sm$ugnoX1*RbWq0G!4)THa`lhO^`rij^jD$s&)CjqXk?Q zo$D}=VLY7<&JujeQc_LWd}n2ZYsrX^B@Woh&c&VzFIGlq)CF6|YwvNv)!xgDze&l!@ z51URjBWA%TGPdAs_Hs{O8G@$E_f9Kpu&I51b`Y=jzl@HS~978N223ByX~^{zA)Y{U7t-P7UJq!Y4%*ml>7%dY`-5yy7;pc zGH-EG21R=K@&lI1jrF39>%MlK(Za--xd5T9SV+!1QJ_dE5fZwK*YHbPw!TTTNK+&T zd8WT|*>?x2bBh;9es1Wgb%ykBY0UJ|@M`Wck|UY9QG0B*Chu)5x~n(~a_CQ5#;) z-!!=$0kHZFt!XwH&C;tV#NS8t&Lf1f?+f)5-ZhoI$hNU9z|(yb!?LaJ@j?D+F;eW0 zW4Wqz^vqr<=2b*raEOWCLMA`>hi0TnBUOC2ryYQG2?3g`xB8gLy9H^yz)c_8_MIPq zZb=D1D8hPv0%e=cDUwr@)) ztW^#t6gi77e^v0pRFq|Zv2q1%U(XJ!Bavzt6nex}p;*WHI}GKz^1Y0BVV>~i_b+13 z-*Mw1bWN`nEl7^5l}?{_wFD@<6Wg<&s#zSbus`g5NGjT>Djz@}ips|0jBr1*LXsAk zt2k#~GJwj7s@?r0o7P{=QzMeeXA;n#v^2|WnIzlY3@^6wV=jRP|LXbz?j6Y$)2jQy zaffu1!BZ_GEgF9Tr{rtm+&z zB+)-r{mhP55eKCW5pig-WCEXk0s_4snz`3Eb(FL`-(Ys3petAtzB_lLbHX0~An1=r zaU(0d>=p)+&)AFS)7BYVGRbhhr)ew^F7o{>D3^QNGHF{q!B`f5XgQ?y6i1W&^b;l;+a5jo*=>!fd#HVM;tz8H za$%A_lyEx8ztYtYZUm$ygaG~4xKMdQ9|J=m=^^&xhr$4Z*mG9bk4cFCEmuk);w!|C z48hXGFa1R4E;#xt5^<}e6{U7^ib)oDZbQzz3FWY|TlAridZkm>x!sJ1{uJypO1i%rq%V20(q37hP(a{GC;dTS_|g>`fS{}( zTe0PYTBb0*xv$`zOv>2WS<0==N?WL&PWO^@%-;NTVC>L0?^mGCmJINVzt9_U$TQ{g5%u!5Z8b z!*`FDDF3Zl%Bvy2vs5fJv!kXsxA=j19%S` zuYjcej_@IF?Z%wu5o1AZgHG+$JBL{ZBj4BGIkotxvryzYP=ESGlwNCjDKrPmG(87W z_?qWEl{Mb$#lG1utNEewuj^lk;r~84G${O*TgOGIS=}W6BFeZ6;tcWW1GA&PR8vNf z3Y?4hgyqC|pc`Gb6M@Wqo&Cu7eyeVX-x=u5Km35l76krOc&5d14l3-s@Lj;k9W4<9 zL_Fxe=si>DzH#h!CR78ZsfKoG6JlB&+(0$Vv56!zFOPF9M>D*(&N`v_5+>#Zcgw=$ zv}sf4E zqD#=rXJ4LA9NoLsE?=scDXDIwy?eKnBGy+6eZ=>r=7F$?m5R^}k{zR0#8lh5STOQ6G={f}iBpL<7W zCUGZk&X&#c@x(LkdacIBiJf6HfQ_@bdEQ34bf%q?UF7(&9zHxoP=e-AzJZSp&eEB(>B0$ zll<$i!+I`s%{kLK+o$BU?yk_H8z-dxi2fn7cVDM#Q#+oqWBA&n(cU|I--bS6lIQI{ ztkxv2^3@tLbnw>N`}CfVW{pm94keGcR z^*O)IJ9(oDIycXsZ_j=fKR??0cdybIBD$W)K!12OuvjjpeS)x#>-E2|5cHC;9d0($s^os6P?Mo z$m7!+KgJR7Yq!O0NQln0X3~Ujoqn6n<_XGjb5jfyCE`vEdH}W~_o0|y1H7>{9sU8}PnBNZ?Q^sIz++UAbIP9pi<$eumlnXTLnKzOO(m?`R6w(~+ zMtEXyRiqzYqbzYoC5J=1IYe_>`%*ETV8;yJ9*8a2^;v3EpQn*OYM}%)Iwuul2iUO^ zh~z#h9bhM~lL^bDnYMwZn8HaXzprPBkg` z?)S<(3i0z;4q5vD>$~$|?@iS^r1o;nG1l+r(cFSHm~tp@3qkY7u!gSy_MAbZZKK=W zuMl1=_jfY}DhX$&j4oby$5~})e>rD7wtoIFjl#;|3d^;HYMFo1Oh#ckU*aiv4$zKU z_Qq#fcP;npAn?jRID-1~et}gkbtE+xBv|}PDnR?OtLVrQes%Oa?J zKiFhrl)^Sg67sOpUq5Rc?;{>O>7;7kpT7JRbXPocAG_v-nEAKYao06}8u40oZD>x= zdiI3<>}gjbs+U6ADEL&>=9~u}|Mm8m2}w@m*M!da+qE8nZ27Dr=YtQSk@AU2$+Bqk zZLv8Qs;e$TL^yhdY;7>Cl$xD4J(LPL^ZA{)^bo>KiC};!b+#fuBn@xN!{Fv0KOP+U z3NdtwWb)fzaG%Z`S#6bH6Q3_%zzG}~2cK6wOI={UgzK0$+ax3*CyjN+dcBSbSl<&L zP>b$bj#mxS_j|K!pj79mP-7s%Uu(#G5||$NY-?`r;@9JcVyKChj?w33;5es3SjxF> zWh%Xgd!`Pm>lfc&`+8erQu5&XIVa-6TGu8bF;woIp)g@DCb)1f+cYry48ZRLDzmac zlXn+e3XW=)|K0Y5p~nX`VOwEt)UX0dvcC92QX9^(@5j?YZ@q8(A}j=Vo!WY`=&z7T z>Ggx|NN)}N#~T~j%dwi5){DEJDepOSSGum=Jpr1-0XVH!E^KXI@{Y(wcb;=9_LZ9} zKT6s?WRF5W_!xs+MHh>|d8U#Ty9QU=Xz7@` z>~v3QcOMt43oo;w`IM|(0Jr`G{hdRNxz?ZStT}MWZT;I2Yw?S5>@{|*_o^^@@I4eg znWn)rox+*z6%1c>s2Hk{=_0IwN>|s9(?9TG>$7w(rJU&o>wfOslb)pr&(%R{V3K(W ze3#kgV3R0M;qo?&6EdOA2MNw}&NfC~`@U^-y@XWmT=LXxBVmw0qKxdxbh38NaBPy#M~NMli&w<#qu(%hCjJ` z&ZT4BSA?66F_&C^$c(}Daq{d|D?e?Pmo@blx|VuNPG$Ag{H};f@8dvES2s+ z%FACwpE6vF*p0AYi)zV?i_%smfc~8skEyL~T$m?{|jLOCdw>Vd_ zF2l%-R9Ujs^?N0aMc6!_Qmt&+ZWXyc@hfb$3z4&ucd%+*-df47`z&G{Th6wDz7ICv z$Y=#@kSpyNE;JJ*tShOuI-2xXg&OS1IJWtq^R|0z7eTq>9IS4UD1=)xs0$gRL^)TG z@ZIs4;*K<2*Tb!qPcaO4aj#kr)nsvEM6EP4uaWnuAe{uWq(aF?( z0tX|HhF`$x2gcCVGnA(a6q`AX>fUv{rAwyYrio&uv}C#VfQFWnZufRuNmauATmQ1f zMAfY1UjuWp4EoDel2xOOa;CJ_8YD3?nz$=JvafX|4NI0sA&~A&Qq?APk`#&+3sQON z(41(wj*qyMCq_~?KX7_-qU@wH>z;yx62P|95hp~a2bGsC%7>04+k%xBO6mJsk7ll1 z3?z$1omH7YGcGr1=<^QmAW8JONlk2a%67qV`7(>xT7ufH-!I=P;Yrk|znFN&F5YFg z#Am#)Mv)(Q8ERWAVCcZO(1x1o^d8bjR|RICDJUlVz|`L4CE`}%VB3s$6f7c8vEL=xAcdQh)iU-`bveCK2Vs zdj?ic15)#>g%2`8f#|&Q9f}43?YZ1ebg0j%6^-5~!-KI~lczV^kgC)hTy);B1{8g0 z00qcE@Idu0bF6hwr#&V}7An+(I$ne1b04qOBcjF5rS=y*!`Cw@IHa{nUgxww5axUn zR!OOA7G`7^X{2bDT#7>Py}wDg^hzs!$Mw|rmUp}e-joL3mZtqKaO+X~y3a=cyyLE3 z_;gTBW{X?g{Damo5}lgQB)4W-`9FOD_1g2QoW7rVk=_#=ocPw`Og{3SXk5z@j(k%`kqq+vMgKIVLhB1yE_^bGnKw>77?h&KEY zoqTPW1{f;hdTx%G1Xq<`hYZ+_Le@KF$7i1pL~dF85v|IEJ-gCH-!;`3FB#w>wng+^ z-v!~S)WZUFJu&|;d*Fl|CKiX4?YMQncy3ReFkzsP znz)MozOR|3XFrgA^;O(XDpSx_sQa`V>8p(M+qY&h3*GK$?!1R*cL@YAS;bkd&GVj9 zm$WwULT*7Wz75-P;{oRcQT&9c?eF-Bw5T+5$&uQf$Jqx+<0?>|zkO2!t~*-W3Fc@h z0X?B6#<7_&SJO#*%)Y=%diSVgzRpP>VNTbnm=~y1sZ)nO8?h60*kOBCliD0o-4Z{H zNb}arZ6#s$F2$|2z0i?QdubFk;_a9Oj2B6Bd{G@hWAXV6%{?!!kT}GT-~26KxA$}2 zps1CiksImclN;%>KQ(5+35AglSIs4xu#OuC4gmAihHXUx2}JZOXcOutjz z8|i4=Yfsq+*T>Qc_6J)PJAYeG57``9B1dg!{cKssi8+ImW>`0*P7{`xP`njY1jBYN zyRcT$_}foW6CKyn-c*!i-D*vQi0)rSQ!U5O?~rgFH}50y{mQ>qbF#EqCwdpAd}9tZ zpoF;c)Rh}!bKYt)0pF)*7-x^9p0{KzUtRhL)IHD62GTxJwoQI3F##FfyR^hPEw~}D z=EkR;I8cUFkdcX2zirEIbH^R|7!vl>Dq`e2YZ&8$OJ<(WZK(#e*;C!y2sEXHg7(H4 z7iXr8ja{!JHA!*~Vs5_whMcPb9K(;95h9(YBym=Wkk>`~1bz!pIQk2gu_+k@-lsWy+&P5e3kS zKKk4$9t#x9489JmagY?bqJ8X<5p)`=|APXBQ|u%WH@1UKeo{}Z!O-7kO7)6|vu87| z>@`t-kqAju6>h;(it)KB!s@Vk0qi*Tp;%9((#CMzJaIUyP7u{mqv!bkGw(^TIc9&wmbWXr zy1bZ{Hg880O(0Sk@Rrsk-sHy@at^}=Oe23@#6M0N)cYw@Z_wKTnoJt5aH*jN zX%|1wx0dw}jyJ|S4o$w+#r&hj3GEP+2wQV_^*ip?A^*%x-}aVN4;_UFMCn7f?ctc) zJq{Rr{zIKORCe+LyYZLQq9ix%|J*k_*B}y(ODV&ORS%9=lJ?8)T1wyKyDH(VtH;GW zInEXs3^Ku-?^A*Yf5;Xu1yg4m^O14l!zURV%6mxAJsXdu2|R@&Dq*^2Z%KD+fPh zxxeT;M;;GT!dMf#*FUK-f6ls9_YNUJ``Cr_zJ;rmcObC%EI&#N%?XcPA{mT8wJ&EP zQe5{MZqF5LmXUC-_Uu*8)drA)N_LIRT4S%|WAt{4*V5HRO1j;&@~GR^yjf9-EUL-S z2f8fZ-+Q9o>&VBwNvenM09T?K@N4BT&O7IVlx^!`-vRUg6U)*xrJ`+ijAvQY$UPpH zqB-}D*?FU_>mZqNZ>Ebqy-;Mtm**m$waZ2#vFaX93n%ey=cx;CK0XAP-+BKAyTYDm z1#MPVJRe9WZyQpuOPLDJ6z=5CBU5B2Qh{%u{Z;DOhym&SJxoe8g9udL7vz0%x1mc3uN*zr>Ay|w4g3YN}VKy5` zd=p=j^rTH=(~AGzl<;UcV*0}kZPrl*WeCH!`!7^Hx7OfR-)nxw!_RJ%b)c=JI?+pZoBr3o)eBxlHSjIX*q_62HW??EJ!;QO9)wBq z>MYz5)QM%johu=$J!+c%RcBq(lGUw?>;Sp$@Cz$Qrij+gw3~-|(0N?lIjmN0R*0D- z8Cj<-bx@QNfkZ;wU9P_E1Yem>n=C7G%+W`YA;yya$(4QQvqSEg<@s8lSTZSXrc$sU zPo2ZnAHUfhNqDyyvjWa%+MshRs5{McsS*n2xg@l2f}qcRHu37Amq8b{^YcLRlY2H zbDk14x>I$wDs_^&&3^%V&3?!G<60InY2E7M|4$F%>H+1MUqQ70GrZ?!Wm`2l#yK2c zAjgKZe^@H1#u2 z0Ge#BG7T}>A)4icVVuYFJm{NeN?w7w(Rzwz3-FKX|I+9J@v21$tEX$`4dyn-2{~(IO?b08z{#UCp_f6bM^0Aa7q;G+zRVu@NJM;fBqm!@ zk|~mRDRd7@aTjGy`dabdfvp9VS(t%lIQCbS-CG3;tzkD%M$jdbYq}CRC)wIW7itMV zm9a!%>u2g`v}-bIbn>A52kDpjmWGX7jIOg$y+d9)jZ;{;-`kdhnPSfAxmsU z-H7|tf|&b9vjd|r38T>c|@ zem&<)X8)9|2#a9CNtZijIcoRtbNK;2wkwwHU9fyv9ApgN4ZR74LxH$bsc(YC#xKW5 z;*yku&F3v;MtrV(@&lLmx%oZI23IEw$SH&FHg`VN%=pX?^3v-aZHL8$)msUvhv~6& z&IZG+33wOmO3yRia}U^)wL_-5rlp4q6*|Ew#5plEKiG=k!{dGTb7Ng&_gA&%j9NE~ zdk{w^EK|N-U8eY&*blPau}|dr=JO+#x3Ge&41I$nIX#HK{AxGb8xBsAtpk%|2P*gQ zGaF_At8jL-{VoRX{$qsBaghcr{G=>tEv+PVA9r%N#Qxr)sg49yr6o6ZdX?xMjx0aI zXZH@Il$wic~N$uFApL5hiGe$3@e2E)MUAcbj zOU(3s;#*mAlr4-ee3jqmJZIrSv(s|65v7f##?6X8deX~|uk|_Ki$&O<@3Ey8*x%MLrdufrOOS%gXHyOw$G#gStXc_`@hySX3CVpExL=tgDzfrNfqZE zmpv{O{Xy(g4BcqKnGKHOgK?OChJe2o!`4Y!!|rYJwuC!KvwFukc6qM$L5<{)v+HX1 zm#yu)L7;Ow^oVJ&CzIVVIK+L&fW~P@lPGoB(qk5FSY|}ZD=W+2pluyVJzhZ{Qvd`r$f%iHt+;&nMKwPT^ zh*_4>!~kuMIrKH^L55`Skg>NUSRmONTH9(L5>QTHw|^geDdI4uC(Zjqo#o?^w~gFn zFT@8Mq27bK^r^11ZT-BgWX? z`}aP_dpz&o`)AvIpVxK9_xyb2KV)Q_fe-=qk)qCrhiz|vKnF!0jpI}3w)l&Dp{vc8;*q>)5 z@OQp0l#X*k>9eSC&K*n+DVy(V-woU;AJIOt(}R%BfD@y5YCWti@{5&w}6-%KtjYuSWyjAYxHOdC`F zNcE|O*{yS)XRI^I7Sj9Qs^;wi^?lvR+fqBdkN%bkLS#9|43C5_rqnkt+t1)YB_{UZI75W8vGVZR9C zd%G|pQ28~Z{jj$_=;)Vm-b`GxzHC9GicsliJzdAt#C7_X?GFMF8q@waejq6=FX6(e zae0|?WO4&IiuzQ2zCDZmLZch*duc7r@YzV(Y{k;^=>rMx1MjsU13{<%3oFtvuvCDH)*K2tf`A8Pbq{}#bMOU<@iL=^7;zVvi zf5CqNil8_Q$K{S1NVrdQON=b%u(B)q*s)0#_r+#Dw@tnMe0t+1*vwMtale9QPb*v1 zvxqeBY1M=4bBC4kCc^cj$Mkl=ooIPOr7rgGqCrYFK%?WgY`TAOVdBXCXU@tt&>$(* zeBl)mta~Qj#L3Hm8F)=MR#SNaneeYy%oxZS%|thk{1Jma)WXaS3*w^OhtuQVC2UT( zpl%Ef{v8fY^=^0OlO&hyw8Dcz^F-*=NYO%Q|DScfL`l1NY!l zK6`Ui=a&%Pa&KlvqWkt#A)i>mJNw@{8_9WP*9Y%-e0pkhqYHG4UOUrd7)?KSd!6r7 z6jFO?e=hTGNgFD@vbkR!G9r_IQPxy-#0*uc*WIq#ni9-9TfEdy-F@h3pz@ry^Cd&) zhkxq8!`6fv(5`d#a+qm#{l;-SxKwny)uxf#pimO%QhxzMcGbauZ_|f@o5OH4gKnGT zJKHPhVL^8XmuhRr;JV3-9W`kve6b_=pXT7R>UIIV(F@1vl0>dQa$|c-zedu&GwoSC zjSSItaL?=Z3(Ng#lpfX(Ee~UpsHll(0$pP)C-kFJQ*y2F(en%%9~Esc^b$Bc(wH)ZOpy3 zm6}crdJthml`kZtKx`}O*I8Ul@Pklp?hUYJ7DVRi|8K}UyfZ;$NEyD-;RfT~Yx*Un zLN?F;T*^N|iMOF>>P4rzg!fA2+_S4*1A*DkwS6NWPJ0Mt8Gr?Q;=?v&39-dWc8bHf zxPfop_|0iE(#Y_;+tQl*T1<4iv+-lMNM=47rx3s(p;!Q0GW8 zqmy-NJzG!J?_;0QT4XjvT)Y+wrn7GcNc<1xYq#m6l-c9nOccKndAIQ8Kvi#_J=8B% z5Q!wIM=U>rR=kN-LJb(S5l81+4^wdDDgl5p-LohdWBhzjRe|9H@3DqZu{mJk`?d1{ zmHqUbBsju?xx78p{Q7RK;vk#Pg;5WK6Q%$3tow5$Q;pwW!Zv6|!!YHz_H-tE|A{P( zGKXi$9e4YSw9Yf^mIAAA&$MW)UO6vZ>ukTb7i?EYUI5pw10kAuATJeHbQ|scY^m`& zU`a=Opp-Pa22Dnl9=P;VH7~|-G_s4^0@az^dDlFZ5cLIb_WBK2-omxCz zWlM^yyt=zMh;(H_BT)7HZo!|g1Gd&x7N*ILed2WDw94V$K8?^JC%Y-PqHD@KUuz4{ zm)0M*Szd)AA7iWyzww-QM=t3qYsqa43qu0Z-9CpfDRR;g`~8ZGm=tRi@=UC~KKud5yJhc2S#qLv?0K42)isV+JS66T&Up3bz z0$0=cAk7`LY8&Uyd{a6gyPRBPVJ#Q9Q7LAMy^|w*JlxQ+U(yGuoa?@xT_E}F4gZX3vDnHR(@X1o z4a6#*Q#V@W&N6DP{`&jSpc{ksOBcDbZfl*kzqI`MMVNZLo^Z_nbFQjOC@jmC785v_ zKnoV`jJ2&+pp=j7|DylbUC7C>4@G;&={rD;G#7x&*gbp`wQdDYkWNEYX5M*EQEIt4 zUd)_C#%I0wdOP4JT0Cg@{^NM(N-tY^zl(gk-)`hbOVJcPoSPXixWVOGUEm&ZxD)h6 zMM*YF%FrQq&Ut!Wouop3UoP3HPtwC9C~G#mcpX#i@U~cLh0D5@<#w81|GUJ0&lsm{ z7aV-Au~ZlGjGV|>o@nW^4Qu&0f{H}hkTQYgKUme6OE38~T8E;Lhsd(!gV%$%ml5Tq zMN?t3w%Tid*B>Ffaf*unD^Y(yaSxi7b1jilimTh%cI@EAmBiA;$T7~N^!*nv-cM0& z8HBqt{eMBNLoX;Zom_cvB%Q(hTQ+?G6(`+y3n`@-T3G!yJv8Ux`IV!)yI~-yNFqti zH%r2AVDcJ+f*!P7?Jca2l81A$&0q!F!`zFvHiz|CN_k!^YpE@G6L$H==4TLi_qkY) zS8TtL*GSi@`UdDim*g2Cw}!uKP9Z?4gQI!``PW6Yt%EovkwGPNM3TR5S|Xfy9clp5ikPm+646`}AFt?IJ#XCVGz(h(l| z0N20#YwgZc+ivd=zerB$jik1LU_h_$92|q$8x{WBa&nSw<2{yey0aOtylxb__Q#6g z{h#}hpi^Q`z@MqdT}fX7h0u~WYF$a(jF*Z}x6{ z^BYt$H}78qMiwZw!tGLUh5|#)kM51S1a&a}?1+#LH4W!mkGclv1?@7i!`|peYWJiz zzZrdve{eEaj!Jb|v5@sQS;@z|w*P$X8E7z)Fyi_JD)g}Qdq3WBre$bp+TQ!-g0+^W zER-E_G78dBZ@y?FlPuqbVeIE>PrBA}xkgE|O=oY*5BO8A3-c$3c6E4>e}|FcEhFbxk5mg`h@6=^Gi)W^BDQ%@+% zA^jjiPnW*Mfu?3rrZ(1$qD@Yk9CgTm`zP(HrZ0onY#Dcg37~iHf?!uv)L_D;+_Hvi zAxAye7x#){gy>iq=zDV!Y}~<5zWm4g@K*}3{rQtkJt@`7EkXsrTy+ zSEHL?4^Tiv5)X`=;dFrkpTp?Ng2_n=Iqz z!i3?wll0jzj!KY@f%xqV2N(80e4-jS3BR6eI<^H`wp9S#MY-J1nmhyQW4w?zvtNVS zZG2CG?Ydd}z@L9UHbBk+d4LPVi)xCmQ{V+e>RotP4Zv-(QkAQEf@bBLLSy|B&j@*5 zb6Iq+RgmKHPY(|vr32g+5ln`I<=KoYNMloq2wXow(ap1c1% zBRoR~({_IDxwztQo7S4{haa788b$D&X`j!;xmn#!2>dJnsO1(;=s!#vV;yr-KRagIv;qBG zDZLfME`nVP@Q{Ms=vGWLN5_8B225}c^&spnOLQp0LHkFy)!gZfx_fzKwd$h*JCOrC7e6{7b1?^M0IdO+hY75;CCLj57=? z(~vlCnC!|zv+^UJlAkyy47u^+A^sWK^JmDM@+P z?i2Wy`fXdb2!ET36LMu{vvf66osJk`(#+V0&;Qm#Y)yYnq#QHcR;QoCEl2Z@wWqAjT?2d-2tN6(tyZ@<9BezF zmK@Y9lLR1hJ6?j}9M{ETpH`7vba1My1-u#Pv|}o3sko~f`fo?-)W3bs{t+<0_w+i5 zCk`PrFfP`lQ$_3PP)9eh#$WR9M-=?T8PLT<$*<&uwWHd9zNs;Id0jY%R(M=Q&o^s- zE7hV+xFVtH*Y{Hv<6M_E7o-+a#w_sYTZB017_r~&5-K7|Nv)S0{4q7x=$lWDU}|F2 zlWBnv`5@5P`4LNbS&N=yu#oLzP{-@O4QUs&nx4-|R6sO!rEkCr{1z%UA5P`r_--xR zr|!GT`R}@~39W4JO`zh2?{*(;%s+@8EIL~1E+z~@Tj?I<@-q|rH`)~YN%En@`qdR2 z>*>WO-GjVEEgrtwpwMjqJNW;!F9yIfV3IQ5^}j%WiWYX1`WXHt-CHkpgOy#@zWmko z8Hbx@mI`phtSlVX96Oh*1LtTntJ#9>&?lb~hXwc-YuuOcH zZX14c;wy1U5DMSx(#AAXTs-;vD_sgI(@L`^6O9O#GRdU>*VT&Xibf91L%IVqM4G+- zkbCEYkyGB+0&_;+!<3(@^b1(hf4KGazLD^QyEQC&5V(c#vs(ZhVE%H~@^$ul&YZ+d zHj`7GpR>Qy@yNM+AZbr`aBXq@bb}dqGbVYXD#^H|56;cVeLCF6oVhn=1*8tXvYvtC z0mdOh%3ujqHEDSdt0Q=~n3h9kpn0K*qxCUlw|*(HSYLJ}^GwSd6) zk~XhSNHW24-*I?yU;jnjdP0m=%);g!L3(PbbpD@HN_mNHH*x9ZobYVL2z?|ibaHpnvou4Po@y&PKW^#y?`#TrvT*(?JM5HH=}-3d zJehLNZMfZ(w6`y7Bj!hGt3l=RWbSN-84x56c3cKjB7ZaPLY~~al5?AeQ_}GF(86#; z!DELb_Q{cI_i3UQSE2S0>L;GsxM;rI_JZ(254uihB(jvnAG0~HvkInEUL9b{;#_DN4Kr?8{$3$A*OLj1=%D?lsrxZ!~ zL={$oWvVL(I@6mc*XiBI+$w94djvFZPWYQt4SulhKV8XsHV{?i8}p}ub*!)HiT>TQ zeef*zBvA3&dtyzH@ z8`A3ei)CpJWeS;r2K!X4&<$5NPYQ|shiRBXfiCOYwZKz|R?DYPHY$epKeR7uQxQ)G zi9QPqjf^xnU=$R*L*a(U=l-sc2c~33OltAX5(Sth6QO(r#wFj`qpw33tP8kx!0l7* z#)sKTyDulE|7cCMrLp%lzu+hH3T-*OqXkK}w&Zu4UD#ev<+$PIi1_Vgx#e@vg18PXJoSD$Sq(Hfq=Wd)1j-98=>@^qV z*HG5y*-NQR8PCT>xAuh{9KV((aHZ&n-F3jQdHX$YLED+6tXLu+NTuxJmd^2I5$Mj5a0b*!VuJ? zd9HP)Lb0lxCVJiVwV(^#MJ9mP^|QqGP1ca0==hNbmi8YMmixPV7$+NKtIV;C8K*D@ zJQNT2^1m^X?RV@FMYH<*WrUKh@~(qp>kV6NygerAUoc>*$z$mWt2Ci-oRO%ShdUT) zgcMWO|LCNq;?r@W_@wD17H^?mNAffRvaI?)U{S|K9a)UTu#+rZ;8 zGNJ4OG|!;@Roe$olCkgEcAc?57G;XZP#pWhFe|;((1p$fjxlmLhZGaQ_^V;Phj_)$ z7;wljd%r%RTZT&S@@2$lbxWT-}--ZPk#tXxPN%N3fw zRd1Nc+ACqC zP>K9tUOF3?@%%Sg$+6q}W+FnOZNp0hl6*KHtqWRZu%irNJKUQ_on4FPT}$U;X=ATM zb}|U))3*=DmwF|Ul6?kGf~RZk{O>tQm#cp1FN*)V#%YpY7c?Bo^yA7gym7g9q4x1N0d-BLUcR!r_5U{EZ34Fo5>K3=JYdJPD@+nhEC%V&*rwg5%;bfy zJiz>Z_pRHl!$?Mg=qJ=XPj0_yWA};7jlq{lemv!I{kN%)p+b(AI7}C;BPtYN7?Co@ z-tOr~)!3AGtZQ$amv6%c0+F8Q**>Yp;>&w8tBPUlbI+G$WaJgHTlc+`K6)DS;dr)a z!gBIOt`|4)R!s$LOp*LOoPMVNIMxv$L9nXk+}$t?t4)ADf{Z%o=Ni+O;tD2Pqxc|j zz+87Py^Uy2sff-Kb_bU&|pvx$|xrMsUX}*=~YLIf}eWsH$e^f$L?fseSzLy?vjA;}MnY=`oluAyq zXVy9##=otVJZca;)SwHLth@~~0i2dz{Pd+ZF)B-?vsh&^Z&5Fi*5M~U{~=~%h$*w% zcX0W^&3^~Z)QoX*o2_rPXny)pNz}BB-}N0;x5CXX`Q)6Sjo&83*uNa3!a$Qe@yUlc zww%6kCH3D)Kpf`sW|-5NG?p)nhG?ZRi(s3dl6<`xW^03hO8ozZLY9uweM zy3=|#ut7R=g(UlvPc_i#qSn*ImV1cJWfaHtY{-CgJolk96vsi&WTT*L%ctb@DrLx$LUbbWnVefE#tbZ-bh->$^;20wv z%Oj0k@uK&^TeDIvth;{cufPOVNH!}|oZa)CaW}><1Ecov3b6X(OFCll(8yJ@-pS^~*BEPj4B(@vK zm&g${VvIG28HB4J8Q|0Tp)aLm_E~Eti=JFQ>cLrG1~~Q%;)H?g%C2Yav}gg*uV!k> zLMuPKJy;hMZvh_jM2jluZW0JWUSxP7y`T<+eBjE)PMWk-EcyOE_!QE%*YjF$?4b1D z&!t}m)w?w1b^Ybw2CW7{u=Y0TWNN^!pHS^sHb*BSQ}M|@tb zgno3f2CrWCXPKG54Z4R14z=y#klo3H<3G%3C6val*NIP%&1UHy>e0|7wNia4%4PR? zFatzkfewblA1kjiIbt|JCbB7OJO*y`5;>$irXQflf`TU4vpw3eJ?sbLemU=lKepZq znv!4qXx$M$G4 zl9x06jzC5SD`|Zx;;rT-V}&G9XYzlD?D=iQLvZ6h5cR{OK`wwUAuXVi@aq0 zr9VZ#vQnN`%5{Ajv87tOym}4y^yQMnfC2Js!RjP3za*_Bl(%ZatTi-HqE2Bd>u!c% z<}P)}u|pubfpbloEHc@8?u$Cc%Hx{Hb{={blP3=;7Lx>viL>#Ocp=x`fbOltWYH>! zwR0IDQxPUm2+&Aq>ZR;|SSU+k+j348eWlG^8e``o@{oh$hG6ZV6nCY?%usyF6Ib?= zG|h88INKjTZLf)#T3a_Zv9D%B;!E#I#>%lz6$kc*qBBx#pLt&@Q2yVG zlOW~$Sa4}p@MVcj_lDjuo)&F0yHDKqBtJagY$LTS*pdoD))1$ROdI}%?{;lO{3ry( zouqsH_~EhxH>tTPLRZ7Vi(^&Rbi2uWDg057eF9iEtg9-PEr5 z$tD1N8(QlTPPF8hJ!Mf0dx1aoM2dv~SWMTRB6vNXZ%NqUq7DQu zJh$n|_1hVJMmQb$mRYpj;12{rb{BdXzK#!O7|w+pO^rcvL#((?Jjo{8XUo6F`Vf6C zBf$`{rBow>uZi-D^$@`ef-9VgxPSL1jl4ZAOlMVhg@=h0H0YE_C&Z0oQ|cN{QhWO& z&POT?mZ2SMs>UMM>>gIc_#^;dAiPjszP#^NOuCa4%=_1JOFa&VoR4*;#R5yW-GRcD z@m>9&bBw@d7s|Dwe?Ra>`$@0umhTljKPFd4950&$gb@sdfE_Sqc_EV^(ZQ(Hs-oJW z^6AGucR#o5c{h8V@8;F@v!w$!a_xt*DJyJJRcU%-lZKcbWnU4jxGa*g#Cpnoh}+(Q ze`Uq;9UXjtXj=5hpkltBXNfIOp^dJnAAr`rB z4{-HT^&BX5Ur=t9H{*J7Oi_1y0bOJ(RVR0lCaZ0QKVI4_G%2!{t&uzET>3`mAyX=M zwjcIw+|!Dmqy(2UXZQVWonGBKOL#F-XO0MN9{h?;kp^?#W=YWtVeo@*idroTT~}MR zAmYLX5+5ikthLi@|H&)WXlSm;_sp=w*{8l!ypTDx|P z4t~YFsX#h2ZmQ?A5mUgXo=}_HObP?~#N4nD$ODSp&`LCNI8E{*U21g7^rUj|6ArE} z>#*)2WAwpyMKw3B)(hpAdVFp#4(8?F4)+uZqImvzdQ8Ju5FhJU?Q>M~oL`5X-JBfw z=14-_+e*=e+ilDzg03;O#OCoVlqcVpu0mgPI6HK3eQf-=u9goSp0`RV#m@v%g$o9y zwv@Mmmltg}^)aC4&=UpXy``Nt%!{&J6CXyu1P;ESG9 zl|gsygn&y@Fy)Ms{a&$=po?4oE`S&EWcqwYs5?LK++BqjxhfZlb{JLSS%+WnR{;*e z%8>5@def=zi^n~HSbqg@&Xy~FkDoIi^Dg2tLaiN6-RjCwD0=U+h0Z*1O8YzeryxL@ zg=`MPC}{>yGF&RYbVm9(_PB`qAs30F!O)p`kwMna%y{ccA9h>`rmQrxp$xm1o@gJe z4XEj=x_y0|-v0i_x8kDLhtUk`X69!TZRM9w820Bd{`2XL(BwHZHW-(^%D5m6vI6I6 zzd#rEuaCXCPnSsy>- z=wq^@iig6H9vwQQErZMs(nbC7r)#;UmbTc3)*)koT#((9kwW|hbnOPNy0~cLTbrwA zOTJO--a;kyjQ7D6)cm1)^sy{neqT-?&a+C=^Kd=r?NuTEg@f9oYxoGn=5OcTb1goZ z#b9$A_s<%M2{F}uN>8k#vknfXyL;^T>8CHxQ2&uK;6!xyAn33Ylvz3%&yOCrB#|#M z1EsdND+y7FE&X?ycX55VF6hTwp*UbIdq@xJyMfc}*cYD7}=46DjwTjvbuAI1L|989Xg$aBIXq1$`q8z9)*UJiu&^Z3Y|BziuY| zvQ}klQ}c?q^7e}*)4Z;0dUiX+_HXuO^7(Q{1WZlLBgyY_&mZInR+#>X)=bl{5A5%c zq5;68e~m;sZu3=BwxnNKY|}ElvDEgUB-Wzxq+&JOyx$(v9}Kwj!?`2>R%p!F{rC(q zeS)aH?@iGZ($x7Rl}M8;@CEz^Gd9+{-IQF|Zg4%8kN_w05ssT(FO^2I8l=Po=}gks z;|2F5{Bn*u4(C0aAJ|oYGS_*lRDrDx2VJ=I=p*@>0BpN-5*&j&!(aeLrc7GmK0B}LrO#$PbULMojtZwy_p zGmh~Hsh2z1!5M3i9iDOh`>iLJbc+iY5y77{Q^w!Pyu}Q>+oM6>8Xo^U8&6TJsxOx> zcet$jt$`Ks$Y)(;?C>>1abn{Gs9Ho3BPFKRwmUN52E6+#pc%ASZ_6zlexLh+$~ldP zbn@SToKQH1h%YO7&qjl`4cRltlY(&@+OMVk+>9VzYx15Zo-O8W6uYO+xh4>=JvhXR zM?1}q!ODkx7yM}=?y0rTPjlf}0uHTU9&$cV)daPZSEnag8FnTgDT@@LNe>LyVxRSx zuV@ztIdfSIo>AF`U5Tlzq?5Orzf+1toJfI{U45Yl1NIhUtLh}}i}jxSTzd>~aL5wS z*YCuggZmIb_+)gk)s zCU5wYQN+EN1mMIR1l8it#>l6+WE~4^K%Ar6Gw-VEKkcUhr3c`n5+n_FumBCTiQ&(v zzw*--8qFs7Qq#SRPIlvk_45^W#Al{<9_s1n6VUR-h2EY~*#9sq|&BxSu{rKF-Cg_Xvtg?{IvZ#_Rj2>|2n z9L?Nlse$^{8(-VqF5dAA;DuG*v1^Si!=J_+b49+p;y>rB;k#K{R}IZ;p-47HD_n3( zqNut6mq=zVccY28(S7#QETv#!pfOWnVxi{W@@UgcENmnj*L&kFI{Uw=#eY0>~B7$IiCCq-?4 zQbUK9Y=q`z3$GQ!hMx@P>n!K&gwS$x2-x1y%6!pU{aPt`p}#{3E5?#sBS!L6Liqm% zC&VO5@OHLdoxz0`<47~712c`EB~{W{fx4E~hM=9PB45F^>#td*us$qT#!f2vO~^#* z?=CZi*M5{A#c}p_heQ#N(15zFUnpX-qh*tBb#io_q3z-9SU6MyPYP z51Lz8EvHkRO$XSTmgFfMJ0ykhFaeTol;2by*wSHY5XsSl61MqAnYZg}Z!2Wxp>OPh zzJsQ{CU`n@k@cNA!YLlV(Ple)rx*?xwAI?2*9n3%g4`c;I;F@rb>S6J>ua2xGWnX+ zne^IUMs}A&BM?`FaVpD0jk&8ry zaaf4Uhj5Q#l-CTt*-dE2q}}-YB{?#?8p&VG+MPbx-&0sp>UQ}JEjqb2l1IU7xL?pD zsf`pM92*$WJRz>)r2yr563Nw9QrD*@WLmQ0Ao4C)( z!Q~Y)15zY(yE~kE_P4K>#$8uWo3P)u*gb@wb2F^{x%~>AXlQ# zzh#!tY%>EYi46^x&*Ls1QewLhSXmZW# zYm7*Vy~NlVe>N;Su-`%Toh2bx&+)BiJEa~CE2|rc@*ZV7Eyp<4z=kmPr0oiq_c zmE<d&+HCa%lwP%3692K(LhS?#-Yu-b3*c+lr>oM3I1*H2n^c5)_oo=-ldl+f@l zZM#Rv8GGMYp(7iO?Yy8Y@9ewJpy+9|mi_kUvW@@)ml0ieGaz%ir8V~HZjzSWALjjd zUBH1-?k9~;l16xyGSwr1c#!KbfHFqyofZ*13bJv{#&qZzTQP3Pe66n!o>*mI3?}Kt zX?%dvT{zI6_LwiPK#NkDY(Aub95#fsvavJdXnBy4YU_)oksD zd>9zGe{aDi&2&0FE^J}#N4{ilVE-Am`DD#K94rOp*ElOUW1&3uJj@*^l~vLk`k-{KywON(2q9=2 zT1imuID5&hLy(MMi^{zkFPIeWv{cpfbM!`Na!c^#MVB`xE*iworCRLw73nh-Tk1na zl6`&=FAo!;N#ssHHU$p@^T1Y7b2)w;hF?VbeD}y9sf>^##Gy%OOI@yb4t({!H(%^X&w98`S&yQ%t4&p$XTo8$=M zav6V5yTaX^miV8FCr?6s*4CgrSufhdT>>whr%XLP;Tcbv0^$v>ct7fXyd{%c!(Q3Q zTM;--{Qc|OEqkyGlRC>Qf4o>lXOV(gy07%IE$DOPk4r^4NaEr#!SU}RDo}}D`d!GL zh;6MJ<$pz3&GY*;PW|7WEk*m@?N7wOtV3(wcBRX**wdo96F+$UUGLqzpIaa%x_uPL zX_7LJsuC zxcp~L=6nXN$J(2zC27#FS^0tQkNzZSfbW7;TWB`yDW2bMmgqj8MTb@($TtFJ13LCR zz`eOpd>4n~#j61w7WXl$&8+90!T{ew_VXSgu9U%rENlk<^Znm~wN=g+1)$?V^GVRy08u z!X@Xtf2?jy2m$ZCs9-`YngM@)aif;G&@>S=-ZpH%BiI-AY+)F&wv%RpW`r=9(2}Wf zZFNT2mct{<8n%-SVKHNliLz3YyC2Z;8o+XW0sDPm>wbhi-2=w9#1u3eP5cbTg5n>f zE627h^|#cW8$BMwU3cCO3OQ&kFVE(W1x&F>Pbc4L$H=)*16lu99;C<61+g{qz3px{n~KL#iDBxSOwq@byhmbc z66stycyCKt)+sJXIX--Wj#2HpC&S^6(uZZ!C)W3zj1bwOutdS#xutWgvKro}!)~X8 zK0={_D3b6aa7Jt1sBi9NH42kKRT$gitq`yE90|XVG;n*pSf-eB;GtL+M39vVyt$T} z5*H>8j)W|danb61n8%CbF%0r#abm zfNI?8#KimKHtd`Vlr#}&Yk{QnS$T{CvTDPgtO6$sF*8UP* zgK6aF%EE4MdYa3YGy+LYI}6pfN}kE>5F(qF=nplVJ}*X^X?Up8FD?CQ zGZ|g58VB2t(S1&f`Q;yqYYsA88CW=acsMGhl&_FMeFaPmdNnfuvlLx>bzq_QS9;V9 zXl$4ptTKch%JU(7mu=T#j^^b%v;q~eZ^XdZGHa5t_qSX3i5yHh_LNMpC0Wc>kP<7~ zs`gguIVS2qy<+wVjraAplvT+EsLS7z4`G=I2PK!*aKOwH_T19< zc+TILLGf@?omgyMO#|^V<`%Cg5X^c9W*fZ3HuLfcOL6i%}hF6L)L8H zB|G>qY(fW{ad7#GI^kC0|ycv@q1XVnL3lQX5y2Y(CwQjY93q@ekFjzy@~aOVp zc*kcA3D#&khjYjj)g||!)0yM4DYuRgIup^Mz4#yd;E6#{NG|xjQD*DC&w+wv^g{z) z>{hypihyk=)V|@E|KNM`^W8T=V~DJf!VnzEO&cFU@OB9~i^R|k&W+r3K;!p3XS5vDq0x`4(*4XcH>wc6{KjV(>%?(tNt0Zby+GgdvYBa5fOHpJZJ&@Q)H>zt1xj)0RR-?*NrZh&iw!Y7LEv zfZFAumm=jm%F`vG5J>XEtxbv{jJ`C5R*$>pnbV_t!E`||cU3k zdnn;rl_8_0RhvJ}`8NmmtC1y&ub8+L1hvtrHTX$x2>caL#>)gO#!VnRqo9Ldpgh8W zBt)EP8cuu$@zOf@uK=5q<3_oGo&6Ad{NYH*M@2DP8_%cgj4uy@2=`xRTML*^A{Tn)_VstDfV^_&^Zq~Ba z(PGVe0Ua~2rNk%22vhEy=p^I|AG`mOmw8$%?&{Xu-NoM~z{9PuhS^A-8b*xRg+Lcd zdbR(sl;nnpAcs)UJg>9J)X^ z)_Ax08*^{^BLk%hS13<$#rOKPeGd$sp6#Tw*n@;yp!Z7ni#OB(u(?&ubD4sZBDg7O z6ffP4ZS?@B@TOn79UegARw z?tMonPscH?qGu+ztSc1GGxJOiya4Zul>Vp?$rVEc;Ax8^CmBzheKmJY*yXI zr52{s@GXop!?l9!)F-F(NLP?b-iOmY;h+r5j_uf_N_L*9Ep0sQY67<`z&;4yLf7^N zk`!2D-*qI#u;Os?{4CZ-;pg2OHmnNfIq@iPP{Bl6L#P8;fi<&sEI%Be(%mGdMruT= z#;Xt8u&{%f*L2?`X_6<;E0Y=~xYLfpKPLHKUkMr}u~Ui(sNH$WdKm)0Eg#?7uWWX% zn)i?514}1A7=QBlWx>3jFBQz2@`{>EZmC+Y1AYd;Fk9JS zs3gci)aCoiFMpI+`9Z&fh%ziiyYTGJ+BU?2nenT_1%j|mBHyEUhH zJZpWvVH%l@MuhB!Z&Y-#d^@SLgMhCje|agm@Wk^Ms|gp-dhpqE$x#n3VAY}ICPr4V+mO>Y0? zbS_$>|NO3(DGc+(jROt@hOofL;8y6sl?ou?PTD+o(@Gts#WMZ}4c1dZ|5wi|gX`s2 zOQ0bJ&@!&Z1FHPVyos1$PU z3GuLtjBi-mE;`AxSbMeX+UrV;?;@38yMh$_u08JCc*d5NX8()rtxX2XL)Pps-g zXk7Hxgd2;QR_s%lf_{%WlnSTfy2%}#%Cw1&DrTv*cY#QfqPw>$d_d~vPfwQ$f}#kfR3gU7C5XdoN+sBSh;wG9Y3ir>f;Ee5L%@_i!5eNg2+RWuS>S#fir zK9bAjd=eAy!|=x2o=D}e5-BDu&yclA^YDqz;Vqmk*M|?TZzXIXLo>8N3XEAY-0ocE z!B8F_-dc)ECCSSDsuxs#g@JEcJyMhgb`Pd}4rNtg`sXpx%Q)T|cN%2d-dc8pv-sMl za_I{s`5QlvO|xb~OeZ(m{O1F8+R`%y6`;hG^jy>Csx+MF4x-Lu&SH|Scg-xTEhXTb zUChs&BkF(SY;^4UeetQtw#=Q!aN-LgkJ{j&54KE{w`B$sf}L{3&o{J!B(rNqWbmEm zhm4quEwr9$U#xknzG6CF#w&^dKf%$I1x)HzyoOUQpPwf3_}+YciQbTr%{UAHE!+QQ zUz7MBZv_t|hZ?hhfV0M#Z(?D`j>4bVW2rKMr^O#Gc0__z)@#;VC24nx|7-6r7~0Lz zn_($V9@Y5vvfL76x^ugHs^g-8QzWZyvsVPqCfuGV{f* z*C+HZi)F-6IgmMTu2;u`{vp$2Z{NU+HOJMX80H&V8*@f5%^zf{3iip1&?+}`YlV7($V9`e8Bgy zuCUKQ_magd&3>Z50jOF)+Z`>AEHMJ-XDrTE!Kpb*%opcKm-7wI>whkU2mzq9<}2lP zhJ)r@J4{(k&3b)w_Rtlxe7}P2Q3Kkk5$0S1E6=kl1I&)WW(jcBy=C4c-1@bkt%bc$ zDB;(0l)^Fk{lT-sY@erhjdxWt5lg?c12u$sem}Vs8$F0Oov98=4yK3 zr<`lx;LVF`BY!Wi3i4l@8C#vOF@)@{q}zNM|866M4Qv2375|&H0FZK;fR8S9MKpvD zFN|jGaj+w!0fiF!FSqnScc5P4)`!c0y<8&wG`RjSF}NTxH!cV#-^=8BGUeoBUngPQ zQ(Fr~87ou@Ii4PB8|jxUjS3r-ns}H^B^FSw<0sR@%L~|}S8&2HcJG(w+a6!}Pbls$ zJ&{BXHERKt!(;vaR#;(xw2=OPTOrN=rX@$I7^J43@daq_Y=VppUx^4 zB`3o78>hq`o>o>KU>d?>O+J%G`dE|tv!Oj+wdIieL_wy$hq>=IeIx3a4g>fAb$K1C z^C@i6?VR5iw7;N&hAyd|X-!XkH1bQp%|L&vhB^Kpn!Y=p>i7Nsb&exDBq8I7qLQqv zaFC=@MrF^;>`^wyK}N!%WMqaSj=eJuvUm1A_SUh-!8yNI@6Y%5k3SF2AJ{ygk}T~9v&N!(xmMNzoXEyv4r^eEs|;q+p-hGX*R zV)4Ju@#A*e0+@;-|M&Db@;LsBO+wXbp*-WVM{QI@JZ1`UI1Lih$7%jIAz$$#7|QO?2|2FfTf~E{n2%??(JldqPmYrap4_ac9@Wz`#rTz#sIeNKld` zCV`(a45LJ)Umy4i@b3v69VzZG1UI4t2APTw}OSZOw!hM z3Pp(>o?n_>(B?vEEtO9fJ%3}0o@l55*Znk8P3zgvDu!}|@rfIrNg!3&lr#EgG z#shGCbVyVjuNRs)3nJLAFVye?JhGsu&wHciHc%q49Y~I@;NgbOhBFJiW0`HFZlKEt z+MTppc!1rbyu$iiyv@9b@eJ7;&r^c%=>_PlQwTMR-`K-cJd(L}p3HECt(2{X2l&L2 zC1jn3s4)TT+ZrQ7Bl?o<=tno;g|fiRmuh};h3y&%P>H@Fee6Jm5{&RS-^-%8zI|PI zsQ9yKo}Okxt)mlob+RE-x#+E4EsJ3M^$UeLTXxF~{!07g+pr`dBzLBq;)d>U?(eIbKQnvS0 z%7K58FM4~rNj?#AJR7tQW|-#0-8FgTM{48O9z@GMNObRhy?eU7J_dg_5{W=M@B9gu zBc67bE)|RqF*#Hd>hmljSPLIZBNhofze|Fg|znOAmjV9EGWl7M^#R{mc9sg>S_xSfRb;D1I9qIP+**`<4{WpgFow{TTbV%2TJAdUr z_DKE3PKs8o?7x*Z_aIj|rD)9g|DXog`SB|TVduL0<7ZE~%h8(`#7z}#AG!RV4!ZD+ z($>$}I7s_RTElIH8J75RCS7HTQ+=w7Q*{0i_lwucI~pV$$3D9cI~Sy3`XZtpFDD2# z&ed*QRFys?D7{nGYQ@-P!9O7|L7CUW)mD93kL7qm|V7 z0G^9yUD$Uzki(dKXm>M}_FX}5`+#~HP>cXRQQ8nhJr$$~NqY>gp&J$|PVi^VEPy_| z+&#g*hX&Dht*(MiN@UC`g(mR+L6z0!=bha}bNPgq`a0`Lu4<;t>1mQ-GMmkI+r|y^ zjBf>T!;yXWeW=f-=1a>}w-2Lk10!3YTO;z&vo16LixGB3qf@-K9SwxRJw@e<-X32P zxOM#e>I}rQOHfkBW6Gtbo+q6*-~U7?Z|pg$5y4Z<2lHiuatA~! z8Y^5s>2a#Z)DzZe{3vFvWvS0x>biL5)2L8|UJ&PD*OOkKXFAme3VY?$s4SZ?Bd|M_ zrl{O*zk%+!sv=VPRn(VMIa|3~!_s9p#=+qG>!!9ZCzM;JtwgkabkB_vCF0C=gW)is zzHvu4>ZAe$-}Gi31v=$V7C*0_AK^x)6}|AA<{w#JWhcAai@VLdZu%xzs)ne&zh?b1 z_hX?<=C8egq}Y{r{96G%L!4VX^ZFgmkbaZQNRX;31)rohEQqxg)nv(#p0uXQ_w{rV z&o)1L$`}}c59kevTSGo-PipquQ7WcllMH8er%E_|8K#VB!EX^2$=&X&x4K4|KlnKo zJ(aS9Z$5!IuUEgEoURuWb#b~}bySMar(Cgj-19i6&t0+XtmCH8xXIdO^_vE!o+)bW^<3mFO6IXo&wF6+><>b3fW*6(U$2~qT(|G>zV zf$I*hTg*o&6y(2K+K}A0?7kJycC9EH&U(CvVmT8nxi1Qi`0DyNs&{SIR#=Wm8HBUE zJ{m<@hKr)bLf||yYfi(mS_7P$H`t996pR#_WD8u^B|qL2Q&$BJa$yE(?wzY-F1*xm z)A`UCkWyP((bZPJvuDQ$1nj7{cDJ|r31^qxWvY>#!5jJ2F7y;)EUo(=0L}9Gj%QlI ziC6RUc1AgNM@&~h93`Fm_O)(<6i_H1IJ^|qQ}x5R`U3bmc>8Z7w~w$3r=(o$7AvyZ z&@@{dSxO@eI5a&|-r#>5!?($ZXnQ9jMsTB>oMq@T|qwyu-Z*!fwuP00nd-=+a(kjm`W* z{*a~N9?d|8KJ!UfXGr8x0j%k}{|K6JDNDuo7sBiubG%S9`|q_!5LPqSQ#@vVf=ut- zBa_0lleFZ6pa0Ly>s*?krJ=IXc5Wzo0 zwwhH5X@zfB%Q^oIxuRD5Yte+a8|Ljhod@SEcAJ<SeXwYz=@tN3|N z9P$R0ycP^f|5uj&u$B#@|f}=1AE+lug}6oK*^@_2F~~<=I2JKt(GU@$97JyOmV_UM({Tqw$LVywj z+#{|0+Zc>EPNzbl*X}k{K*De^i$OjnV1pS2a(kvoRzF;OFFmXQS9UHI2fRTvdBzyS ze^$JGjxFa&<{bLX0W=A z@l?nV7GgwVc09g-=jMJu`25yJ@mn-Cip_PV)zM1KTCGm40HX8P;Q4(^l6H5{v+a-I z?OkMKxe$mD8Y{ZrLt#mYy3#KkI=_x+52P)+cUEBzY6kZn0ruKZ6HN$n9`Wkn_(6=IqFA>oUvTYF=Pw_(E+%E*H`o z;@8|dozntky0jtM?H>W6hlAS^jVva<*N(KX`SoYJsz&EWhm%e^29=I~-tIY7)qZt5 z(+obAJU{-O%Y>AzW&rZ-O^$>iMVu6b!ky2riI>^}`(||X(_&mA##osxyy{F?pAdEH zGc4n_(bP_*j2;7r@7C9OOSPiVw~2~Y>=w}U<&Fu#he-wx*dE#XC~2!{XEUA}N(RT^ zbtV8Lf*oTU zwU!-rEZie0YT{hfWoDP4>%|+?=^OuKREK@AOTY$uhr6Ys(92w}OZLY}gOquNt(PNV zHC}%+-+rF_b}??E;c7^UJ%QTaw^W-4RH z=GmrXTKR*oEG-PQqK!hoAJWsKS-rmnsyKLc>^G7B^Syz#mtlW9H%U_;dTuo2H@nm3 zYU~Hf)fPJR2M#VK`C3Zoh_U(|wD}B@S72}D=-i(B&QFbN&5;gGy4!bEmF@^o&^kaUqbgJW^Cl!*5cbi6A2TP z|EK;whRGiX8gY4h`#x$;=Z&W*7JzhEi7ju-1U&b8B(*B1-SZr&o75WU zeB(NOMF3ajk{Rw72DWcJz@=w(JFV>b_^(cnum?ojwuaN6oTtA)8U!yRQ_x-v`d;yG ze}2Xr6bzOYB5J>Slh+5Q4V(6Lr_pOeKpiVp>k?lb3k2RYO*%ui zmFO@?ew>mfF!WsED(K`ynRxGj$LQ>z@3i6{*ELFL+cZJ|Y+eqCwddg`5 zHTChM{I9k$9UjC<#uYkWB)NjFn9ZR<6|-!f6RqRJvQ2haBo9`N?yu`Z_MdRlD70=Wv0R%b)LgnZy4?A929gl<9I44$y`i%9+^= zfwERaR`<0rx_3fjyzU3zBwZ&LY4x#4*&#rB7`yzErp z2ldXWIba_#LZs;W&7yCmgu$ZgB`gxs&H6*$(4X!9O?yY4<3f$nphPtsUqzrh;N%rXC`PE;-FuQoQ@}OA8-94eZVc@2{rN~3>+~8h_&VssUOVWtDjvD; zmxE+6cN)f-e?B&{($xoIc~E1`?1=cfUb7J`vv{gc%cl=618Bm}sVsV?)&bLW#oozf z@|T~Ecp_DR_cx(LYi0m_-=+xa|F=BU!#BHSy-m9`$wdOP-NZ08sJ14?Rjf1{xVAEc zcH?xr&|WP@0h)3EA4q>uLk9BtSm0*}Oeqe1?+R+i_9K>f(6@V9IgDTOp@e|lqyspL z&iG|B117$6)wY8n<-_Y=y55n`{wlXKs1e->@y-Oo8eF@0D=$M_1a!sCjf3Qey5*eY zw^-btI_xpqP_)U0SxmI4>8>)hpA}$+;;GE_(M+vUE9BKzZ}oi-y$Pl}XZ9dW+=hWLR0JQokvAxwMpPIhYTS)MnXzcxQm&kKxp2X<$M2$INepe#?AZS*kxDxxbQDtr zTEu-;dQ(7I#blnKfy74jD?pZ5wBDTdte^mUUXrn?>u=FoEjEGFS;aHL1l+sJU5biL z?ay=-|Et6D_r708Czry!N_U6*wuRcVN;mL~_T_f5BKG97kFUGC%1$si;QQA?&x}4! zj6Ok@EALup#GPk0e*QvMXX#>0kow(RPubQc0Q_)cx6NF9p5Q`^7#eNt8-E-(!y1Ri zLr;m@&JM2^QoRpw6u)jU<4?)7p%b@p7(`~FeP8M&Ky|L~Wg)E0F8Tj7`&q!_*=Q<% zE*Qf9cT#}x;DuPFn=owHSZ0`mpKkPETSt$%rXMY+72IT{wkhH@e}4w9b}Yv-rOQxW zu1g77=6qmfO@@v>QL$04d(G{*TGLvx%UzoJjZ;ZwlMEfs%-7&mHvNgOpC90{vU2FQ z2P^UobocRPrdowrHonxBvRR#n5Yjg@CI&8YE8ghgJe~El2||dwwkD zJM+284(6F=RVG7FQ^kx<6l~q>+IGu=nob(8v(I+TzLlYP!m?2*Dus*PB5$ao?yt1G z1L^;WG6oi%R7u;v>9xSU9-kedu6=SI;?UW7ZNRXe15#v6&PuLOlyuh-RpBtH9lPZ> zw8{i@tSC1mEbrm`3jA#LjR&Q;dUtH8jH=g9<(|lcnE@Njp5kB`jBX_Abcx?*0{lhZ zf)`;7dBYmTtC#*&?9g->`L&EE4(SeMej~6Tu|8>y(-8>=1>oK_I!!^EhfiG!)l?ZQ z0>e}ApxFO&^`12|Nf&Yq+DX>=xG{h)s87kQoSD+BJ83<%J*~(e9uX|;Jev4wyA=MN zz-f&pK?S5~X?gcuSLJ0-OVH{2JTrOWTH2*f3NCeP@siMCf5VjxI&ojWA(H|A`-+#7 zsSP;F8kb+-lGoD@X-&U>$6K4LQ=#8@Ce;zvL0ERHPzPUE`4UcA;w-N{rT-^go!SuTD+SHz zNnf_+WCXfoj9urP0EdH7X7m3&V5z_x$%;#|v}Aw2JC!FiUQDdDc4A0a_WUED>=-CE z*H^@yP2b%48l1UQIM5Sil2eSuub({*6=c&RD2zCk<0w8b_No}jB?_7=PDeZ;LyzrJ zau4AX?`L$K@#e0L7G-?zg+G~;fH4bXP*QM=ihOx@(cU6-U8(>Cg0G){8KJsrullv& zG5F>2% z2^Tkirb1!dW#@F-;t|hHLW@OrI>Ydg&CQXXV;EedF{=TMt%Pig#Y<45)|u{NvGozE zKo*xt;jw`LQlj4a_~^@e)CloBRN3b{ZT?%7P_`V``iRP-e7|J7iHaI%x*S0!{NJ>- z4+7t4(lR)zLhkJpB4Ni=%m5=_m6tboUMKHw?U-!0b*r4%?*-sM0<8Re*QdWN2>A#3 zF3m#=cvvM?#>JM&=6Y^vIKh16>dUgsmax^w=eds%y-)O_6)A8mm<;E7$x^>o{=h@Do4&z1H2==R<=x@ zBMg=S#NfWpq|-(JsrY=q=`e1Q?L*=lXnKJt2Vaylq<_8t?U}o$j}`g`U}mnQsngud zVTb0h8~i0&#$ipv6D9Y^L87_jV+qs`n$F@EuoD$faHI)xop^q>;%D4w`qcm*0pp)d zybbmjnoddf2k>oh`QYa-DdV$V?^-g4hu;2(TVNz`n8`!YN4yW%Hi>pg{A{)L*P^oL zyE1$mKfXX-bZaerV#00NDlM{?+~^|`Nhm%D=(`v#8&Jkot~5XqekfJs73*G}BX|S! z)rPmQ{rdIG;E`>mLQ;m{@6A6F??ofVMq5Q39lehoQ(U8bDKtzdI+CJ?H#%A&YDxZI zd$;Tn`yV`o!+`|F>M0uURG+`&wi_co!^=H|Ys+wuJ~S@f3C$;-K1@p|?4^-nM=Ukm zlUEoE$n|D+6l6sI^nvylJG=jr0RI5SVD!e6ol>tOj#eP^-Q2=kZ6B3xnZ4vADzbN9 zoEu^f`S|6w={TK7$e8fu0aMjh%9B9}8e1&=Wx3=%iASOakGR?GW<^Y)qZkqcMX8H; zNyV+96^)vuD*7LCr7Q3P_lHq+hZ@Yua+|f|YfMV(?NJ`h^88K5JAqYm0WlwJ{h<2K z{yB^@>(Gc@jdF{Q3|q@mMoOW_*5u&X#k^LE=D!i`ZM1hbM~|gH`(`Hgp0a}O_vSnv zL&qqT%bEyKw&C6-@89r~X@Es&w^N??hEFdP6nZp?FB|bAO$~h#3c_#u3J-nLsEFwi zj31#ff7&h|2PS^I+S5PxB7Tq*=6g11jQbJ^h7Txed;}3kBI8IHoMJ()1*@&W_=_f z2Bcl8l?q5(91BjIyy_`V8I-8cLWxs!%Uh)i!k+u%p-;BGqeYbn?u2m)o%k8A4=@8C zH6V+YW_IjsLEWDaM6_a=eE`IAZ}v!5>io0t!a<3mAwSNcEB@|nm;zjP{4C@Ttichi zLj^3f^_0bvwA)rEob9*q@M{M439kkP55)l;(?9n)Ag#t0t2`cSDS%yca#BwNa#m90 zY(H}dycw|dwo?gGAH9`r!~Rg@{TIU-#LZ6EWal-i;UHDGeH%Rkuuw&|QmY=wLL*8U zZJzr0ih{KnR}yslqAnNXVh1f3@57vXHJPSVdVc0RDP7o?=ztA=LeFW*(F!z5#wyjv zSwzBle|&!LuDSs|a>>+Q<)>IzUfVVkg}|SZ>31~(B!ykreK%HHii$5~Thz@G2jzLe zdr`Mm-bvO$9&X>mMo$R#7ic=zOfqx|UpV)zLONX)vqXxj@cOb?9NdfrNi7jxb_&xy z`XqivUqn*PZ&piV6;NS+-u4#@dTr>x4*Q#|@}7qUOeGCdB$YCy5TKdWXGFm~YWPDleRBcGe()kWSjc~ z0i8Hgm8kgiIwXC3?3Zg2w88hr{;0(9N0%FH9YK8FyM$MGiyE|YGm&UXkBdT8LbEq? zRoSTYCNHn6-VDM(_$6h|9z`kBc1#Gl?LUyaR!2U`p$0g{+O6_j)+YZ&kt73XlalP!NEVm1|n!yUcz)~cP9*F%u^AH0y|pVVKb zsi4F*Sy%khLspMM<(?K+Kyj>HMo7k3IK$L zVs#+ve1u+a`@UNO5QY^WLTZ_NeZ04yr#i~zRODT!n+{DE%IioPnQK)eJ9`K`>@FS- z7CxT}@|nz(=qQfkOZgFb5L{MID>qt3$H0U^zL}i;SG8}uq+1dmfMn}g9C3_voMx>< zu3%ExC?C6iMDi=Z(=VL+FRpML?s!-QwT;>}-@{eU%P7Meb9iFlFSi%WvY^}uW>fpN z+|qK9MJ+hhGnpFS{h2U{(Z{I@*%y@@Vq~L63ShV&_3q3$a%5I8%`aO1U@{?2(}JwC zeG}+C!QVPBxcWf*LQcDfT2Jy@iqRy!70#Ouv3Sq5?2DfY(qk|!=LpQvk;u# zdS)mnotSlM5_|mlfH5K(N5PY7_Kc@&dXlxno{gph^dB|wV*SuB=?%6L%T>SK{aMNj zh+etc9#^E_s?F==36t`R&m8(gbMP=^@k51rjkm4a;Cd4EAAkXJ+AKPo-1hzgy=Aj& zrGt+Vjx3C_%B-ctwrAa2j6s`p4H&VH6&kh{AgXe9Z88B43 z-uornu+ZCDJPOY^xH^LnRM~L3x8zm;zuS|_0L)E=_Botifuj*Ya4&z08@VUF2cst0 zXb8@2H02j`8zkg@UJ-l%7$#Grz*u)sZ5LDsXI#7x#-4?MFmz`Z_xb+mlawKW9B*yq zrMV~sCn(=wWPoh1e*Ccy2H|-wTE1jFkhI@kP-l~f+6A#|jbITbvH;WksH*&;uy)?o&t?`4*KsMDNy}k5ig6j?P#-A)#FaH#n-^%$J6b-qS^Ay%_YYI>$ zvDRD%)_vo#(m3b9DW|dWZww?W`1K>BU7rHsm2}&`PG8B@KU{ zS6M5TAC*REDnm`Ma~mN&Ns@WnZFO4bL~P3NMj^JKDQ!G{e70k=qZwWJ5_lLrFXxLu zj|7-VcYCzuf^TF_TI?nx*gL;_S9m_(_rhe~M(zmT0PzoqqWOUq&_ue)%dJRm^}s-%t&223h(Y>dnL`=nyl!ea`9irODV zr$YEAM_@M37#NusOd~s@e&S~;^wy8nkSS!YP|UpX$Z*7Ih^bIB^&h!LN*sf7OQyP) zj#Eh1!`PH&U20$BXM=vJ-6~}1rRNtIRbo($7C&F-eR)s!Dvduc!kF?*^y?miVdqWV z6CaR9`(kIYAVJ&l`GbFJ0VOKB{CUiM6=vWYe)@AuE)^QAEH~wncXWRa@wlD32ls?) zbA%%h5aFOU6pN6)u3Uw)V)>NAg+SoAc_Hb#>4b*ESdno(D+}Iw3IIs^PaZ11N*zfW zN`PMr;$*A4NilBQh$xa~dRtor^?3ncf@6WUsf3U`psR6rxMoJ9{*>?R8&*8f3&! z@?V|6L)M031VBy``Lxi7O{ zBkH<9s0H^tjez(ty7I&1KqkZ`dS`(%YJY815SUjf4FsgtXscQJRcP5E{WRvTXbp-d zpB_08mYiS^r9N@pqS<4WO8^^-zZ~fYOkp9`ZvEaFSyyY<_R@ImZSKf%*AHX2pVb%5 z01qecE|mH}O{*ttbzlm{MZ`9FqH*DQJ}`#)mmnkr{M7&zjNl!`JX~@E4JK~*9kS8r z2y&Dqy1>!E8{&w@as2mhv;y*3w|4DPzrKc=#^99L3OK{y;7G8}1)~Z&@@B(44wvx4 zJP%iA84P(VyZ&Yif?Y2PDY4U6Y)?0qR0jo|$BY&WGRW=#)Mz%@UMb?Hz>ms?i3apZ zZy3mJo?3Vv!9nrj{vQ=W-wkahuT!)07+t>Rd+{@VHsVWDx0Fc>?7SZoCys6)liy)_ zV~VLy%2I{ZB2uu(b@4I^CxPw9LWp_IIZeOvDF9X?T1S7&wY&2O+#k9+)SIG^Jr$>z zM)$o~=&)z8G-`FfT=R(2OU_GL@Wtq3^Sj(l)}S@%%>kGGIYo*@ti=KtmoY0@PCzra zV2BIT{@{-tlhoY#Q!3B1_=Mn7#7tiNuub!Z%6q#|tfQsHiL9Q9a*3;)4|&4}l2|dQ zgp;iHbLPE&0X!g>_0C{~;XJ12q0m4q?j2(VqsL0qs;3XrY;Fsz<5 z@dec6<-ow!U4?+_8-t9py2-xY5TyQgV(Y9M~@I3J#7SG zc-74a?}jPZN8l9>4x7C*fSjdrw;hiT;TlX-6u>%IO}Hjd`X+OBvaPp7`>@;Y#+x{V z1USkG9G$83It5oqvDC`DL^0Eg$tDRnH_LdZj;* z6x>a?5IR|6y$B^reQhP*pfVgk7b>oKEY>YiI-b4YR7!U(#&za=bvmOkd?yoKCokDH ziBIGM_btilMuC?Ru4(^mHkuE3VQq)*kA*~dT?Y8O>QLlY*D{L{l(SAyey|d@J;0v* zn2rkdz|O8zyPY(ab~ou zIQ@iOVdEJ|w6s6gyOwP6V6^Ybt;#+pT4VA#KiIJ`Yc;3BIM<3;%uT5lqTL@?v8-gx z7|{|W_**IP6 zu0-5%2%=}5ldYWSFwbbxKb=VGYl zs#rw~y0#OLkj;=zgJUx^U?Bbok8JC5!uxRgkolP<&M#|ZZy`8!lgK4FiY3fU`11v_ z)nC2xStMvuqf|C(x-pwMl<0JAyTkFL2#c^wj2Xy!+O55g0(%;HmqrD`d zJR$6vVPFCJI^Y9t?kfQ$T(hb|PiCxBG1`Ut#)5ja8aT+CgYjHyB=~XTop=>(gyHey ztFlQ>G?-KoTZJE#z9nX6L&5Qf5!g|dAgz{t`#h>R{-~|~)6M%WM6vq^m5-$}`^QGs zSQ;xwE0eUUjgn5gG!2c&qE>@9q}-JE<$isV%rvNHbl?om;#eC6Ed#lZCe8-dy^y!p zlgP{)Ydc{gyg#gm;UD>DJk3@9xgtT_AEE!ja;XY@F39xNz2MZFP! zu%yhuf?|WQJdwZsyR+N=%_`Gt56~Ar`Obnc?8^B0muP202d`V?Q=HTdn?9f8+Nfg+ zV_nve4?MJUfv7LS}`guPaD!NVS%)1%G1v$%rtbJ2a@x^ z)I(C=ZjXaVLBe@y5w$Zd#Cc-eo_I|n`Bp&qwWX-|%--nP_8{Qqk$kFIFX$cHlgbZN zPr^$2jW9!wUhwC*QGj1>yIDZqdZIA7ZzjyMX8ZS>hdzWC&=IuInL7yo^$jG{(A5S zwn026;e^F8shzh?rj;%;AKAhE((d`I{joZRzk|oJFN|KTsqjco=BnMgQHBj2Qx9KU zn+x~3i|>{UlK#{aP|Tf%wR&jg4O&Mxgz&@#xpmA_Asy2BBNo2RvEt0nqrZK7Cth=J zMuO~uN!;kF4=yd+silNM2K3Z1kyhYJz~Y5hPVd`LNh8;`SC^k$D%#J#G{|hI)7A6x z_9eC#BMd)`#DCsDArQ6R)XFwioZQybBG!=wBGEJq}{!7o}=Ly zM`3mzg#bfd?dZ4kmO6@)^>pAdamt+IRcvnkvDXeFp%9aizwhC=qlNWIdfd&2q6)HM zP$hU6t)@ay!r!gRnITRvl~?bT;K)&iVD1RU_$M05BPMv5+gC>`!o&&c>}hP%~C#AOeh6i#}QOT`^z={G?Mel3l-) z|BZM)9wm{#=rFl9(Jp>fB+w|z3zmSm_ha47cz{B5ZoTaY6nSi9N=}OWWdcs@oq0q0 zxB=q24w$$0h8-MY?&=n$k5htQm(EXYDHSCs<~au-{n}7h-sT=2wB0Zd7$~H(^JLr2 zI^mciE1Py!?(24^L1Ed}!TFqyo-Ot<_SW&fmP#c$ikG;?`m5Gq;)f6zJ`KSyepZje z50K^ki(K?b39%WyS7_2->xfyzC&~-KA&7&3TcVD3y$0NBG25i+))GU5E>15uf> z@}HATo@^w##_a3yrrwJ0qAT9ltI^jc*HR)3^=WRIhaS{yJJ6tzvKaY04avwuQ;M!z zJ)QSxINVhLU*gGqDMcWQgS*{~DH=ygJ#rSsf>ALVfkhq%U`g6T!?%hjNXJL;CQIiZq-~{w(*aw*;JO!*WHGd z!oHWGvwmqVdnXfRbk7YgpV+^>DuXf7kPjb=#SfG}CSnRb(dk0jrJuUKJJ@V>h!p=& z2lmZrz`VxA1oA(o2Vb#Qvv_AE$5>JRXTD&Z;BXt<|5e?Mqt{>vWedclaH(=H6HG-? zHeq>ea#5-ET9gYPm{7g2SJ4!E@-1k1VtMZZvFUDEs@@8h#_=!yIK9u~u`!F5y~jkc z$x_66(EeiN8)>RU&Op*ip!Kpe#TALDme`_x|%%oBqMW2vvjwSbmy^ZpCx7+R{NOTz1Lj8l(Us0BUukekM8Z^muI&AbNeFlew zl^0#_)v-iHfESV|i%=AoQkY*(tOe&On0cAPic{=NI(|vuK zGb&MtMU|?AU}~vaJ06wgXIkbEC$U8hyJAC%P_ROaSdoqtjNxORZ>-}&f0>=rfnFZ@ z7&aZw8%s}#jLHp8&w=-tX*omeI^n^PXvXnK8#pz|@ zO96UKO3y%AmGSVGO^y5CDBv+MFV0XaO3u7RcBdJMj}UaO4KdO_kNN|mk(p9gKx7P? z(t2B_wD4BpjR}rE8V3MBiLgCQ5~VmqgLmw1i3H)uj>}{En&o*x@|z%$BIV`g@C^e} zd$TjsIIVVQ$)#wIJJX&Ebi?_TGXvBpnk%xoXn+@rI2<$IQfs*F?KGAi2nRjJ@H~ig z>vNU>u&o|`EdbH$ncI*k>Y8y_ldSwH+4pnLOmfYbG<%S-HKGoVmkOi`DEB?DP%0F7 zOls?C7(B0gw(5!HN?WVv)xVu#?5r(C7g!}rE1`csQ;O<2nM;lW8O^FIFa7Zfa%HbE>5UxBR zd8l5k@pq51GwXcz^fz?w8L$rt`M?XiPHA_8O!K`5gfJUi+bxYW=x;tH9Xl$*&ZhCm zOgwOQwx|A;8O-%?T3g5F8yM#q`yG7O1}s8-Xp+I3&PIo%K)Hwy7@LPF_*U-Vcy2D0 z{(%)@`V;;B1_;WEQV>{wfq~m<8X^{ynEg`Zu$GoyUH?!D`B+_E!o9R>E2q)#B&_T2 zLW;&-HGCI%v$baCz<~zZt63Mnrd=J+bek~=aP2NcrOPgN{8M25>vKy8#|!8KBb1E0 z{iq76xIC5SdtHM|5=ExyFW{!%_+hcH@_SuaZ}Cow;XS493SRN^NwJQmv8h#sckJhgKfBE4-i6<-`Gz4+v`6kYFe zHk`L~<9WzfzlxPpWLX^=lXkfy-g%_Q`p4Uj_A~!G2|7gYx!1%tX&oAry>R(+9a1q5 zn8C=HX5_!YA5Y9-4;mBCKuckH#~2EqEVR@soeH}MZS=MOS7c`kV9WG;MYk$xmSbRF z%z>CSzwD(mYvm0}u~!_Nk4?o}$f2o+@3@&%J)MtUB z_Q>eeT1}L&RQwkegP(n)`1V$Ea5CIw-TpB8MW7mhIN!Nex!rZ;r`@X(_oJd3D0c?b zERl-uf|=2?uDe*(D?+((ca01M^~;L%i))QVGz+1I`Cy|ahr%?^T8S^KtcJN0Px}0A zxtun`J*UfzWVS?R6FfizE8_UG+#d!yb_KshlOIU-)SyRi=Wq}<@4qKLe4^L z^#{pABqUnLsBCXQn0^2L>REeLS@DVJX577|%O_KeKoYTdrwgQOn{|sCaqd&Uqrx?4 zPzUDNuy=7_qy(nucrcBaj@BPv$EwSpS1|&(K~9v`na|Pq-Ubkb9|-g}g&gQk z8w1^7<_y$&Lcl?2C%|r6eWnj%qFXISiR`+U`1k@}NKrAg$;`m|v1Cq7mp>mE6n!F= zS94|NJJL$H6@ikJ`WrOKdeb`3uB2^kp4S`fwZWxBUklDaq^n-l^E(Wj?7jq;GE53z z`8aYXSFP?rL06BgLvj6P5b+9pEq!5jdtqVQoW>ANjoS!#R}1F1rufVthhy!PzYcwl z8UK9pY{C&IfqO)_)3j3-0ULOF`ho!NcQ-unGcV#1-ROG_s`-UW-GD9pwT(QC{8cc5 zyF14IVuW&XUn=I=LvIP9=SIHdyIznt!{(7J_z-hxz0JC^1Napu3!UZCP>D9Xz5)dq za}z7mz5kv4HYVV}%FUT~DtPaAqTklsR?l9+gQC=m#y{0_QB?}uW|B*6DeMRD!DD}~ zN2`1+{&j#Ab;S+K^&OssoiI6L-)-lMK5ZSK2Sk0Y&LV;i-RLGQyaYCO1X944* zLqaZSFlu{Ti`Rkc3r2`Zt!`mx{ljS5&4+^Ruv)|;Bl7lmmIrV&gcrKY)gW%CZPVWz zo&)Y9>x^$<8ZPbWqs`>2emgzf>iYSQ=`Zo!J1+UkTCkL)bS6_rRWF1V45CSDzU zUz{e0TqtA`D~Jkw_fk#CHw8!=Lj^G@!oa=7aMrlF>Ni^D%O2{w47on&Fl}d|FTxtYC>d=5or3;0(1lgj zhTJ*=3xZq!)H@P9@s)_FsY9lDS9^bfqNgO+=PJS#cAN|M?CK4%Uu8$yT0Gu!kidkg zWA$4=h(y!qHDFiHV?8p+V-&dsO*gg4Hk8mi?SlSlJRTNWrkME?tUykp-x{$_P^B+VbM0PJ4GWBeihyqaPdS zVkSh=fL+^WE&fgx`_S|aW7ND*(yfht~vELOiJ4 zCsrl~Eu;S)t46(y>E(9rfjUIB0Hdc#Cx*|=n@}R6qNYi`00RIn*ZR-!+dupe z5qYFJ#@sloLqDx+Xw6Kx&2CL^V{t}3Q5*FGCpWY5?+dbbOCo$3npRxzY`1@U&SzKY zl;o5-G}oHmXaUhkJPQwi3aQIt7eg}1@

    N|rUoy5ynu-@7F)B9 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 mWV^_l(cdI8QA)wRpyLIEA!R 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�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

    Mb?Y1n+~Q@U17z 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

    M>hrt1B;7cZY;dG7TxD&G5tvg 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�&x)$%0#4wqg!H`ngn@ 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

    tKsiOTh}t8RoEIuaJV(JxO6dBAoLp@w8cmeD~X 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
    96p(h|m-|L59fy2HLxXk(_kd;XI1YF|{LXMZx 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

    <3+xfGgyOi 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

    ^TFnKzK& zwR?^zm}>CGNGej5?#POkx)2^-ejYp|Id(%5RM+gp3Wi3*Z^QK{58ikwN^0aQ*ZBQf zlx}gzbe#3}zY86FLTi5g#+KI&+L}or!BGO>HZf7UB|dpZf|peQ?gT{i7xE{Sa2+9x zhzdqTAzgX{HXl6-%H8!XEx_@B*y}&1P-WU#&4U)N^dprcd?Xo(;iQr_azy7Hn%QeY zv7l-?Bxv3l$4btXviEOUU|-R+#sxjaIUo99t1H5bW>V#mSiPGVo;-!IX|AQ4)JR;6 zpNZ;Glll)`&ieh|j-aJ>@VS+>3psp``KfKT-(jdOFT@$Dsku)^y_iMgL5k4b{+!jKl23l@h(rZr_|pBphhN^jw#b;jwxS3A|ZKj z2>h$*Nq^8}d56?wO6YXzNxVl#9de2@INNs?`>g5H;S)1BiJrL;^z4#kjtT8@#BgAL zSFbK>ugDB~Eh#AEA}JG|-K;TW%}16+GM2dE3bztaj@;EP*mP? z9VOY<8aPQ-n?@sOSZOCY3`=C%9+rv>Plctx5+dB&^sjkpC|!4~dxNn_lG3@`K-tzI zE0~JZq_zj81K^hADnmPSZ)QFT#&DdSe=qiO2WMeo;*S){< zj)e2-OtCKvhV$l4h2G^%mzqTaZe#vXR2EWlAJk}HfQyKM2!b)h-F5;VXAPSD1O>y2 zc5CJ#*@VnQm7|V5fxBvQOoR^){s<&wB_qRs#O-d-vx^uyD}Q+P@{S;uL+R0Fza~{Z{DwO7hnv?^IiR~z!#})WlE)sI zcb5HxzB%MLfRK9*_VRs zDj&xe9fkzuz(GHc6Z7UI97zP>9P(TXcbHZgPKn>6aoz^xcPW{^riS zMhqPQ*<6~|_oM1Iv8CF`;?7HK3PLj4z7`gb)EDJUz)0p1s30K_HUC+OykJA=lNz_V z_Q9o*ai>_|mpNll1&Tr4aOw6(ODkvPo1r-?A@@~iRAHDvjgDz9g2~?3rX6O){v_Jl z9G;ePp36Cf0$-~s2noALZM%4FZ>s&c8`9jbRBC#{)@5f)FG(XaZD4S)KFLzRHuTUW zLM|5d3ormsjKZ|dUqwQWdN#-ByV|T0W&3aXsFC=zVofKoYXMJ_J#y`*yK+c!pJ@wE z`KW&ISonD&ZsK!B&r~W^d-`5W+{F9aHzwic;SdJ5Wt-0uh9{%Y8-j+q51}o&c;twC zJuK&rpvSCN+qAl1K(XKKUR#ff!oWuq^jkP-6^BtgT;F}E_Y>`8x+C`+cRP8f40Bk_ z{<_(+@HU3^cg?|z&{TB-OVVmr!=>sn^OxPZ9@<)i;3uR+rBc-2=HNks&*5(O4N zMJy`soJ{>VhYk**dej}z_AT0rR^W!r9R#j1p%4W_#6A=OJt8$p$bjoS&A?`U_)=%& zbYvP$Ih+8{2s`4b2?+JzP!%m$0c2^t9aMM={hPpP*wTA}EQH)f3fiNIV4+o{vDju~ z8CRFkiY6m8(Vo}2-#ni^<%yhQA)fTw?!f@FP8?#0$ejI=!S6#?gEaxnxXzEWD82mK z1>r?+@F+K4IF9>hQZs4H;pFjJo5Fh>GFNCx77E9`-XW9rYP8!8qOk(yDMU2UeQLhh zYWu*T&?Z;G;{Aa51tS%7-oI#K$9%Do+g8Ol?Wpya{^p9nx)Rwuia?fP)vsaKN3oS4 zd|A0OJ6{udr1=Qfj&i#%I{+ z|7yMg`jJsV@UXqhkiPY;u&0hXYgYwj*ZK3D(}K+s51%Q&w|olxSGU3}ET>6M+UN89 z&coKq_-^wM3Wclri0cSqUy2}U{9^G%ys;qO&PWA~GJegxJl>T-KNT7c9?+w?X|7r$ zp>oZgYSWmbb-RArd8$E{79IJ5YZkGQ0jR+zPqkoLz7v6~dr}LD@~&OaHiCStWqsdv zX#|M$emt0+q<5QHf5lWBR7|%T_$p|9Srtl#%A-mD&@C&&kNvk-wLDX{_EOln(o>=3 zO@v5@rQFegRsE4yo8kESn6Q>e#MJqD((F zCr$>YZ{%EedM<8~J(EHX`};{LX@*JDOyxHDf~#4r2~mFTRNzkE)fHyfhOOv; zgGrx=c`$voIoVT zrt`2ix6J;(##;^_Uh<#-_w!ce`5+MQEw0Y_sokqyb5+2Bf*Dj~K?t*Ss}c0pL5W9I zE01wC15)h4XK0B6{ddk(H8Hnw$v3K#5`Ig!0@+d>!)|R6+dpxZZ2w&pb(ua#xx~}8 zmeW+on7H%488Qzvc{$=E=603GFr2iQg%xBGvEl`!JH}B2hEW8O;jga&p*r2u^uYd& zmu7FzD~&)bG@x;M+07xkOY;$oJmpUm7LLqd1oT+V~dIP)b`rO;8?P5lTR1`{c8L!1u&v}A%y7<2B#+jeOJPGH8>>Hda8d8yp3Mpuqmban) zeACH>WZgx}X9aMkHku4&qcrW}!#U(Na+4u>s{zJKsRpZCOT+v(5wuwgjQ4c@H-+SO>=3}LyfR{CeE~y@?UZbUYX)4RsY8yA#CcAcM*o$ zJgL$aeGGsiA~t=D#}s{FbOfW1pz$L475&OzHZdoSSD`}yC+%sEuuNO-lb-fm%nool z?9E7%BLj`UwjK^x5Eh2eugS7gqytCW>ZilU5cvW|1?bI6{Dq_QI%GP21`lvyGxGD7z6>HYouzMt#* zURQsd`lGIn*ZsQh`*A;pBM6w z&8JNsUBb8u1QW(;d@(>)Xx%&jh1mTWEOS50wQdfvvVou+Q;1%m#8%Oiq6oka{sk|b zV@VR?*M!FR_`r5Iz)qj42tXur@PM<+!m&3sO*IC2;@D(FqP*xSFPd> zCM{HP>`tJ*nY*yIc@9>`zroRiaNTT}>+c}L7hIhYsMUZhn#AXUA*#s* zj$^K80p(c<`&3Z8#73W*8bARSHAC7-q01i-#ACx5L&vjlXn(W z($OpZTN(St*@0OcUHNLhXo7a(5hIB3bl_0=dXOOT_*@so-0TR=#JJz87Hdc;k!8BV zn|DXAuH1S$pQKrHxT1nX&Iy^MO}p#UE94X<;r#BtEP0alyI>M}R9dynXOn>>ZF^>! zA+*={rD}YM85Ao`C~4t~0YLK$gta3|w#R2x4u&D@2A3c zqg=kzjJlX)#*u&4ryGAxB~0rX<9`toRMkL!5V<>?Kokq(h>S$$52S6V*A{wpBYtNs8>$lQheV*XP*1O z=F*&+a{InopdMN>)F}k*o0p#52GOdRR+ebDGBS{VDAS~$ddekj3d8=Q9m>}+RunsM zq~df_(_ihFkgK@~dBGhzt62GKZEPlOeTJe@LN)rzso`?ZyL|nY%2Pd0%3HgFDsGlGC9T~>XxM_!$ETv{YsI+Cm zoqieBMXXE+KX4BCgn;n1hYN`yn4+rt>nza!4k?xv2su_@?|?onp;#Fai;dqXk`mcn zqH4~4)vt!592FSF3#|ZC5;F)&4WuwzHi)5OXu)2M;|X%VKAnX}pazS{KFk8<8RCWB zO!`s4u$}FA;NcN5Z$WyV?dz+$mTpzB>L1O?JmEdqK_8xQGVVS7=w~aqe=}EBF*rfX zu^>!x`C0PVQB*Mu=N|Ds6-GKkUhw$yB%Ts)KN)66X&|BKh+nWqp0<8PWGjtA@4Kg_`g>eJn8wOix1BtVEKlC6FR-boUhD=f#DfH*|mRL zQ*j{^X7&Psn-G(+IR+hB@|bW?O*kO{>Tv}$Fd6=4Cis^+3iw`XVWhP$7Zs6jiidAg zllTp(?$@*021zXhYmsmNGEa;|!?YI8FKGohhsXRl1U?xFGcjR?FY(zjSa>eCMgJLi zUXRU?bAN*F{H&W91Wa@K?YM@HvHT(qAA3l`{Eo((QZWGwpa)KS{aI%#ZMxx--OyF0 z>{ezK4O2R*VK6}W8jHu2_8|fAQQSe>u~WlB>xjOONkln5+pi{O`k!tHvZic~-!Ss} z(_97mlqOd-&7Tx!Q|uMA1htMwz_}4I5D&w(Xs8) z_Nk36^%F-bU#h0R`F1x%VLZt47v)wh?UpL(`7GGko##tedZ6`<8#ZD*Q8v^AL5($g z@z{?0`eLx2GoKis-q9lRTPou_Ya2fn1&Wfyx`Vr@^IZiA@tB3z&!Cgh(q)raBFm9g zS;{DM0OAhL%AuJdJlY+PLEvzwR?f3W7+$=D3%{15Iu6lT=kbhn{pTsiP#jrv0Jrjrt2!r`>r`?58?bqVz#zaL6hn#nM z1^?mUGffth6YH)Js+l&v;Hm8+`Oe)lK!;midRhkRER=F|vD^~H97|IGPB)UV=Li1B z8k*-sR%(O0kShi8zAzNwYPlegt%6qNAk6G&&BU&Mxzl{fiph2=lOKTMq@wh1Jvo^4 z3(~c}&4{sRON~qWFKZc|lh)+@z*W%Lr_ERw0;gA>9i$Nk3Il*IZ)YJ2;^{z+r+gj@ z;yH5+7S8BES!6d6j?ts~cu`T-yT@*#!ULjeigIv;#-%4-=D)(ZeJOZF-&Vvl`Zs_a z30F#Yr9R2G7x#A{?=SGo^Oeo%LPfn7ZJ#ONE%Na8CjE zOk>0BhXCTrDam!0F7G;rt?=P19^sO<#fNSTm<~MInAiOQG2=KGL75GP@3C#vgOsTs z#SPPnzt9xnlko_PWsXdOfm^BXMRWtJ(*D)d2oF*sb@I@5-z5)b?!5(YX92k zi9^8~UK{zsNH_WW6oGnnr*RnGL* zPJa)He2lpl zeuF#kT7)=e@4iCtjPS-^nTdLt!FwDC9D<1tOU7<`tKjnsT>aKt(LyaT6VS-cE~Cc8 z`_)f9fn#dqtpCqAnqmg_DR_V6hTQGIdb!vmxq)dli{jmyhs&v;ah)yYd|{iU*+}n9 zLR<^|^*sfrJ?T@tWJ$a7*Jpf*+aFx{ zjkBla`V~K#OL-u>wLKsfk$k!Ak_a_T0vI)ZyZtFSVIwR3AOGYhb`b5x(-UO~BNXw-C?KahCChhM#8VM8K5xXF2+O+o= zQK+&zcDuRqrbtH9dVz`2&wB#1gHla(rO}RdY9aJ{25J>#+}qG-1wrkgsK=2NFuv#> zW$&)cFR#CA(vgg4c?({g8F;k!NmqW#j8rSF`rX7qATLg@T7@iLfkr83O#jE zm_XcL?9Fe&BF1|J-uClydi|zqz=IOGTh67Q`5bOuve|9ikXZHWqCT00`6xxt6mucJ zADP=++4K!ND#A&cZOV@t8N!_s1u`7koQzVo%9*$42&Nt#f|du(fg-z5hJ4xIX#A zYB7o7hSh@o9lNr%F=9yR$-9jg{xamwm4ji|^HNR#XB&qk;)iHcUWkaGf=#vqD<`OZt=9pJRA)$379E+CM(luIObjX^H9#>43ux#=k zW?CzlCXl#`NAo%;uHK{M&qz{!;jOp?PQyildtpOm2iIXc34$|R;$5kT=3E5X9FjHNV_hgN9X;8N%?7wFE1`#f4Dfbq%%d_wcCzLoNDw4UKrx@T%PuMMP6)_ z1A!Rp`&QTJe^Yc3(OlTN^87rug&#p!3faaC-M*D zU=H5zo^b^dnI?Ut`)&DHl#q<8>;VL~4B6b3!z)GzyJa8zZ%ZSLAfu`V{(t8oS#A@@?Yn-zUQGKJ-*R3kym%4W=*?X-HwnUt zQjyT%2~5pJaiDAq?moX|N>_3tTGR(2$jqfDtyoKS#IP^O%?Ft6_(uy&LV4yWTDrfw)Q%VXo# zTNXC~S?w32r3f}AlyxylWm$)Ai-ETz#Vxz<-QNZlMa0XZTT(^e>YqBI)JP#LLwV}z z2&R#lIQb-x54)*W@9rC<=M~hh1QZEsRiS>fRb<6nSxcNVm9{{^7$FPd^XBtDcSudN zt%=?e3mkgH6e)*q=4V-BN707}kz2W5LkhLSFU265VO_&HaTvaXIL5*I2bVAKVh;EJ znE5@~rw5<**4CU9j!R+N%rFzI(5-MJ5{`rDC-4j72Js8MpFFx? zP)e$fhO>&Z!-`??&AOJ8$IEElYS#rmPqG!y?Owsgy}RC%Qr$$y1l19b7VRX&-F+cZ zJ#vv3+Nm93@Xt4#D?J&*YMXS#(2<{>28umo7A$5d<(i8|t`Rk`09KqzZCl{qR?b1&xC3op#wxho}zIW4u4%&C5YgRV;uTt}`>UBiJu{8+5 ziXj{KVWoyvimauA9WhaMt2Wv9BxPI@QX1&&{xhHEm*Qq#HwLyUALN>Zm^n(^bw0B@ zd$jz=@b~Zxmv4~CV8@e|HL8sEhJpmBb)(+~l*5Tlm+mvukn0CS-WX_Z$-AEYILhKz zdWG`yurUO$#ZG6(kv5l(u2x~zRY~I2lQ_r3w0M4Ox>@SWSgtc@=ltSxA(sq=yhUhI zNxQKi)CKmKWz_?f^WN_3p3D{|zf7qeC&lchrjDRE-t^@>%VF33{Y=<_45vtE3 zPRSd6AKhjlK(5%~q0v0>thqVh-iwH8S&CJ4XpBO4vVg(gMLiSdUXK^YHZKW?#Bp*? zk22uE@1_S8trk+d&nJq(yUBG0ypL$sb)b6%i}?{!^S>1(hL%0Y3zrV|^&ofN@!PE< zYLO(?bbxzl3B`)_e!f+@zF@L`T$_q`!Au7S*-9~bqEEhn>GRrUm0_#fkcS}9f>Upn z>>&ExoFw-JO6V*pUo?h${xOe-$(tA2M4Zu8@omA}5{0L9D=b|lf&u=#(mF=o2A{7O z(UL}~XkmmR5wnrm0h?_U+An7;jT9$ypJ*j%FK|Fj_6h#)w9~3@-<6>Dd=P#XZ}+BU z(A!rUibl|&e5Gez-t6aN)S@IHAn-E^G606+CESW(tAN+?TIe$Nbw832E(GvU@tAZ$ z9HN=TKJG~uhiwN3qg4+N9{YJcPEP`gad%n})Cvy*p6FC9i$ECAyLmS)a$J7;NyHTJ zS?-~Q|2UOGsS%!SWbcdv8jAIDdHvyNO5jFgd(kaLveeD01%?j)=nDr|&il|dTW2*= zgU}VU;K(CgrTgF=-p9&%=X*-6C^a65V8kyw)%o`a)cLO+^2T5U0H^E;eK!H~Boc%tb3f2XRKt#n$QMARq=?o}$3uTr|$Hkn#$lq(th#2sD7 zotIr;Q1@OAtpM4Qa@a(%fuGm>8eLJ_G;u?!Ucl!1raQ}Yl&#NLCSL4NPQint`N)N%3>c51lgyB-|+|%b1 zG~pvqq7YmWN|Zn&mie~AgK`3F1x4jKvc$zpg*9*W*iW0KO5r#RltB}Qr!1lq>tB;j zErG*~M|H$AY#}!K9rQ?3lUrs+tLtC%2t`v<_k7#NX$#8HoNsvKyJ+`)0$1gVm>(h zkNL=>h;T$tYxnTY=JN&`Dimy=j&o99xkjW}vEO`%2muB?5~jg;D*N^bs7HNJq^62g zUj_(kVHh`z$XR9 zc3j)_xkQUK)qBU@nGjxfPrxs)Mf1Tt6X-G=~f}<#%JrEKrly*e*%;teBQZp z*_Ra@64g$cUKUncHAA1pWl8%GtQuTjPt_c#)a~P`rx(p^AeBU83r|WhMJE)eK8>ar zx^;H0?}o(N)I|2eG}XVS5dwEVy6e-m^}5{!qY4I)K^_#U&t<(Y_04(@jgccW0VzDg zcq9gnV=&Vd_vW|8aI8N4CLVv;;J+@z2+j>KlPnUhM_tbbHh=w0Hc;EM(Ut-B5f@{1^Do&y;*zOO?#)Ux=-V9I<-a-Ut;VN6!DPTP$nDyfbm<-XzJ^wJirQzU z(#v~I{yWm<@#+7*(T>Z_D~XuzYOJ`HS}Z5R?+^YBV`KTmjxR_KCI8Ez)Va%}CXOU% z7PHzO8?@Az_S zpFtQp0SY%=_vaM9$~hu>o{$#twvD%|1y_kf@j>sP#so0Pz-`$YrMr$5fQ@EF???R z%pmn~N{KyjTh&2uPX&;npqGSXCN_?Oglr#*26XQX>5}In6(gl?bv&y;cg) z5p?3!)nAh7T)JN;iNPNlpA5U>c3OzNntUfVTa`n^jAJ( zn0~q>&Q^MCPJiPhh@U`&)V= z*@I8iUeZB7zo~ypHy!;>PpQk};__Q+klOe>lqhcBig{T6XSi1rLd$vm zGcCJn|1O7ICrE;``zCA#;k!PM-Ei3ox}}ak>sE~0-acA@HzyQ^Z3{#)j2ex1&%Mxt zzUS+2`*<0S11Y#_bZ&%lW=RSqc_tqLH*OLv05A&NOFdeXBLsR4U;vC05J4ekoKB|| z0c#RR_h0Fy1{9_u7>L;i=$4dtHdM_6`;QI~Ey0L3%p(tw+ekCn zm4wv3g6xe4(r+f4zPHYb_i>WtH$<|vgAnBT=&NH_qinr0CVo~Kd_oA!zXdI_S9}arN#|qDa0e~>RW`bpX&{>jQg4OdpJej z%+RZb-tJ(%yAowS%N=p&+VkBhjhA>K3G*m$4!*@O@#PAWjT<1=FiUq*D1(xt)$GuY z|Dmu$2;An?ibRZ@RSbWL-OvFo>S=Glpwe3DwT`CTklnYoQGKzss(TSdV_O~VF9NUS zs*@iey!GKbu0)@82;L;w19Y%{R!Lw1fS|p8NWn0oIhs?7fS54uAbq9r#<85E@wN|d zy1-4g3d%SJN0W3JOoUkB;HGn37<7SU5SL(Oz5Gg@Cn;CAoOi zfJ*LebQWc4*pbg(EN^mcY24Yc(yt_--z=Ua&U$R0-%cx2hkh39&$(=G@>3X;;wDND zzT{yb;0M{|`}J5R{7_};|R?{PG# zG~pf}8a^$=R(u-Vq-qIeNwk$$X|J_9O3$vU_Cm{98&*mYvx9#`1>A-NZ*?Bhc&JMa z2G4Iv!JBqXtkhlCb#lC!gK6*(tq;2-Le7rM8f{oJ@8$IJqh50NE5yhLqHW)ZSg zHi9$5A{k#@K5)|dsgCT%A{mOV9(6X@wfvP1=e`n;?V0>+s4Ol<;b|krVCDT8T?`}j zf%O@zddPl%L&|ZU%<^?@yVjQP{wUjstku!luw5sW+Ni*t$%P0her z-6eYpR^0Iwk`sv>Yve~nv$6$-7V!!Bmcl_vXM=mUJ>!>f-pXq{k@QP>b4Y3uaZEly zEQ(@9hta@X1Ps`+_sjr|;Q$FUQ7^R+-Ykmk)kYe>tBZA8Y6n zz+#FjqP`uQiGrSm&h9OT*WblsV#wm9X3dRPD!EM!+O)Ga?m@BXNT*U!ZA=2IjUQjK z3`XA1e*|Ir{5(U5`Pa>2p5yNn1y;$|L-lzbqL%rf(Lf~42|e#&2s(pYg=Sc^@o3IX z*hrj{!qG=xX)QKngh?blEdD#m=^xNCL$SQ`_SQ1XtgzIUylKf$1n~! zn1CSyV&Vj}kots-&qqWw5ta%3L*67~zW`ZEsJwq4qRwFv;u}^mZ5=$YxRGjAA!%?k zI4>u$XTChpU8Z3-SpL4>9G84n%A>~C4-|i7tDI=fQAK6D;kCyzr(R6WGL`6h+lEQA za#c%aKJ1|CnV9eF;k)Srj=`r(9th@~H92>sq4n*hv+$XznGIFt;Df9tA2kTf&Sl%_GM-pK5aM6X&s49uXo}NW4C7B#qBs3cM7#|$Np&E;&JR1y#_&0&}cg9 z?2##Pcq_GaWwH_vcDw&p9(;P|IFmILC-S4ruEkSfQ>ar}OJbf%NqSywLZ3 z{eR2+g%Bv9e};uq2B`hW;z`fmE~CGRI;c^W%(+$26)i`v6 z7{y)4Z-pP%8)E1Ew=sflxt_>xF2Sz~8s!!R;y+7iUcLguNoEOg9Ha?tnL-ZGc2Mkn zilR^KMl-tl1bj9E?SE;NAIZ_Eie{hRJ>1l01O$5M;8ip#ePk|)CG%xb0 z5#aap|EIz}XaHyv;WCO=KLb(@IT3583 zf{k>x+Idc&{HRL1sSd2KX9zm6dPMdSS}{6RL3zfdVZFHc8l^u?JD0s!UftjcmgT&m z66$5wn4{!FgC)K?aC`Wp=^GYM=6wqEzgeCoapXPQfoL)#j0==4Mmxp$4%~?xvJakD zEW=YS^WYHM!Bv_nV7t~}PlqM}9#U8XC0;E!zkAECr5Pm7RsA9o;UtF>^Jb%a%*Gn zq%NISvGeIA&aVawOxT1*VQW3ote;l(E}B`pI+V3fvOF;q6Vr_JwyJVP{nzijW-~VK zDS!ezJ$yF<3XpCDp)C1z^_g|0Duzf6RAoXOuvcOC`p>N3CP8^w?Xy-6RaA(B?w6jkS_T$q8 z(>9}A1juKDf*$ov8I4nTn_UwRj`YpTn5NH}C5PfK*`?AGRdR9RFat zp4e)7W)(J8m8{FT7&MxmC5uIuc|1B&GV#Gb(0mQsMygH*lqSZjF+l#h6}T=(%> zjmVB@hhxc{X8uIOViare$fP4d_qRYg`d{%xlYts2-Q_x$ULWQ}0?vcUHH&jPk#?r% zt)7qgYh^l#pEs_nd(e$nE$~GZ>{{OpD(HF<)OJYA76pPjqctE~6~K}wpL+fmP$A*z zw;2i=IcKU%vODMnMW8B?Y+MSRu!ODR%c?6_iU={2?ksn?Ec3-pV1qB%>2IA*@+CHGEzmTR-5@RqIIBPsQ7 z%bZYBGf+80HQV16-l`6-_24F&p&|{wXOMBB{tl!SQ>blqd`J9K26tMw)Lc81 z9nswUxR6qpo5SqaJ|sFkKr_3y#*Bal|Hh55dDk#J(1ZnTZ&hu0Ne;g#?P0ampnO3n zjEj`#e(Pl$`Y`nF`>6#mJf948F}43%d)%FTTF&`9FBjbMVXWh~#ju!-{9IiarHKLM;{%D@zn&_} zua%*!<}7?24L_BO=p76MinMLgWK!)zY~$>7%Y=cJQB0vthU~8(?Z!x_qIboxkyF)1(jE?IpvLM*>NSS15@2kt z7!NN&dS=UxVTl>)9)>+Fvcap&w!YVU(u#RoY z<&@FVl%Id83VWbQ7Rx$FZ~mAQ=z(HJ)*&UpBoWXFM($6TFX=G>HYuQ$0-q@qv$pa8 zpp$d8{AU`V&F&Vg)7MX^FXQ50L~@^F-oRw)ly>)z-&Y_=^-5)qsp?27h5$&3?56n2 z`|Yj^Any6sTb4C*u{RlJ!>n(>1^18qqdUM0FYjOo94FqxM0A<%K(PXGdB)qJd<|O= z6apU6*Hr}ue#rL(HmA4Or@z|@$n5rL85~W#e>pQ?K6|;I-s}&Au}O#8sF|96-vlw*j_N^ zJ{FLIx;hl$ZK$f4-vE_#>)azF1S8HF8dD!q>Q*AmaI>_+Z9<~lH_zrZC%csAR})QB zM=>_i)Y1l*A;ui+O z4eyoh(4pp6@egueG1YKZ!$w$bvokkGYap}!?)Zk^g1M!Vi?0vy3*R=S`1g%-g$`5H z%df5&7Gs@9ITGW&Jk(TsPqy5WXA*7l=1&)xK2PU;P@D-~YQKH2uDQ^x1{N$K$3J-}Mmk%@ zBgMY64ODMMlJTG2%r#C5Cb(ZQdRh((^V0eN?g^LtwIYOZLV(J!LCy?K)qz+yfu|5= zGFk>aJ4WqTS9l4S0GK(Rl3nYRcaC=u1XD!7CL7(}3VsXmN2SPeJ2x);#0AvCvF7yg z-o!7AZ7A+Mn-2l#xuVdP=5n({?qB|;%H{P9F45<2H@ zxb^s4*v1}w+__^6!jjDy!oHkd48Nq2Cxcl`0#CP);*A({x`zTs?=zni0nnS@8bWmi z1+6SHj!V^KF<6hYLlpr3j4-&e2w$pX?RRumITZ$2E|};?;e5ojYInMqscTK?u3KvW z`oPomu`lt|HL0-7tC#Uwnx7+K^8-vTXq=*V?FbO9iSjeE9{!FNpn^WTs#Wl_hi6dO zW9a9~M`}qi97VPy``xFqBm9Xf^F!Y-cpulEr+?Ez57O-a)|}h-yLZN1`4!~9xrap8 z2ukffKc#U|7emr5F!QP=@i6rBhW(hfU!SZc+2)tJ+}{|Z=r@h;?@asc&C@6WUu%VTk)B`?1jKhZ zCLfHCKwomxf;9Et1^o^1@tlvV)S4vnOYQk}N%I}cZZkT4@?CcbO%bdNAE#dn;n;e&smzc!2#GIzwQ*$*yc_lK#IxaJ2cbud=`V#ckS|<5#@} z6M4pvv3Y%EwMom~`c#^Q9E+rXa_yt(Yl$sG5f21Zuh%tNz>~!|sNWR}kYWB;`KTYZtWQ@2%JW8VYJ0X?)qt85smU5A}2|9=g1FuF+nE9=jmK*hJ@0oFcqs13Vlpu=n zhL?av{*5BJs>kgfolG-@=etLmx4~5o2Q;B(5mYvz zC%d0GG_(l&zrQ7Cr1f!)Xa^jQB!(~(jEnRk^zI_sTf;RyJP0Zi_*MW(SY)NbQnuHp zKi4ssy>%ncnP8o;I@EB52akLk>-Yi}L=z{7ariZml_ni}dfXa*iF$f_vHv2aXxQeH z4o2LaCxZ>dE{qnvQ94K;(WdiW01``hY?BVp*RpWxZPPF8G~ z<(1?ME!>=4~ zP>%=xYD+rNwVa#QHVDT4U)NK9+AqEi1h;wKsK2JKVFZ&q1Aq5J&-PcU5wv$?dJhQh zEO}=7=_I&b#H}5C;(NVYLw{)xa43#T4-qq|0WO$QHig#57NH4Kzz-D3o~jMGWU{c9 znhFzaF-8X|7_e7j=yagO%wrdmFns!SFPOAn^zlVzvuH=_(VZJzo-?zq@XZVr zQD^dwB16eN6Be^~GHkj{gvSER!QKFwA|)_omMH!0ec%1HKAeEn z-MDMt>L2-`#YG>DOS0YfJe@BPNWB@}O(!N-1&w_kIFSOgi=j`1`_^1=#lg1M5{qIQ z=t-Jyr)143HG7&%3(>m;lGJ**o~i9j*K4TI9Gjq=D%$ag*kW2AefAsm1t;4#6fZ_z zaHiTOuhRUu3WQnmW0IwSU05CRJ&Yp!rsmbE-{5<&cxIsscXaT3n)z}2=5c=&>5=|~OhTUHFPm2qLjBv-`Uu9U)Wzl08@{UB`M5;vlB5rX zxa?Q;mCP=c)ZgFP^q3iU4Oj0qX=rl}%b`4XoZuth+af+bXGJifWa+ojO28`FPVxM` z925VqNJ`MBhl+_^1w$w*w@5*tPVT}+k_wtbelwzKT)J6&8GlbhBBKF0y_O6b=M)Gn zyl}v`>zWWoNpPRRZ~PO-X^)oWJt%5&k17K~8tAG~6)e2StRwyJzH1e1d-qogJBq-I zfyPYSVbrIzkOlA$dpVDIbYJbovOONq-{zm?x1RXc!x(Qa-D6g`1;Zr>k-BkZU!lW8m0H+B~btD+XmlllRLi z6I2sDqb_a+_BI{L1H8YtL`|g>JfgL*`LO4l5HPP@{X+fJK{efP85(@L)^aL}fo_wY zZ1}cN)5{QJaZl*C^3yb7$G=_Fsdsw*0xhPJDd{(fnO6)q$3eRBUn5Q8!n%>-`H_K$ zlk&XeSu&{3EBMbbMZ!pm=D^6@GY)YAQtQ`9d#({ZEk-dvt2z?Ar3wStFwCPfgMXK{ z&UCmtw^3wc-(2!?E4lSdam3!TyFc$t z|2(qLuUYu>aYSL1dH6!8%w13CN~lxc(_hDJ0+Kc@qYJO!re>-xpvZ8BMI`GSJIzOjlGWe%6^f{)B zMuM%6o}J#~7@92PR4ZxR#J@DkQ!6;dUeg#fuG3r1#6V#t_+%mAa+?IE(R5|E`4Qr+H_Dz zIx0R}VDOP6M3LA`#9P6EsGoFIT)P`dn z0K^glWQ2CHdP2&awLMlG2@SL8>mpY)5@kzKVnyumU9 ze75b?7^s-}aTZdC*;Y%SkIYUFWGJr*UGD&!tqxV#l{;iE;#VJS|E}#f;BIliV!y1@ zh_PK9SNk|%^(y0D@GM!@j$mfCqDLjR)}Yc88uo&W6Z5g~(X~R~{39&Y_~r(QZK`V= z-<%gV?TVB6LFMDK(B;wbu1Ob66#d6vMVymdX%UiB;)b%<()OK-Og<_P#ThCB&ZK$2 zb}nqvZyQ$kWYu`0!tBP}^Szdct!dT1g6KnGBLk|V$m=F2F*c9wBEb8}?^fC;+rOtl~JBKemLKSj`k zTR8?k!sYux^2yJEiDGktkWED`Pi?Exh9@t!bVz(b{@w=l#f4#rZR=%VngdGejDfj^ z7Xt2t8XMHY$ofIBRsIch`3C~vK2LeHth=|IJllUM87zF9hZQQcJy|v5yFq^o^j7x& z;!)H2L!q|7QWA+axaB%N5Fs&3PrYFL%8*N&Y{Wd2lM;$!4(isvp2{Q@`GK0K@u~mF zQRf2VI#WNC@wzw9Ij`+`(?ty}*BNI6Un@th@qlf$w2pC0bBi6mI1LyMHl0fO^5{>C zdgPfp@DB}(<_-|*(G+#1tYH}4Jn9ZF$%YZCvyg<0XcGNO^BwB@QzUvL0MO zikID6HuWl_DfCP$*=L75OC|V=bn>h6d#(<>FIs0C1nT}gl5KFFs<~G#hhVt(bkHyP z9V?wwga4Xoa^U_asVYxK5^K2z$$@1q5I@6SEo7t1aBhPG?g4+^0{jvDh$d|W;BOrE^U-7qK0kR<0_xhMp~mncVP8{z=Y5r3#{^Pv{vr>UE>gv?rQez0Eg zBDn;3w7-4<6T$K5`B82MUasQRn-sDDbD$-lPkK*TJA(fdP?{~>0I%H3Yt5Iy5pnC_ z%efj9jw`OJI>5fIb*!p{8P|54!n+RFWgnMvy~9K$Mb%zp8Bgdqcj;I_lvNg8e&D}z zyfak9iy;%oZZt0?Jf|dpD*}toxY`(G?W-d|vA)+?5&a6Rs-I|vjVB`V z*cE4RCV7c!!XF&?h8QWOk5#n4^UEahKh1^Cb})psdzv~VUAcKzjb8v=6*`X<{OGTJ zlh*j}6l?9p$ z`kad>wiN=)4Ixx6p>>pzO_)A6Z||j)2`(`sxu^fa&=GqF)++u@%pCO_{=N7H}co-Z!KhZ_2g&eZy;f>-W2%OmoF&-%n$gGRhIrlh}!-=YYo^)8LNc!CB{$L*DAjy{Z_oc zS|4)fzqO`qG7&Ug<)_{}zKf{`?rWJScUS8c-k2UEZ&(b0Dd?o=T?M_l_d=%*8@5%0 zeLD!Rc|F0jBpOAAqlETqBg|y{snW-fpjTOPkEKD^Erg9MOF5F_$6N6TDinu^tZA^e zvJnLJ!F08%3YMuHn3_f5bwA4SIl_-QdXDw0@A!+JM8+TWuOpsFlB1Eb6m3SCZ-I50iGzGv)cI!i^v^ z{uArMP^^QAchEjxm?yqxGNi0(ki=BRgS$)^%K&`-q9cFlL7{l?QP}T!c;p(uj}e8r zCA_L5>s0<)YEV^N)3)U4yyV9SPMr43NK8u0$yAH@CzI^u09}kEeU6^!1K3Mly4~dw zRSe&IzIkBB`+}kpq06btZ$3lRC^8XC*jAgc?)ZBM6EvP)qz1kZViEJfIQx~|2acBH zi#l|uy7vlvwLNdl%~A5zD)U~K0Y#q*kQ|n`5!FT(cVReTyM$X;@F_~@kq=@Uv#R|a ztLRI2_oaVqiL$f^{`Vb$=i)#21Co8`WxYv-Y3EBOBmfqD`JZt&Sq2~>2uZ@zZH&8Bj%5ZHM`vF=2>s;S^#vhtxZ zb0O9(!@G}u59gMf)$RRycVHZGVRbEUKjK8jDJ67o%=b^OebHI=pNxtltRUL?U)tGi z-=qhQNoQ75O4F6LDuF0d11;y(J7d>hFQE!Y@uDorf`|S%gbb5r5!__bxXg{RV=YB4 zMb=dCzz3ipLa$lrC2Tj`P+Jt;`TNSK#giCP{4*FNW|_;)YNpLJ<86R&W{c5)swx3dI>7adqDz}*_B6~69bfri2BX#1~Oc7r_8 zmdJ8vZykOS!P&dqe8ROA!{#R1Rh*;J+DKExXJ~DTVI`)A=7nY;TjSn0!Rg zJ(ObpGlY|f28zH5)&1(my^J(1{>*Zt>IA@KwU-wCKQAh#`|O}i-e0mCSgV31)Osww z4&qAv9{>itY=DV4iKf%mX7hnSDjBJ+Nlm@|=ae@Mze@v>Y4xKs%>6OnQ`bLx9smQp zN1i|dVhqv=7hxu1v7^C{bxR??2<7$L&ix4v)uGbvAlXE0h$CW`jn;FN}DHNx*) z@_V*pF-!gWYAy#QBvd~7qlE-#G%%2GuUF3auXe!LSunLXwPr1c`iRNRyk8AAL z+@Lh9%wS_$DL6KsPW9q@424YZkCsgyI+;I9YDxUv>JodZc;3aqPa%A&)IPmqEKT8P zz|J<4#Oi#yi_-)eRV;+_np-DJSY)fef_Wn>MMKcz>+w(HfV&^bZIDvBzE*7N@n`80 zp6YScXeL81QDeb#calC_jhdwhBh2oZvlU%WA$&=W%;+BA(2#@nF~)Yu8AJx<&`5wr)Ompt>LM#yvRAw74~Fw2$MIm8LVk zUG1R()9J-!MaTS|`!1ss+P~7SWCrm%;$DQirZda`5DRGaF$s}a=4&>I^NpXK$VuO` zwU|0BiL|o5)TWp{e*0d!T~H@M&K1#gK1ZJR$nnzCEzuw9CPk=1uiZ9T-Q1)F@C15 zHJ7hGBYwHbY;5WABP=R)?Wl{9c#;GU4*U%>`jT*XHc@-}{x!t%fT{5G(eJq+Ii0#k zZw=`?ab!{BnKe0=ua%E?chub$4}#lLFXQuzW+88adE4nwh$-MsOnp#RmUmJGO**ms z*gp(Z*Mz0!yLTGGSBDD#;D=x^u+bjSLX~y8tHm(snWEej^G0ffG(KzHV1r>ck< z0sTJby&V6(3=@qwnX~oNHTEa=H+0>f!Jc{Gm} zCd#?_u#RMG=Uu%3n$Gb%NpYw4UTaQB_>1Jnwg!sVB%O{kUP>C*?g>c5@=^|@W4#R# z1STv)(^!J~Ai!<>wZQE#STkBRPw`YTGT4>h5vLg|1brU*JGyTOD0>v9gM_J{1nC_~ zNUh?u%-9vrS7CMMloVn`Lm2v=gS|#tbk*|$o{jSEQZ0j^ogO2F2`6?HPRjEGsAcN>;k4`+871E9l~jOq-((H@}ZF zX%0zee@t7s?piu8^4aUFc8zKI*k)2_R@sRW>YSfPY1y71LoL}IE2q8peIIQL?O?O@ z33%AB!s-~+FyGEUzg~1{uSf0W)P|8C;M>%1Ki{;t_>%qmRHXZgv0wksoF66Zr+oS^ zqFOQLsOb^ZpB``!)^4%7$zG)R#ay<%O{AHz`R9q%9FH8s0P4!koDhA)!~B zriYPCl$iRv^X}(De6ew(F!!5Hfpq&2i3%3Qa2V&s$+kVHlO6ZLbSwV7r0E%wtj>5U zN%Tdj;MTQ0>;$_~_ZXFqOBq;-6#0}c>eDA={)P94?vftijzvaY*Fk}O>6l*4krVFB zc+K+{G9)O(>P*dNiVs@C@t7|b)o-fT;sLq*_QK{1Z#sjYgaJ_#B^lN4+BJ~Y=WhJ8p!#2t^nfVT!Di#u(+&`9y1q1yEte3n|yVJ#a z&l`URY!1PH2k2Dbr26VUk+3nyUrvOa%VhZOguU`pd2+@xGy1VpBRCThCV!_Wgs9y{ zqnu2an#VYqAUlgPJ>#0QAI}IX-~?y2yz)*z;j>bpGk9dSLvzzFOr_w3M-N|*+mY90 z!xWmM;sw;&*$*o9F3$`}s>Y?o?Do`XRmFbX+3eb>rN<1+!}bm9**(&?Eghw9r6cg; zV!CL{*{6)(zLL?p*jB-lTRh&|n`@1)o}(W$+!pom#aznzuIAaSDCgs(gGEUv>}{X@ zmLHwwN(`u-s~#BK__o^kej7jP?rtyo%_56<940RIYo)^(Z^zq2>lfX2gSY|<5lagv zPb?t)$6`giRi7u~kfI=btY3$dHl6O8P3V_9dwDyo?&MF!sGm)SUNHTuWr*<8~tX?m}hGbJ)@ug%}M>%+s*)?zr#4(KNO#G*Fp+Kz=R zxZWZU_D(RWx*A&aAIpu+wC!(GiJPB(yWjm+6zAnM$A|(C+&S>3I0D-PBZ_Fe?@B zO#1}dr8a8Eb(Pu<@Q!K+N8pxH?HP?WNg4<$C7nguM!b_42%rcW%d> z{&dVO&gQsh1-Yc486R#o9*OS3PC7N667Ji~@LnhsO6ioGUf$z<$l%v6j*v}(Sq+s) z@fdCI!EWt%@gy|+Q3KVF6lNW49;LNkkH6wXD(=~>aADGO#2>Vu#g})4Mn$bo5fNRl zm$$bY6S{q=mnZd62gz#Djf+{o^860E4=+BraNCdPFHaug>(( zAg&c9_{sbC_pRMXTq-tjx$4f|Ff=Mzijs5ZW?<#}Tv(TkFe4G||no0my4&_{IWAJT1rS zN?^#X9lG2!_AW_Nob4eT(r(KcrH`|~eTljU*0Eq%-t8QMlFm!M zUthUAd)!~+TUPJ9rT^x&ch1CLTE9lqW`;L#s(B%pc!a^C;LX~6pTJAbw3S5z#!A_* z&z{O7I;dO!im`}Od2gkxE{esPUZ;B8Efv#0j0*Oea(94HLPVHsJ09~2frI?Qb4-;0 zi^KHzrlp_NowV-V{HB+!%Fw z*3r~#xvl>ZL+G{sSDk2brBp?pLH@1j6wW*nwud?$e zFGBS78=J0oJ4k6ftMKM}gCUqBp%MFja?x}#q{6&24k>r_Fj2n!Pis3;-}ADiT5^#2 zP-^BSnHJeXF+Tf08FI{QMfD}>!C!V9QD=D}X!(!QbKvW6mXfFWIqx^9!vKUUO#pt`>ogQFo~3Y*eBh0LUmbW49u6_kOJu0x(f4}$ z113?+0ELVC455C)uP&crz2+|@x}P*!(-I&ToLzaR5^IPv)w@fX9<>`_cy{R&CxCA_ zRJrl?9W0fDm=f?Z7D$7n!vv=*D3?9&Jm!4F6ALq#F$)M$(&YN_`PTtHLlydRX}Ao? z!j&TcJOjB9I@||Jh97~e?5tf`L?j5+4VjSB7yAJBhsqJU3<0vIbGPzf5PEyO1}<&) zD>`}7%L#xD@{z4aLG*Df}s319LU?1=&FuFoogGz9|nI5OjR? z>c*!A&fwn@+S%9`F_NsQ^PIi7uT6kidu}2Q!6vFh=L7zImS>bsb) z>8hR=Zp*ud`D%XjK8apEGZ_EA-LW!YadKB%w$79y#nwRgLSwFXTj5iWi>*}ej`6l! z@3SoBmvZ%!qDXRuIK-=WK>-Wvv!(kWHk3pnipEUWyWW+;7$|3|bTJ3pu!=1S>2RLXN3x`>cV zv-d?5Qivec6tWXsb9tVx=E_@q&86%7;I52grgjRW6mopQ`X0w&HQ_9djtyKT&c5A0 zJN>BF|Jq^!uRfAO9H7o%nFBZnxnZGW_Nh{%gFtn!4IWQJ_c#P! zG)3)R<}E7Ub3UB0@;xc3aOQFu=Cbzq-N>pY2mM9nzU?p-PcusfEf%q-pS0S zteARlat$#KCz@bQgAjU{I20kd*G(TaH&mrk7Bm*%@$S(gjBQQwX!3DEuGA^dAKiBK zpIM6Ta|;1D-^9s<}t0@S%QQ_QNN;B$9cXtSmv4Q%0^~{nL3Z(14xY?A03Vk9E(?dFNMJ( zO#x%upx7MtDRVtT!sw!q`VrWQm76WBjJD0~E^5Drc7*w!z84T~6soy$(YZ`^pTY&i zjo}hC{*nt?;x5BhTxRlGo`&u0HUdVq*T>BL2NL-CJ-!{)OuM=AUd3@qbgEgVQ1w1#!|`^OK9$IBiM!4Vp% z$10>gvdj7EWd7v1F*@(+cGf+#6(cJ7n%U8}O1C~YT`W6Pl=Qv*YWR_#17MC5^|D_{ zuPkD(CF&86<=IC<(PpSNH7*>=ii!`plx3og`rw{?OGS=L-+_g<40py1J~o(bF2do2 zuU9O}COui@qMeGjF0;A|zFc?Kn)n-zU4T{}_m!;7@c82+3elB*GR#{IF~eT4a2A+& z?k!T^w^nlDl+vGygtY5@!RPmc6@JSBDbm3O#D`2SMpIMNoP60kdP+k+Am3(eguDO+ zL(B)b^c4TB(JWV=(nEyBqZf`*uu1#P(JnEO(9NDDaF;%>vs6c3oWq||Q{=wb7N_Av z@crOtu@48)TM*BgUXa5=`dN;p%{I~s?pnu!eM4`xz1}Vz^QYLr>5*_9dZ$nI4=8j*mt>m(LVEpHi2 zcL)6_(As*u(a^M^z6y~es^;0n0Ufy~55=}1NJ2efq+fDm3`|6FN0qI^%=NPQ803Ov zTK-k&1M@KP+wDj&mrPJS;pzWk`#fJ(xKsr+My1aeVr<3*TiIOMSt!KqI2|3t?yzaH zWHx>^eXecz(0SR8vgg+4=}>U-T&RktFs#7LMawl@;Zd-f=21AUtxHNw#E$cz0`~G2 zKUMt_(wUshb~^LS>o2hesb!arQpH9p1KyZ*+8jUb(($A`l+DDwwaoo$R-3r1vCPO1 z_K#;vthM0TH6%SS>bfE|5>_?F(C?8kzmlW*#d$1-CShZ7r$fI!_AUPGI$x)15(%4@ zqZ&|{spWUi=0wnK8``n%NDpUBOrEYG)slzDr?7AH#pkw$ z0>#PIS*jRlUt=0_A8Y7afewkcr9ukFcknhQL+rQ6n(gZ;tYY=cx&CDR?B}`hrz>e>7ppSgYmx z=|@OwL7mxJ4^rkr#bG6iv2U&X7{D9zBBZXA#%S1_ zM#&=0rH#oLdhY-Yt!5mWBK1f>gsVQ&>X4^=;8*~i#%Oz>A)9W>F>?t69Rv=0a4!;P z4U5EqvrlUnm@!7E7i(=6doUzufb?lItNV(#7y&#Wdo(Vu-=_bxpH0BUm)4#}^!iTS z-!A5>w#ca}?1egQV?@a7=kHTLM!|ir0YXIwi$s$pl$C4SxCCs6zrA=L&3oqMNB!6m zQ{^8|0~U@|BUBM=A_U2rbjyZl6XE6P+=%GRV#kY1SrXl0AVs=OU_816wT&ok!F%paZ z9XNErY$0%_OF6JXsWe&IHz~O!)jAlU@u2yY0Z-1Mx;!J^vN+#g$rpPEsF{T=_tkuQ zN}ee8*nJ9{aIzHfthBlg2~{4iryD&2-)Pr(d27|&Fx+FD~mS`2Xl>^w|0u3TY0ytIsTXCj9j> zxw|V0KQqat>K_@bdU7bE6@yJeS4_9ZvQeZc`uu8GzA)yJ&qr%p`xs|DQYFdwo-6tv zm3a@nE)cgIAhNn^hN*;@S)kk{?v-lCupe#yIRLyQI6}%rYQHVygD8%`o({kxV#A0B7RRAt)p=GLZy#88jrct z8ySw4L6k(lKJyokY1jB+aQ=%yR;c3y=fu+1uaM!Om1jBZXVRXn6y@U&mctfEW1~sh zGnSHTUz5#w>~6iP-bEqO!q!49Q7ozB-OaEJ5U|mUN3rBt(?<2|)x-QsMLY|X~T%mo{D$?EMB5?0|2#~ zk#~i(GuG+l{MqIB8rV1!KDM~Ee0)Ib7W36Ct(%XERtJ85ds?*in?XRLZz=$iUvZqG z)mip(h_U~R<9M+#-!MN{Gt6O% z^KV>lL+D4Kd!RjqaKcN*b7PlYCw~)-VJ1YN4aI4BV8l=Cim$01QXLekJ|{y?y<~Y_ z?$G|?HI2TN2ZR0x#%gTjVtEvp6GMoT#r&eY{i7|h;iQq=Q{uNBgQYDPWjqikE8BLK zUHe`z^aa_lR|tPOU3b;(-kmKYnH)lIzA~TN4LlPrB5pJ1*S+Yq38B_&ZwIoM;?nN;^dyXbQ0v4>Sa^ID_s8Sa`#&DuZ(40f>*F4DwD1*u>*eN}y(M;ZpH-=N zL_1RT2V;^F4+M?Knlf5*v_P*?R?P`tBJ{`Jslq*@M;u(-FbqE*Rc8XAME%p*u0P{O z7;SW`r(s^L{6}SwO>co@@5M$@(|Xb2v-~cNRSH!G&d7InWCiT)d7WvGe7d|Fs*5?P z#QFPHkEIxXETXT{ltWChYK%i3Rjrv#Fo1EfVG>;%C-HZ20{_sne>JYFcz07Xo!X9+ zi*%A*Gm|by$CP(IdkZ@P18YeS)P#w1VSd3P*sHE=X>4 z3oKclK!`c>S#9WndZ#_d^Vz2A_&-WCB!NXdnQDkoYYs251_~(3uB!FA%x->^(St{D zuXH;+g8^0|RVxJ(mM;JX18@EWfsqtP7^z|x0V2Q;iadKrn(Pw#KKTKUjsbZQ4k-@n zSkeD(^g2z|p&!?WZ^SnIUeE0D2(7U1NR|6gaf`rlYjvaLwLaURZHP(d((0JGJwLZv z^PcRRyvWy8SBE^CIK8f<9_#tdKYWlpHTrif!EZ=CXFO_YZv5^3AEOcp(?|nZAZNDc zdycLN)#cWwn|h$;-nGWzCbuBY?Rv<9WXNdn-!~%lrC_`^5{$LJBTvHFB8^)LMPcUWHp1{vZWUrL3&72RqG*l5$nv0cQhq>59QBS zd$(cyfBZ<9r!VumnMpRJZ{L@wAYQO;g6>_sE><}pp2()@`E3&nWHX>bdREVZyF6@* zD_(PIl&Tmv$p`!YM~@dhVnyTU93w25tt^}FPL|;@MhlhPa*9Ar%aD_$zLsCi9H_c_ z6GTI>4ib6ucT%`Cpu6jj3kH36M(s0zt%BW@=_RxCb>iDPV$?#P zg46T39j^*uTSdwH-vu?c?FG~@Fyp(0V!Yo_bQNU>Y?qE^juv8NynjFKs_(ird1RjM z+?)t^E~64$!nca~;10G{@~m~Wlp#$X#gGFV_{*`Eg~s7RPJ>68o5s{XOvF>g<=&wT z`))mruM%;wtR*&Ps(V&vsy(9_-^Ueh*LMGw^ezM`^GHU*ueu#}biDGf$i?n_JsZ_R z|9z^LA9xO;6)L4h?Y9+%-k(0!SEcsIHz1oo?tN?P?U1ehkb?p;^kk}$?WUbyJ3c!Q zD>zDbK7X|}E~#}bpFqfO>(dIK5JxoeSz z;-<2Z?MOD#Y7Dj~PDrIE%`@5nWUJVS*0`dcTPp z{qALuJ1k4644SR}9{_QEZV;)Bm>^L1L5gZ3_&t!n1un|1Lav>33k63px1PfGXsm92 ze1xr^`qnTA9wDa#O7XBo6XgU`1vymVV1g}c*65oT#|ge8)yDI$p9+SfpWskPW8Y4G z_n{vyv1X>q-M=hKvo-BN85@pQo42%AQ_v{>+n~3xQex9DAKbX@@wfZcvsXnj#p5W?0~m zv#P-EFEa5zjUkb+^rfAV?Mct=w;+$(vO%2O+@LQ!IOes{w=NyWwY|-*nY0Xb>Qw8xN#EOqbGJv?>BO!8(7um!s- zz!7yNI)q%DH*bD6Te?uI_cA7Mu~Yq*a*YpGXYE_{980dpx2HB1A)N;5&Zd0GtMqo( zO~-ew#hOQFW}29~D@O2Zp9W-MzPC9<$kRF24AKc{QF9q`qRWFjRYKNa1F}KTM!9jM zK%8V&FG@QF$lQ3p`AE0zz__&+U?QBrocjIo0c$5TNq#UuXP1sMftsbx^*>}{U9f}= zO#%tpV%G^?ddv~kcX~sA!_0|*>qLzwqQjkNQ ziTo59-P#IXni(2cp8h7+op0pY|H4L9_4*QCH8=Qv=25q>(p{%i8d5^VZ_DVgc1S8ywM)#Y{0LZ-bAEfYA$^c zc*lGhs~|a}9=76czmc)=iZl3o@b+R(G_%;FosEzkcmvYYrr2DJ+XCAHaExXaO(qz! zHroTh1n9@{A~PoOzCLuSRi5Gv}Fm;gC7d;BJG!rP<$d#F8r>K74B1sElTi@*uja zVPQJTO@$b4u$!20V<+U1@92rmJ-hce7{XPtu$ip_k>c=SLV@YFVmh@h(IEvof%XDe z2)>S2#5`N6=w)@c%kt#ntZqy1g7ZYOXc(NO&-DRDhS^xk$ejLv$lCWk`}Qznbc`^_ zqZn`)UP?D0}s(Y${$5K}+iuDG_+2ma{9L&I;(QLL_0%CNRh53i|xffuFnIKrzywUBW6wJ zRkzg8!F39Mvs&48D9*u$N)}I5w%?2!zj|fBOG8Lx>h@UGZuuc@F4)#E=8(sR^ zTHREVaKY)jLU^aoSz5#ay8EO-& z^C`aB8aIazHY|PRtbGAY;JgV7c4e!OXa@0dj9}-+OlcK+mw-j-GPr-WeE2S6E4M*q z@l4;Pc4a2-0v-roIN^L1_eOsdl^&hC%CS)VXtN+zxPnx_DPdnaT(@@1 zpH}j8rjV$saU3>VL_LVACsCoKG>BA;my@jcmmT62Q<|f5OXI)m7e+-ita!l<3=}-5 zd|w@31tWJiiFI$ik3u3`J12OWEI{3hkRxBe@+B3TAix4aSnl<4`9JFSPb6pF^fEvq zuMOx(8G=p+?}%|0&>yQ=xQ1X}{!?NF)Mx)Y{$kM}?ybE3xA*A99jaZy;R^UPm$`sYH zU*J5?p?=Tnhg4tk)Lee(`tf{C;K!pifs03LAQ}E;!a;S0@xce7jJ&p9I^V$?VSnQD zpssAq`AWN+gEPFg^{$ugcVQ2ROZ;els`B{*owtYQu;I>s17(s13&vv}RJ1SO`ti6R zYB;=I!iBrzFivyLgXEN3BuZ`APVhN^p?h^*%CnVsLs*EzS3)L+j1?KWX;CYUY2X%@S3Uf4SsaF*!+bCfxP&x%2zc zy^ET&#m@$xb)EPZLK{iMEN}_3<7gq*7d(854 z*|B#VN6II!fCWW<{va-mZOR(m%Z`%5boQ<5up&NS_pF^tSJ@?a2s-7;yX|Zh zQ1B?Xa6I)GocJv3v#_BF``UMcnRK{~sG)m`(r`EZJ^XkB!q8#hBvkzfVkDPtMPa{I z@9y-o(TpgTIOTOWNFUvbv1ewRy5A@YkzMgC#a2r~O}D^{)d9l8&LE)uGUv^L3J5z!63f8IW>{ z$}x*1CS(qQo2Ho~Wq?$?Y(>V(&{4+ovcg$-s@j{ueJ6g0qDe#|mwvJ#mHa}Fo94o) zCCo@GcH1-f{_&o{68BPn^^!*Up9OT6dpWJ<;?{qoL(Jj406jgu+SR89CzK|0cGhzA z##?^{ud1)U_!XpJe(x_wc^G;tT!#beZ1c~*AidWE)T zC1qwlk8H!);jN+JNT~zv>tH|Rxk`6$8TneUiPGt54B9};2nSB*b{qepC*6v@QX;3e zJ=Rlw{3~Qn#h*vXE0Y=%=&FRx}E>r(W)e%{QzUE->qAnifHG1ITy!lkLXIRg^bQL!M1mp z^5}Cn#eN|~$bG%>^aEd*u7tN^R(Eo?zU0)=6_Wekz27>?t1@2{SJr+Phhk4o(qU4{ zd3GuS;;vwmi%=3vosKa=5zLeI{{_l3z!Zhl%g_MnIh?zh?5 zSGj*Y@ze;KV-9jDU_umRa*Cn@#xxJK!sT|I?1zSu)$DzN8G4dCveTc63Lr)2o>u9@ z9#a~hfrw*sAyG+5AdgZAQb_Yt*I#_?w>ZDCZV2)z0|)_v+$qMd(@!B-LOUd6F0c~K zFna-1X#mGZpvlTRM&ih6=i&0`-Lo07ZArM}iWG@#h1e=F#nhjVqc-N7jsUTrXC$O{ zk$}O(UcWk=gfhY~#sZR=giAa4`PclP4K%R*wyH-)%yI(N_37^GQ`uruG_yxiJq$7? zsF^v-u!8e+`vkDCQS_W2a^+!6Ez8@8#g#rJ+}w;W5DkUd13L>w9YwSN2l z;Zgpr41yA~zMC>_dG?p!R@`~h8|pZwm!M3yMCc^q)Mz*i`3YHq6>=WQIPL>fawYci z2O`zjV(KJBzWM;NN2kI*{PIx`m#Tk=j+ysu@Mr*^Gx`Az<$>R2zZ-;OnBrD%Z62&~ zn7oY!e3K8sNMkS&(yw%)O(XPi7cc^?cq-i(m6@vcac_haDCvZQU&{eH!%Vd@?w$(y!yAH>`FzWS$;P|?uqbzJ$c@`~ zxveCUaGM)+Yp+O?4ij)L2@%0~;R+Fv;kAXn7=dW-1edy;$_UZ3QC)HfhjChwuP%@2 zE9!ztnrx>@9XXDHXACNAKBmePLszY{3F;pD%oQ!g@h6c(-+9y}93ShnjYP87BGTe7d>NMmYo`vV} zLde|3$LJo)^d6BLZ7=@zEJ_Ee17~bng)QQ#?0w91@CivcraU5%Nsk}8-Vf<2VrO6p zu2mGam06(Xj^2kg>E)?fIVOVg&~P(`9QORju!24t=5_Q%X=g_Q6|}AJo6&FuYa3XF z3{qZ6G$w9M2&Bdycp}L`CUUk9hSWXVV;X*c}{4s4OBwqS!y_`_nzL1m%Fs z7F_ND@Yxc2L$uZVb02#C6iCs~Zf(U;ol1;ONRCdv)7ri^lIg4~MN?s2(^gf|6y+ub zrfc53&Ue5Fs@nD;PHu)pXCdD6me_b9#_%K?7vp}rFQ0km-JHn>a^JYhM&A~FLR$7} zI&-w*=SLGQJ4^upAkO=flyS-v#`}4@hz>#uG!JtjH@w&V9jIKhdmVN3btzF9))8HE z4lbmLvhx?76!6n0k0m-zTWL*YY~9$|7|!|9W%&I*4dH})7B8q8Rd~1^)t<}3B@yv! zc@vi+XII~=`KOs{-c@VE>T}3S+HkxXQt8ZZ|7umC6Xqv&?_l7vM3BAf_k_OS7^>%L<_L`q5 zN*q|NA1Qe1c4Mc}kiRA0ger2EFM*@~Wg%nxl~fn?=Om)c*}Dt1JZ4X^$gYXMUu-{M zsfFh&nE8-TVWroju!-l!inoUgU(nY*vApukkjb2?U}TwehK+y)#J~*)xq0Zm8PsAB01Ba1fz?D`13{8$B zQsF?KSEfBGT6jn%wod4Cfn~0sadTpE01XEdGkiX$2>+d*nvYV{fFtYsbSfSC9za`l zX(@fTN89sU&LYXU+sTIN$tS z*$<~Hy?92h;^6D=R(vxqZD$M-JsB28)a(22dYJ#b?O~%Ny0Gf?9x zf;sK1>xI5KO*P17j5?o2z|!0bvUnId1`uELoSf?&Xo&-rZf4UIaW1>Tzo%F3Zs|NA zksODGgO+GsAAE9t0(f715h7T063`XLINHz21z8%1gzQf`;R~_kXGPXpPlkC-2#;+) zdam7j_Z?aO^7FNr;hzhWd}?|TG-K5vZj`Q>$1`@L3M9E@%YWsIYxMH791t%V9!tF; z(xJ0Smp+F{Duz(`L4GYrm6vwWeARwog{dF5h&f6{p8X zR=>J`iaKkFdTQM$o7j#q89Y`qZUlyK5KD|Itb*4g1{~aB^!YD9fr7txOw^v+3Q87e zH|6!C4<@|~seD0l2d`0DQQQLK-FB;k!t~gp!mZkrf3QRkhQKBY20;!m=BQuq{{2mu zKIQkNQ;8X|G~=wiUypLzl2iPx92? zhwroHTH~oLk&P|KV~7@zG>VWW0FNNs;1>jl?55A_Ms_DsPo>h~2RKA%0)|RI7Zaet zTw4>21^u?f*ZL}Rm}uZ3fguwpQ7SnR2Tu#}q7KT62Ku8GDp8%%N|J~X2eipNBjXVH zug$lpp~XM2;#1Op*A@fH&MP?b=j?Mk-v46kju@%_ZFzThM#F_(pow)EFOfNwot{9Pnlb{Pms~B zoD2pgBHO>C_4FdPE@qi$)C#BPgs6Icv%PmDok%)!qO9wE_`Tc(YvU6bRQ$7peeu1z zm6+#4+N}q$qrXMWLtS zNIZ4^h8AQjf(?!6wm_A(H!JM4IdMP)jF1N*Pwftfp+|jotYpY|+qs<- zDe9Mx)7eLR70i-BslN6sIv-{XASX$fuYqgltO%8X=UQYh^t3c*@OB>a(cTM_Sd|9o zU3!vXN>~7(74Tc6&Z)R&?{?_|M$wDLzB8ljC8<()rV`h_XlzeifN=2Nkuy5UbE4_k zifCIM<-OCeReblt6x|~j&Uoq`j1A%x9@D%J)*msv6Qa5-Ru3chPPC~ut$lbcaChdd zpr@==0n_ST?Cd3K5zhdoJ=%NEmzGSw^qfuOoSn@nHXlhYyIHBOy5YyY)5{+b$G|_; zh?;Utl3A!(YJ$tfS)6?@mb+g)UU((8Vzhb-<+GiE=d}x3ZeV|Kvdbpsz<*nZvK><~;BU0Eu~I zsD?9g5*7+UdT~~25@AT~$tp7EUoDE3oFC zqrS33o1nl);J;Iqs8?}c_}tu)oHbvWJ0N}|PoLeedny%^Z&K9^Pk~0+tC?YbhshSKDPcSj`zodoJ@4DU0f$m>Bx6n5*8W%b z(jwAr)$se#`VESQJs1`~-QA z^ULllB1yZocGkM~U?*`)?VB1lW6U`)cW!JB3~yJL;V^GMbL6fG9h!==J*lMSX_R#2 zTBmrzU6N$|7fr|%&m9r#=q5TwRNl}P+FD3!+Mi^NcV;Y>y{I!56~!&qkyMuH$~?4n zEXO-Ly;U>vf!I5Nfyr%d7X5UB7_+Exm{)xUZTU{&p?bD^rskB&dK(?ovZp=dy5(0C z;!p>`qr8I(g1R(2jSqH@aHeW>I+OkrpBreYu%;pFh_MWVGJlg*hK^q zJ=|WZyi`&2cJ|gJU7^N3+~1XaEe70EB;2=BUU$^$shIBLDh_hv=xv++`o2TR8QH&k zj;GBtMi%U(46vq2<|t_^dSxDloKd9g;s(=GakBHc76dBeeU4$1CRgz&7k}8zgX@3p zi%;&&g~#vADzUnB>dHxTeaE^OLR)hgLHT<0>fm&>=P<>IOcnHOJOM5BV2 zfcChVE`2Humd;W&LA6ZDzeQ=viKc2BI|BWA{mRgw5_ClRcq+Es7DM7;QZtt!@qEY; zT!4rgVi2HF5SL4wzhdv`(962@ay8PqNF=;133c#j~1C(=|%x#a6xJ5P!G1PVY=ZMG3lFs%2qD4fP*OG!>_E~qY}sO1Pk>#=Qd3WZs0MdjOdKK{6pOL4d; zW`Vx)*1}GG1B;hlA#=@nubIhtq?0;_y#6q8amnAGmY4QI7D1C+a74&47ra4 z7Z*N;9gvebUENc>T*-r{)_t5c18*awQ>CTkWA>In;|Y+X$|`;YFxMIuHvR|bT27tR zMztOOJNE7)>FFITt?V~OF$Fh!nvF^l(mU+?xBIrQIu{|?mMtSGH_lxq)bDBieMPI; z(x^9z@L`$PtQ4sIK9&2eH5Q$nr5ClI!!P9P;Y#ULd20m1v^NjCFdfkkGYKHf&i@SE z;2rokP%wgx7Lh=wQ0PGf^tvM}e=IOoWjZ4clD@YnoWO!UU6AN~SP?=9SSW?wrp`v9 ztpjy*s58{@+VAh0yBU)}ZKAAYB1@(cGb~YV($1miuhjwW|D;oiM;ors8pv`-=&F=OFiy~X-gx3dy!egFk*V4|CMVXMSyB-dpQjHkS7Uq57RCWB zL5;nB#Z4C>&ho^M8~O9IZ*ZcXUNi>_wvFBB5KGHGt%s-4L;G z773;#j09%`uB#jrDFr~ToXHq7R6bSe5Foo>D24tqWEeigX?QvZ^TZN0L86k!0`EZ| zM?D7bM^dV80FX^=m{2JUMuJk}OlCIZI?u~Udp@(J$Bi6n2l3z3r9f+U%$&mu~)Gan#|CY2~Z;3;JP}1CD&}#fBGE)jXVoj0se4>b_Sx{l+EYa-`ce z2~FF}rEET5xlGR}HESrJL?Kl^_8$J*DpjBKw!`~{nWCd0i3b~>jZnoM1sX6O_4*gm zFD}`j*Hq(LaQ-3t{R8eqBJ)(-Fy24u;;60IooUL+FYl{s|BtRWkB52<|A$-18fNTS zV$2}>R z@jQQ=b6%BmPMQ0<@9TPRm(BA|jv3x77(D-E)!LPM4Nj=67 z1bsT1jL`Xi!KR@tSaGAB5?5pk68_#H_=zEw?5uwjfS5V}JyF?yb`%9SgUCZFn<6k-3L7iu#p1Z;l3t&Mm#Fk1th<( z{^RH4QOe(PTDL?0jSt!zTm5tpZMYU36;0Ni=%`*5%@=_B^#YulXBIa!Op-JQlRIE8T#N|xxYHo?JqrR(%T?~* zJ{WXOfQb~*m@b_J#CvgtgVBUzbilKIg9}F+Xt-=xby>*Z4?`#-Uf?1V6G)QM37|jI zB9-#frsgX+Yt@Eu;DP};6X0w&~bU9AszD@w)ps^L$ZKFl{Jl{gJW=Ns|5~C^2jlfj)5Vem^}IdaMALr{aUnkXuF-HiFKT}a&5Rx7=A@$k z)Yr03OKjj}5{(c-{p^_mD*lwP{FkHAQY#)s7X-2zJ*^xvy57)H)D)lZK}8zH~G z{CM`q&D>D+l%)r=6(uQM5)SW>4B#mRE2Gn-LDT_~v};f)BgGne(uACt2I--BsCzQ= z(U0-zrwFgppd8;57BsQ^!Ns@G3%Yo~M4Yhw;>%3ixCabn=3airX!zme`k`zn(CP^f zP2+w0{#$!*ys@=2b{DtBhC9qk@uW& z(%AOiqyA%dz{lfA5IV&v7BZw14C@!bJC`q@zD4M{uoWR!l<^o zB_AmVycGaB6q_lDmgGcbidn2`F5jbhz}*LTJnjA6KsBoe`quR5#D|vHc7G9WAqTaG2voG^?@a7tz62sYYzo6kL{@=G8URM6k=`dS z{&%-O1YnRMCuot}RB+4nvI)QkoGgx*Fp>em0auu;PXV-*43Og31w5d#dpe3@L=Xob z-s*9|Ud4kkfa9GJ3U>emb(}OfRu7K5!c3a2lGfAn9XWZTStY?-%jbD_LY7u<^%Fv^ z=3SDf@&7_eZ3ODPvPeQ4tJlmnNHtOqT0efd$nw~j4wCpjmjKz-dE0e+x`*k7eK@!@ z#A|{uQ2imCvsjBHn|$%mUb#mq_c0C3b;eD4B%rE|B1%uxq!BCY0Js!`3ZV0fq!}xL`)o_}*Hr`kY8AgAhrA@;3z?8!sq(oz zK}S|y1TijCCI6HMx*<;#JlCQfcI6I@E+am;#4+$b$FlI=pSzYI=BLNC1SdX-7}B<3 z>F+<6r~bIg$kO)1K8GE?8<;21@K9^hkmE>7c@{F-&4h;@_$AjihLJUok<6RnCSV{S zT$KqR=>)f~KT`DcaHnh_9uh=L^_LbIGohb-Pz+5vuAg+^e|e32T7Nb2&VmP0E> zqR42%hj+Fd^CK;4Vgxu`4SLh2ufjvq1Z43D$y#$k&%}737>1k+Jf%jcXo~WyEt2QR zDzIw1HEU`x%iU45YcTyD7U)=9K$7TNyg1V9b@sZHl4xq_m{iN80KC!sGD# z<@)}b(?RXuD@vjl_{@^#h|}P%7i4HvU0E@(TqjbS0`Xi$&(qIlG-+Nch}d3bnr3t3 zJn(Q@qxe=LU79oH{hwRy|K)e%*Gr-shA!ZQ5roe?WHWIjZ2Z+{8$?FSa#jT$!J2Go zYAw9;umiqh{z`I(qpdFeDh1V$4H6JkRo;GX8F6@~_Mw9neaBRk7lwnhzPJ?;F5_o_ z%&3EagoA)(0GamZ=W!lE^Kjpx?kAS;+|3rRiv#`6lT2tXJB3A$kv4Z`#-rTnychv< z`JB$HAU82c<~c@&=(&3`3$l9_8vBo&ruWjg{7%|-1w`6qiI-;^$iT!c5CmqBGd}lV zV7_k{G!rT}HwlM^84qS|3P1V&H}tC=IPf%GOYCXEP)?H3i}hyvb0A7ZB(WiQ@n=CY zmh6Rx&Bvo!gpS&`w0D;$g0xo}s)|epi3l_{3q+#;CINKRf>HoW6$EBrJAf+bDb~XE z6|?&;mwJf;RmH3T47%2|)DXV(XvWGEhle;i{<_K*IC>JIU=KV$%Pc) z@9!Yb=EnpBYy6u%cI|K4t33=yLuuJe>JLbzB#J1D3FEXV!2JhMWg^V$NQ z(^GwET4<7<1T8Gb7;nCNP<%vpTI9BILvnho;UN|@wV@!tw%v%-7vzgya#oGe# zkz`6Xz^hQC(rr)jwjyv*qY}WTZ~_?w`NA=eNTn*E$1kS-JNxMd%7FM=8+KxkHUgCw zD>hz5F9t^!({6rRG6U%n5a_=9*0}Hcb87zz7q#!y(MvztThQPa+Z7I~bX4Agy-%mb zdu>*q@p*;XzI+)TN6Y}yi{7@+4Q%|A6vP{QVQ@sp8v;^4j~C7U3|x3M!}BEc5vQ1o z&uGo5KEs-9;oC_}S0Iu{vvxbfRtTOfz?F4;%h3ceRPQ_9V6hec_YFfE$9$NcZsoQ4 zFZCP!!{C{-m~W#0c{`O$R8(ar;i0o+u#{>h%e9s*caW_qHG=FE-xy+%Z{oPa;qcbz zZnB7*Q!NrPvI>01dPT84ybw2`_p7TqJ+!+DN9TmqA<+P`nls=Zqz}ML?s%FO6@$10!{w& z)LQfC)2-L@ulDKH$w*~EOpi#O!RSM>?8RiyEv18NdVr{=D1k)r4<+UW zw`!=g;1Vk~rr2=l$AvATk4^yQ0Yp%$72i`VQWW`b{iH33`*o2tAQfEnH}X`DP}fk_ z5{r?Md1WPC)4sV{qMZd#B)6_)VP%c~Ly(YHRsC-t3@@ZSu9q*cBh5zpG=f-55T=f+ z@!LCAAM~_fB13{G*E*^DzZ3?+_5GYX&{rQZS+!0ifEbhL9vX@?>z~a?jz%)a4o@bD z*n>=T90$-3Qy1oQEz!ufXye;fT$<3~4sgD4O9zPf5I**kikD=a`kadCLD%Y#uE&-a zv3(+V=*o3t&p&pailQ|e$AKszO@!mj05|ETT?=a_fT=z$>jw4Hqq$?*bH4r;D;h_9n)lsR%UW{C^|`Fao5wp% z2B1a`ze2gKrjoLT1LLu7ga;{GBi%g{Gz-_;X9 zEhlyF4g6!g=|JB|{xZIvTLt!qD4$cc3%}Z$P?;Tn%1Xoi?%6WHdut{=oxAHiSb766 zARjz*zp(BxUO z(!_2r-hX|4gB3P`W+C6eYKs(qAe>`D#Q$#iX?5*kY?Sb(#5^5r#)4yZ-9@%nTeC;f_nFbYiM8i z>a#ugv#r|6r(pk>%wp zd}{3f)g(|u0^S2ysXGMOuv}u%p0U@wY*4^}uUV_hl4J`X5B!l#gPjt|=B+yyM0hYK zcRw(IN_&zH-4Y>f!62~o>-dBZi^5N3~A0O1Ada{>R;c;{rncPwNwHGKMm0a zazN5>b&w=^FhOA9i#ZC1NT~C~;Q@_;5s)7*ARzR40J%>y_eC9*CDNu4B5f|e%mJCq zq*6fO<(=6o{kHr$oh(Q>?j>jqyNO6R4b&aoZ1L@SSKm0V`juxLLx%&Pt+HKpol~}z z4*+V_|6432W>~8X%H%N;H@wib({sMk#Fn*H`c=^+QBp+ecc1M|he{yGGChojVpq%lbZ zvAA3<{AbeZVx}KQDP-+P9dzWyZZj^)LD$gtKtAwFE)Dvz8%7jAq3M}6M{N%0fVW69t8$k zQr(4VkpBg$jnrCJi-MU#lX2lH(gd2JpEezc3?O|wc_5n84`5F+=;A`zh<0GUhyTbt zEde?!I}$;)4$R(2>euE*;EyVVxSqe1d+3(-wQm0s$btb-&%m9bxriT{=5U`;L4c^z zR4ecEG{D!&5`{x23w717gAW)HZ{WJ2AMVxyC#n6B^U*wL9*NcGCh5NJM4%unl_Y>M z8H|L{$631f;z}9Z)v%dadJkD>Fe(`fB!PFQZ_7P+PDj00lJCuo_~4?)X#yB{gS#Y2 z7$6~($V5%x+aUrtfE$BrLG~ny8>7-;X4Vq4#o)Q+EiFLh;Yr2@*@It)c{7rYy2;TB z3AAhg{b=n2d!PpdDTU`R!pkJduab|Bjr}@0Ac?>qrXf?wG5W^oj5 zaQcO6$|r~zD2Wwtj2CfmJ@9By?AD}-i)Q6I17aCZMwWy)uy&sdmL&(XD9tS&e%M&h4rxE=ldhqt3|5Q3}xEt2=*>&cz&3r z;LM{O#}mtpe)*CfAld!VU#;bMA0^8X5Zo8@p*A`FGx9AUou0pKU4Yshhfa2oXyKlsc+&LAE)N-z5_9m5tL3Nd$N zW|G)18y)04EkOKn3zn6^}og}`uo0V;*GH;f5KroC*w$6#U2h2liv1BAd0z_<` zRvBa{{>pEHcqn*m%f}T>C$?LwD-`tk#Z&_a7E*ytz=-VuuVq+R2A}kf$VY9N1nh+x zjc+t-iYDX(!0uL1QdYDK*-@m5;APm07*!~fl=_f~9GJxqBZ9#m5EY;=S9wl*2*4ef zb85O2xqQ6G#ELd}7&TvYqrY`n zyhpu_5hLs{fRYjc;-5}HNJp2dfdwj}$aX{*2tRD^Jrm2L2MG2)6tC|_tQC$!_F@yo zsV~u(4yHd2Z2OXgG*!!VI4u>1jJR+P(0HXF3j)ivzdlFhKEsHE&>VS_L(hHkkuIB8 z)I1*3D#8*VNa6rK!{RYC$wv_}ESHAUcF^!yd#+E(#&Fx5EC{DUZ3h~(u*Ty#f6NK^ zbU>rZ#;I(B)9w<9geBjAf%gnfLu!GuRFVwj$4!z1P2^MYfgixr05pN2w{m%qxB?DL z&3xQN@Y}W3?`%8ewe6<(k6$=VqSy;}rp%?$x&T@Bi0%4!AFh2P-gb=m(%`F=5mtmi5b-L~@gTt?pIsxoXr^cQ}9w75_yyk2k#Gi8mK^aF9z z-!;7MwH;A=KDx8=@z>^WBo0+Y>A46vuMe+4#LuY0Vs;sSUw^^)kIbGMf{ z5{OU1C7dLjWlUZ=?mIvSX6~W3YZ`aLN>D^iO$l8SL^&^+$aemS*PYDT{l_B1U(+A7 zHw={VR1s$6f-HW+BX)y&YC8h%uG0r`MgCYO88wtF1xGKCAG=W}=~s@{WGQY263&~c z-~S1o?f~cxp6SuA=Ga zKwM}I@<{Wr<)VkovNxG3%9MDPF6wR+S(0z}FbZtqE`wXd{O#L088Xq=`O$ zAVTW7#{(UfO#+(MB*fJeze9Ki5ec`w58sg)5TzL4CrL7X{jRa8O`HuQ9n+T%zLFMa6C< zJ2mA{|9DnT@f%8&*$h_jWN#0^&w&r~M@qG{ouQg>hSBm>GO^*w1E@^{1qKeeN6|)L zfSW`PgFaQ3m?<+_7n$_sF(!THZ8Y*9MEcMeSa?97Fb-?2@jngs&7&vLbb+Tc)Ds4M zCd1+$c3@0p6u{FTZ7^ZG6H)9tc$t&N6VQBj%mCIXvss`qoDgR^L?5CCbfBLZ942az zu)k{HGHIX4LcWO0J_k*mvEe!_Z<&UHW}0$Jz$QSo4)yoO4_gd*1Msj`t&KB2*~QHn z6f&;JKpX+SsTdHCf#U%mnB7?&pKBd7>kMs;LmK!i8;XAB^>&l#_IAVeU$ykXP)f7* zm4WtKJO=j1>?pTfJ8pM9$$RViTQkQ%-hjZhn+OaY_4ZL4 zV9X%=QzRVg*g?&D3IV+`kHdn1F9^_BU0(+Khn0cQqG5U{*HQ*sywN>6V+@Ydzu$`2 z7N2Y>P+P}y0UT_$Esxf`0K5hSmFP!P3jZEjQ!UTd*TtBE6@v@y(Vm~L4`paR+!Ck} zNkGA38+o9)q4F~{BRZ^zCK^T2+79ry1o3}l0BBH(h|K>?3nrk}pGbrLisbp@{IDC% z|As%Xl_J*2oJd5%8%6;)(rT)S zxDR+X5|p3p!DfEe3%Z=)u@hIx)F5ylJYI+C_)7Z$r2-Z@;h&eBe$j49%#VXpHD6_D7d+@-xftz1|Ie@VEI`V3h6^x>5fNp`(Uzqqk%afQ z)j$G8ynM_q=TCejuDc3o-P8kZIdpE?TsbnAea?ss20dN4q7frbZE>0j3uP)$`-c23 z90{^OyqR=fNymVkZ4gNf{(E^@kg)6xuzQB~meakbS-k$)HlvS46;wUTY#npTY=wgT zKeDg3Tx!w&GS(pI`w2_-r--T(<#v%vaH$%53Q zOJ9+UdhgkeWwwFmA2f|$>u4d!7H2<|+&GI}Eup8*Qkm>&2{4}*mMt;`oZ$LAC>;EV zpb7b}-S=yTUFHq?i}u z$6QYw@qT^T_4SQ!i`7Tjhp9I>oZtRrpG<7pdNy`#L3Mb4x@JS$5QUSTB&r9!@5u`I zX>Z=*C41J>n^jPwMp4ZVZ`DbC*WFF9>Pi}U{p$z6bJ(uFK-lGk-5H(bN;ZsLG15ZF z4d|@fbzh4U65Z5< z&4x|1v#Z_i%NRN?pz2b8bo))ev^e)=k3QRZXD_rSplxwp`&eV}bWUJHp5pQS*(%cy zAkP~(HaP7-=9AEwlHo%tnb2Z{OZe+va*i1sQ&lQ+RWb)kNo`T!R8Yhp9L$CT-hyS+ z2Rn$FHxYVrQ-7MF{ezVre5oR$y=ohibWNe7bhq`*5dF-Cg@NkfRGuMC@S&~@QSrw!vhIq8F zcRESV!w7Ny23Xj)`C`EZ4kdAVcr35y*&`bD*`_bMfO+Vyc-1^v_PmNNi$%is4KXokjTv9Wc#A1t zs9pPuqvyeJR>;?L1l)tz!n-Xfm_P+&kp$;ro=St6Ahd>a9G-i{P)OEG-H#<Nu|Z2Fkmy83Qgf#l8DDI4LS03)G}DeE58nih-Is< z7rCfAA3Z)N7KBLmwHt83zL;{sVAf6e($D;hq5a{=oQiWQKf#J#lAv}~L;O(&m8+o^ zB+uam7|~wXz5dzkBeBFYzQ0XloDjq`1|zss`#Oq&*lUu%lkbW53-q++A7l7E)B9Mal zoj7Z8&u4?cD0fp-r?|_Wp!D*l8|(VLwU1r-)3o7sYL;5$tfTh+(o?_42DQHrP>aEl zGr@5qAfho5-FPtIv~A)%hR7~~bDy-Ti#Z1G$~|^sr%myp=CK&OH?lKxQuBzbgr6p# zSC6)!=oNnN2X;(qi!Hl{#@}C%TezY2rK-UmzD7Y1p!7`Wm*Q#Mlv_Fn^!IC5y~kNQ zu7-!PzMdF6>(P#9dhoRm>ELjgvW;g$n8B98!X8!Y$iJl7mK5Z25LZ6Kg?`VNPgpMF z;@4TLUn5n?>)bAigIqyPZ}1#06woLwDQ7@mjyQrGI0^xUoAnZz+0Vu5=OuFCJWb7?oHRl&z9C}9Ib9|2UnwD%hCXv7y*Utw-cBbI(0dD=q zj~?>gW{b~9R=@t-GID4yPW#k9dP`-wiVzU<`8z*|9GkkQiY+!6ykNHBRX?w`MgFM#W68Y(y?@ zyk))YMjUC_@0{2aK&Q0Nt^XC=0xPob?dlx#A8=;7j>%=E${Qz{b)04OK1uYM8F@1S z6ZZbtx}|y`9#OLAHx?j*vMU-gD$BP_yP zCed4_NEnL;cq=2Cu3x7`s|!yx>0e}OuPPNGYU=T=F_V+|>ruGF;L85L?@Ous6nvO2h)%rk`-yMcr!oLS z0hSuE-9s*m5Z?#S_8@dV2XPprb0rW_7D7wQAAdzK8nf|N(w?BH?$Ka=LSaPs$1~17 z3l6`kPd6J9D9VZ|TBo`1u&qU=sI6TK(jI-=RYRq&{i<^Z!ZXkFD(QfxHU?G2l~9%m zIkJXkA}vW|S)IR+PEvrIqh%+&B@OJOmC#x9J4L*Eb=ZQ$Xu7U@57`s7uq(9d&q&rB zFd~Rvl!ZO6xY@)48ckxzyAwCJX*4(GvB1Rg1IVw1>dbFRF^ z2+PNo(e~(4@H+JHio{GFgrm8HUmA?2NdZYOtMFHGf)aQ<$Y>;0xnI-jgqigzV)UV_ z;>6!%qA9!#n5WYd#FencWMT?fc`9I*Nd!Lw>m|=PIM=cw z5haz1Xvl;c!t%81MAd>_#ElS%2=!pH7%|1SuZZ9nHmBSnNltacLEeqnLOz5NS5A47 z>d(S>;Y>m8CVMh6-Cp>{Vqv(QyfM6N8uV2ncO}W)0y>8mP;xD7D`f(|rua zeJZq0a>p`WYQkdcu;S{Jo(Z`IS8NeIJ$`G{=I><5@!ugadwFqJvXJT-b+3SCJJS|U zk5kDAk|=(f4n7%}?T=uOgdFG=xUvRK%FKIaE;B5%-rv+!Dj-o_ZhQ@20k1@RdwA-b zhEFZ$onaV)J_H*!&qFSIqBE&kki$*hT3fzTSBfDE?xp2pQC76Qi1_xM-{1GYX&)NB zdSl}KyZ37Z(Gjf(BaZWUGGp0AZnI*LV*}UE-+Vb_j6mJta)gJX6(!wB6vJ6buzy~( z4GD9Z&iQEkvJgqt+3L796*BSzmDE*te($(HnhT3K84JEmG}Bum5Ctfp!4Ho8Is?LK z5U7izlc4sD8TqAJ?VUiYl~w5;V8bCA3N+Fg(3!BC;>2}{N)Z>qB3lkXMD6Ry52<5o zPDlKmiY^sPY!YE6QJBd3zv?>tDImbN>%W7{l}Nrs7lcgb#q2&mbDz*;3@3VmtfAit z;B!iV02utJon%Bn$P-=cR{zB7zzJ^YB;BBP5+%}rBjUTn{sm!7;IF<*AiNqKxIG&u zLa4geSM}fMV1y7zER{)+TyXj6eATa`L;6Q@D9}eB>eAn5HKgaz{9d;gCeP6NvyW&_Oy8YaPG#1nT9h25olh9&z zrb_*snvlKM$^=iLL|j>|X!D zmQDsODJ=rXo`1fGvL4zB(^OI-86Mh#P~6z{uBhFv*!jy21UZO%SSWfLT>1ypEid>o zh|xHRB*2%`Z6H8^wJQap5;<|Yty{UR{3*W{ci%5^rJT}B?Bv|(+8!-FSZm$4kxcbC z%Z-lugKb>~t#rygopm*E0u-==);t{~#$u$gbKVCrVqMT|4|zkUQ6lspfZvfXcESHP z3g}q2DdDO-e@Tp|?r`X_hWeV2>#^`h!_o&|bBAP0Q*8&UKVdRw%i6RrpUPA?jI#ZD zyflJ7L){10CGcla-0y7gdD3iqWl^^n``93fpyY8zygH!Ie+Y&VCl2_V!RJ4xW4P`i zCtp#*u5b)vIQ?W<#g-Ou)BU`QcsnTP#_u~1*Ja~2o-Q^_6%qf0EqgjwHJf9LC40!W zM?QV0kCS*mT!GXpb_?v_7*^Zh+TiUXsl(?Lf|_QIa$;^KJxvg|w3IX;il(a98KB{L z+7VLE1J7hY+F_ob!4(b{wY%`Ai3C{8{IG4JASZO~=4P$lYBC8r8L~C4@HDLuncl_1 z|K;34_1?)Q`FKqZ~I6l>RVjAFOrzFDmq1@IdV(z6?-IvJw1~0VlsWk!{r&@nb|)n*{4d0EzE63=R$7 z+ng}fJ{aCNARv^m?XA51eK(NQz%*#Y)cu}_dafSwm_s77D=b1O5#jPAa;W=NISCpr zA4iR}c$|0j{TiN%Ke$~BM}-V7bFiQD`J?mVF(`;qpIhVMHYFQhjjBR#V3gEqW$bDj zg0KISwkf9*z4c+!{NR@k{ZdOpJY=ZY0^ce-BpP#;O+4l^gH(xp^Qz@+-FlnOZd>8S?4a(VL;rL!q!r+1x|+@iKUEcaJx`Mc)4t9u*srk52!|P{!9hGxUDI#kang=* zzUdMU(;wU^MS~_bDJ%lafhcOHF}C;)(a&X~vyeQrbPjY@Iw2r+UkQu1jX-9@%>II- z%f$Ke!I{#p$)Kt}{Z%pDl>FCLf#j5hmqA`g;yJoBNa2k7V-${=B*}^SL?X<^9+T|1 zN)#tQXpm$&Rv@gh#AfBz^|$ZXT7Bdi7};K%8<=y}=McH1 z?*nYs3fQS%rq83!vqwL-SUzIy_%iGlxk=~EdVf2|xUz?P$hukl%mZG1LH*y}zc=OR zSg&enX$dWyU!X=JX&uz>&r(-GLUNp@VoThy1!6QKsgM84!8-Sid!FF2xCz{o+)k|JYu(#m` z4~%m(fh9jKgBMC;B9|k3Ae?GKsSQ|%cHzqb>|aau+Zb{1`m{Q`m;@mViQ7IzLE^*- zaiT;QTunr;`l$q9Efgb~a?Ot@I!Yz5St%Ma;bMp$GvL+$a)Bu`(j zZI|&Ens$w6az}bv1IrFss6o0425dTFGdH@-;;RIBf|&^Nl>1SYZ_hZN7J=%(e+k@YG+ZrhZ@-KYA4W5kRT-1_r0 zY(AeGTC&;iaboI6trNY7Gl;i$b~T;S&=Wh&6S+BtQ`GvXo%)$CZHGoFCpon#O8HI% zRr%WlI)pvJ?WH)(0phmP`|wu~FA!ot#k_|nvy+=`v;Fe;lzSxB@A*tSy4t-LYt=XE z7$4?4N%Xr%5eS|Zv+RcNbVtk_I6f>xUX@BD7yvhl5a_xZNV7{jXXu+`nA0(iTtWDB z658$NRC7Iwdb4o-k<)^iz@9lELzE3S?x+)aVP?dRG(%7eD#|P6(7beMT#55r!@?BR z2Rh;6Bb5<`21w%T-&rLZq}ffX*kRi3EDXruSR%MI-TttCKJ6OhP%c2044LTmaArVQ z6X;H;dg$LN22+lE$nCz1*XTJQ0~zAJ<*3ECJ0R_S`}xFf)-5J6 z`2_FW@H^=o`b&$h*wx8!Wi|X=5f>fPv@D=UwckcF37hB67V_1$C}pxrxz7K&tsuq@ zW(a9wL$oAIS)mg)XjyY9JlG}uEc+1k`!CFg! z{=*sl$lx}se(~XgFu7Ozs{!4~CFxL6H{0h?H;i@L)KGtuM>_5Iv%$hmznUA)*9juUkbk3e!;H4m)4gDWMJ3Oc3F@bd;o zG~V3u-xNTwF1Zs4BJP=DZ;AK1_;yF(>A1i)LM;3B14YkzbIst%o1MWC!@)uRZUYHF zo-Nal8Y7BKL2_Br1ro(JT{Cjg)EEF*JX*QIXnh`^UJNK9{zQ$ysEwcDs$8@;Mp>Oi zN!4#}O)?L>2tTbqZ_+9fX9^!rLQ;Pfg&*0u@g6&AkYPw<|A7yykj}iUXuW@tsrKE& zmNo={O)C7)DJ2OlndB1t%QqF)O6U(=2yf35FA7B?# zUza_*`1lR$!0U);t|OfKUc&=f-fs3DWhwarT;yUc?WIZ+*`t?c2p30->XVR`U<7td zV?COoz`+7Wz>|B|M;Xl&(U~UXVMlh_s6HFsve*a~QMH+n4|WdrTaSnnGLZ?fu&FPL z?P*|h$+f2KLV$ezB~!?SnUW{eR!g~LVjfPV@aii{Me$#aI4>z`Z6Hnzqlba4^(GN= zqrD8_?Zg9-$zVq|eog#5%WC(jC(i|r!9_a@HvVlXNnN>Z=T`An0wG5 z7%($oaDxJ7gJMKl-VdG(ddIU!6wVN+_)5hR(!erL3}{%99VCK*tfbxQYP|LXO-{)k zFbipdHM)ri0Eg{%PX$CxOOX2ar(3fPVGc$>F``bwl81E;9KeM$Hj`nay(1JWNv0+7 z$v;cT?0;%y=020ih%hFM)RlhNb}M_R zFuq3%t&F{C+W7u*pLPN-J@7Q}#Ka(kw8=bg@u$AJv5Jrc<~j5uj0qZr4rGuu1WfWI0ppOfZB5zdxS z?}kr{C7dm1rT92}ncePezO){jJ5imdz2(Z^W^10kKi|4n-(Bl9jBmM>11U>qXt;~v zis{lNvN4WuegT9Uz*n**7GDL6e{-W&r~0ta7HUtsg6sNs5BUpNYG<)CAWtdm3SMB1 zW-N_Y$%3@iB@Mbo^_e&=NF5ei*HD9JVtTypKJ#q*npgb@JWlFHh>)dMB?Dna*--Y3 zt$i1m7Cg~#x8vVV$vwU=nZwU=K z_ARoDkX^f))sBmZUK*ZjdsbY9WCPe`-{DC%8BPz8c6WUm@XS%5r-Z z1$3ww^Va?ENtbxs-ck|^`7)FoKl4?J968Yhg@_QfcXFaMxB3nMTZ4h!Ly~cO+q^9r zq4O)_l4Kk0m3dG%Ar2sFdt&D+Z;N&an$D*DQWoviNnXV~w{STI5X0UWuzkGed~Zw- zi#V~)_aq1;bn&+<6)fYeU{Ld*Di=#(+e7rkaXs+y?$VI1EcVXR%T7-G{e;7J_cqV= z`MYnG?fQ?~yV#XWchVz7E%x8&Y%x!&wAd$8Afu%XfViKql~e9&9PETojS z;HG^Zi#VZ|z2DKg$@^XH`7%970Vj>`_nWo1Jf@; zWR*x{jycbZ2TcHv#5GNg^CBnPx3~PUbjAsM#{R6)_FWo>YvuQ%`GAb0ngmFLmt8#; zZ|O4e|F2i&AwK|CNcx?xl+VGncC6(Rp6&C206+qPYzj~Q84YNazW2U8v~l)PU}GIO z3TCSU8^1XFq*vKqo71W^c)zcI*L3F8Xw+o$;~v#Ch`{=L;*2-lTF~#A!D^VnV9Bo= zhFVvC4Xloc_gv}K!17QdP7oii$ApQEKM9!$#ZFb8NsQn1LE^q`k9U`Rz1hqw0WAHc zCUUetT~nzp+Z!+WX4M@1@Eh}{H;OmzyT0@U<(?rzHkQgcR6vfUlCh_zZt$f z$Z7sl61O@QUhob;+6PkwyLu_K7V&eZl5;T_y)ZEU*{mF$e>fZA%3|B#h7elC36P;F zpg9gXJV;mTsNY@i_*vdN(2D_K6<#?n6kQV)6)Z?ja>UkX?6nd_V*rFa2*IhmLp1x{ zuNz?c54`M@dg$ug+O7hrWbxmI@behXd2Egq6$;#tOcd9HpTYsG0S~mbWbd)UbB+>; zo*^;+O2r_aEVB$WU&Tq^I{+radcjnGUm}wB*!0;PT$LlpJ-B}y$HV$qzz`PkO}T)D zCTMA8YXf@={Rjx~v`%)Ika}}Y2Yj(vf4F=buKdDv#)usdn4!+Y3!k(~r_s~&bkuAg zv2Je(65-9$R|nuxY1>-1s?Wh9^y*zR>tt@eu3lA z)}waEmX>1WZx*iPAR!5@?b#yd*H<{tKr^;A$Gef~&oe6CB(dLNENZ+U6SmpPYgGwy zk4`zpwc993Ey}c+`ec9Bp-ap1P*})F)pHTKQf^c3)9E5*VkAW_JNwuzn$eSw>hQ4y zRIHX4&hF+f*NfIIuLn|)C%9=uejG_(F^EJdO@mU$A25a3t@agtiI$Y2kTU^`qLK!M zT2og9NQ)7B_OumG-wptE5-`}ZYLW(B$%~0v`~^a;jvOEe=Y&SAIAFpkFcHV=cEf+T zY;P$2KTX&_LSucwC^do!+(*45_og~L3jX}H-rlkLzQ=7sj=2)S?Rf|+gwXyfM&x^T zmeqEQ|MzPX@`ufS3^fHHrbWck0E&kT^V<8!6Kzu9V;7A&%jSJDX!}Q3YRQ2x>s=Wa zojcf=2r9iAWifn{NvPh`Mwo zTt1#QV=2*ouybgfghdGCNOrIw9H$)6nZB+KT8{fF^w_|8KOq{t#)E0B6D5usa)KKI z1MasbNvRCzJdK>3CNug2RxDfXrD&gl8?6~IZ(cWeD4nSOwp0&vW)!eP?}a4d1Qmis zY(G8lkOLwi2&UL*C5TzQZ5~xVlNcZGQ<%sWJsXiHi8y9J_OP6|IC>ea47~bfGCY80<>*`*bvL6?7FJ37FOj6&JBkKMW{|{Gzg7p(=DrK#g^wxUy!jh07Dhr9Q{9hAsRlK)nMrCPS$nF*XG{!Q!D#a>RVo z_xak~5H1TD4OWlSaGZB;%4fmj_PH@${knLS5BflY*#a=YX9B^4T)wzDHlM3RT z)EdY)H|*R30-S;*xO?3D9OX|IVpBP*6o ze9L3O{mHsEJk8mc%;v7YlKg#r>Fq0pFLvqD&ZBFoP3!*OK5gin44J4lN2O|Czve$Y z&C>n&Ub3hQA?(iR##S`CWRIcM8A(nXZ1`4(yh_NCb!-6+Qfa6CH$Yt`9Qm#AA2O!B zRc4NySm{{oCSs_x`Hw*jFNuY6UQ{jk)ycbVL|r=vXwdP#CXwZIW5<^@=TanF=TlO+%n^lm_V( z1~Q5HVe|SaWEnE`DWGr|&`{ebNLU9zS=4+5;1DO)5B4h+o^rW1*mA*~CaMlUl}(ua zqK_&wg;&ba!M;D!P9TirHHk#C@X8s>ISlmqI*r8iFn|`}x9{WZ_<0Qjr13WGk%*nw zxIka$ErfNSxgefKSRU zo9FK7q{@I&g=)vvb0(`1_4AmwX*mh4708dX`hA;>q6?pF;prT@Du}Zw)+*;?4uAjg zQGRbgK6d8eUS7eyV-xT>Hv^UZPQ_&s;c)wixsEW5=vTn^=e|c?)*OyhdiC4YZ~H$Z zaKpE3&-i&%xlfSse|9JF%L}O6(K43)lAR`qcFT)cu5L0zg(+Q=%<_1DlZ>TOX%bNF zb7I?T{`iE>{w}B2f8NS=o~^VguE!}JZrrK7A(%;nTZ|X4DPZaTy&JTVLJ}MTG#%i$ zT{D!`XkoA&c&b4&iBQUKK_XDrL=x)y;u=b^2r#1iQw%xN3mCcbGlB^-WRDNlr_X>7 z7=qnqLVPv3tZ!yf!M?Upv+&;fV6gsGB!44e*&*(};&AiXgZd$zeCqHCci=9C&aBTOOy0yyj~|=I+hGO z7JLrP0r0P|#qa_aKnJ4IldnXJD7oNPcUliBm}88G!JiA%LgWI=uhxS1is-2>(Gw87 zHcPFN@rj;n#S0%?vaNm;Y2 ztV5DWmQa>#+4uc^O`p&AzJI^tzW?hwuIo6i4qorq>pY+5PJT7YYfLffpYj6} zRArD7NxE*RlB#^P*?(FM(e%W?>u7#9nXC6hU~*uNf&X%(-E4JPR;la-z3OP^4H+N5 z>QcQE>#POUceW*xJu3ZEE74<|#}5vkd@x8icotZNT+?|g2RB|On3mdAv=l!4JYBb(d@!_qj zgr0|D$t*(G9tRpU`aLm+dc>QkBJj9{{6$u)_J)Bwae^=#Z>wG%UzaIQN<^WLR((sm$qRe#l0JM!3-#fCzZRX5 z=C9)G#uam=)%tHZ%*tEX+zeemm}1t9_~eVQjYBMBMPHcQAG$G77=QZhQkJ`G1ALN> z=TnUB)gPBb^)2G(*ODsM&_i(@GY&D z{ITe)71tqNxp7h%AWCowyvn+y1qE;v239Hp%UH-c32K;Z>CD6XJQmGW0>3A>Zv^3I z@7fho2Df&KR+^3m=KJdcZU{|4wtLnp!ccbl%#c1?aFU2zzPFk9ar7v> zb>PwWN94A=_|cj0&N+ydeDm{nZ$kJIHIad2Njj#a!JHKvm3~F4tTW7f#3VoMtw!qI z*3lP~z3)Jz6q1~SmW*!Wq7rGX+>K&G;{*iof7`ftAGPVgP`EmRa3J21;B5920<`F07;=|fZt1|(`Yn+7oL+ceg$DRx_H6@<3&f>v;fOrXNln>Wpbi69 zmJtFBYx+)6BVx36LEN*1nG8PwB}CL2CyD`Q{xx z6)YM|1=YBTIDHBrm|xg#kOfO-m^J|(jOPV=mp*M%V!V#Srzf>~{#Ju;C+MBy$_3Ik zk654)xqp9W`(uF@=*R2f=>QLuu&QHS#w0&)s8U-&` zzw(k<8drzsA0(aXM`OwitR<7E_gXh1r)F4w$UI>T<+iEWuK5#e_bqe}b%NM?7P|2u z%GUXe+pS5Cr*prRPG)W&&wRN}NZk2ucAMe$1ZU?Moh)>;C-{TXk(}g_%vgJn%_+Ap znZ4AObo2#o9q}8je%cOJzOR3V67uyCfB;hdzHFfrOduel2;xy)OlaS<{P7m=Vo&<2 z5KT83@Q4wvL@D`vJ(3*iep)r9Lc|pV(bX{=u9TTz>NWACUK9|ui=W|GGgkYp-Z!_t z1vu-b!YLMNI?s1aa_lH`@pzdzZ1<=WMA=`#@NxIE`7mC2rzjpDoZ+}0ZTqn*Ug7Tk z#!Pp#Oyb%or`5C|&erek2IFidKNx>D%fAAF%(p;S45De9xRBAMa5D+}{_h+2XX|En zulr8&^6>F>zx{p5Id~`pN%8l}2%9GT+Dd$-Ta~}V^AIy8y!zXz5EgHFQ^T1DjyzV^wMbkEPzBRs=`LLQ)@Y#-c(hu>g%<;Eu%hFz(+{9r zxt(-GYfK780EN?st`RQjjb47|R=vG5q&6-g{eSG6&_1hzU^Y#!dqUHU2(JE>drvAY;d zV3`^D4!-RO@f}TqK}z4Vi4FDuBF-uADGdb*_h>?ZQ6JiPxZbS}uw`O2Z-6k(nPwFo z;=|cqJqb(w+g~XVcoS7}MgAYv3w$-N{(Uu{sw=sBe-5Uqhq#|y7r@_cItvkwGq9bX z4LzQ8#M| zzhW75wcO7@lMKX|0^*g87E}#*&r*GO!gz(0{fnz?B0%Tk>NQ}mxriT0EnNSRKTRI% zidVvwR23~^{(TG9ldZ)dqu~{|=9>wlQF_t0C>q2MbZa~J| zmh}X_QD9mtdM|uO;*m&>=S~g$`0~(t0&ZV~K(l=g^H}(ol8r^Y;7ZNz-rQX^YRoJB zRe~^Ya`EU`oD)&dBDh&Fy5vhPKGF5jz1T#X=AqE);X2~*>S-6QkyW2gB9JZWc`&UZ zw?>O}p`2~ihEXcF;yf{47wHvxGBncrmAGv0XRG=vZ$8ayYTarL*2~s)tB6*j80*4u zPdcU+(RUSb@oHKRB?@}*7MzDnerE1)eM^^(%XuMT<|FRJzF*ZDS7ped0+!`rap zkXQ8&j-hG~GDceKGp}t79Ze)ZNB0403{^xvNnz=rg9lkYKz~2E{ecoR68bh_6E_l$ zRM^oxn1Zy84uP~w-mTI_=ci6Qd_0N6|Z8yr(Ot=r$3JKE8l#7JUDT#m-e>Aj~WtZ+FhiK=-CuU{C%fR z^;=Q1v{O47l{U(P4rWsiWOtiR4w}_WcpEp@XtC>b&8u|3yGv3@8+~*#FN$XOoI+6% z_xO_bz#`<)$T_5*t6)diy^#c!kCzr55t^^|n)Z}$K}yzSkG&8T%2%jz588#kFm!yJ zJyS}>H`cm+{I~bmwPs?fA=a$uK+e~({LfdI2)<-A69SLtx^ojso4b11;hNZo730B+ zsXrgy6?bQmaNv*Ot&z@DcCzfLv30A9v++ii!KIls_5D{6kSUholT^uJvh-DhXyC-f;usOo;i(Ql;VMND2rw=UJ1D)(UJ#v zYF+R+2oxCEboK+-UZh|ZYAdix(FQOP%wzYx)~jkc;L8zv+mLb{iElbAM9qL=mpGSu zRB_wz_!m=%&>dot?)I*-HS6BQsHb&xYx#?Kb4t_vw1lH-U*Z!r!Q3+rD8%QlC8TRe0j60v<~bP6 zvuU-qH0eV7dZIc7VqudfG_ZC-(AlhY@EI=GuQXXg$3jnz_Np`Z!=HD=SLTVC)D;Jr z(m#)rE8bFnFizeei2m+=`&F6iqdD&O^}UIcgV5-*$F9Ge+Qxh*vJW>xk9#$DWQjJ+ zX~$Zif=Nu^=Mxn}GZVVspUXHqn%>PWF_@sgN8SU-tgab(UaHev zd18O?efZb>%Ne)hIi;9|U73W&3 zHl?1z_9^z|A)al^Uzl2;)8ndVnRWXmV~E|f{ZGMonU2Gq(371O74})d7^mS@9#ZGF zKJ<;+dtuJzYK0Cu!6Bta>DrwEyIR=owlheLYbl_Uj#qlg-{^QxzMiR$G9bzS8419#nxv@$g$~mAGR@w<*11NCV ztH^HeXafoZ&n)6ClZ|E4T0O{=c?MSvdb$2+A3L<|btH?6B?t$1_`WN37>wmVQQ%(K z13Wbq?dtv0+ev|rN^cSp;-4Vz4VGej?oXt-W<2GNk(9PTw{`}>iFXGA!s^cc$Rwc8 zRw%51IGqRm?#gqJ-}$_c^rtNSYH}oQ*Cak%T5p?PD2ye|#LgyfI2sCd#B-nfF{fY0 z;Dxw8sz6^%*T*}fd7iK1utOr(2HU#z-Uy#_mj01}O0LAykjtz;uX|mZI$X0%KqS$s zJm?=kuj(I)|S;1*WpVRsYlI3=x#_ z{c{J3^=0Lq0_%42R%XoJh$OrKFY)rH-fhX56Km$-?siHD(^q{U+yR*26SJD%$`&9t z9{PHooFWv9KP^^3gh)NbS$q)%5fkJUf;gfj^t_!Bn?a@Tthuu+kW+sZ$|cv$fM3XJ!-5!EMh9oHF=qv^QmqB+&oXiX2AC z19q@FaxvPwef{xbgd@}wau+>xX_9vMd^#0atR{x#4bP16d8RAvZ^8Eixp=13BIk)~ z?9C|KuBu+|UQgLqlgcLANvb$Wjh5P#N#(4ok6C8i`2@zngUjuar8wIucFElvY%d9N zEO*(-CXLwkz>_?j4xVO3e=%UNf{rPu0j_!OxSJ)+oNb0&2E0z+)FGPX4#U-HfQF1v zJF8C1qKQck!4f-+MyXz9f!B=hj~>*ZsFx-3e_Eij&b9xm?1OZJ2kYK*etZ^~B!H4* zY)lNlUHGoqp3wQFFdeP@x)Dx+!k?=BApMuRLn-81`)cWvWW3-AV?*>?pE|lwu!8rm z#dynslc%Ss@`-=WEgrRy-ayR2kwR85|CbR8z%06jmC#*q9g$7WVSybL5$fMs>R!uL zNc%fce>rosL4=c!D|K{;4Sj)L#uP87Du+$Db0Qwo^^R%WXL(-9;YYa@%Bw@BCf=_% z{3!e0?k1jv^fKk4 zxpel#7hz^&gTEdLRW}{-bZLwrQYPAv268^NOiT#>RM6gj*S-HI@XY=2sPre8tc$n) zP^76PE8j}azWkn=V_Jd@JzhO}V!&+Q?I)9ZfzWg1wiUw&eE6QEhFWKStUjWzr67 zIWMbEBhtVvJt+)J){G*cWjmc4`rlP8+jml4_<}Zdw+5a~0|JBj)ZLb<4wY;(zaQP#=M)qbQ|8?G}leDzbfQqZ(J)b|o_az#)va$jNO99FeJQH+}9-8Be&WbyUU+QaRYF_!kwI)zaKNyj>|&LcLUTn1&x~YeWYNs}j_rHj z-IiZ~1?k_t^8mNl_|td5If+pJt-7~qbJyeZ+|9FBzu7ilw(4!)JnVVTA0C2$Y%T8T zD?dBhfBI={3yTKavijv4phg5E#HnX$xaCi?bfBJ6!h%(8jl0e*k<`A%EgRUE4JF2?nc(Rw(bUP^Ov)LS z{=f34yCRqnW_&>kANV_iBKhl1;j~Y|*dI}g@{1+1yZ25RB6pP6On&`IHl$t-UdW6q z$~9PyaLmzLj&{stT5Ze0QC|V^Q;&wTmFbV~DX%x}`1*!?1? z)q+3}Vf-*6C9oIB-~Tz6if+hz=2=OZy2C>=rmv_C@-7*BnUpJ@e`O4|Av`vwP=O%_I4HWkbc#K`&)IJG|w>Zq%DUI9(9ui9w^WK%80+7e=!bKAF676}s0hI}~lJ z5U^|X!H(=@_uKaJgdg$zVB5N1bp#e>Z;8c%J7`Pei%KumgsPNO3d2Y?Mqr`f zD9bGV^puU8&f7OV&m0JE=F1|M<^$yJXI$&GJz%R%ufSf3t-ab!#Es~{dK+|MMxZlBsog){@OTZ34kvaZ6v5Qp$GX)M7nP;*VQD5s>r78%IyVy~z1R~KSNSIo@4;Vl zm7YucEg&ylF5Qqa`1W?LzJWnh3}jSF{wkHLL~vLD)#)ey4Tt71*`5%7xjrYlTI-h>ohqH<-0_*+ghfu8QM65OFo};6?@_wm_R| z`3g5(e5@A4BMW~@lWeF5z07R{z6AE25^>|oOt6qf8^PA=_oql^gI1Zyz{HsTY~KaP zPj1Iq1ZyTL^~&Qft~V+e#xi?S;L?mdx3XpG9Gt)WHBr_ZE@xc!UCicqMfeA&!^l!7 zh$2rzivTYuvqop$C}D0e8BA6ic?ffsb(Wl>Y9Q82aHZ$M|7lZg>jXna^5Uz?9FEZG zpZEu-RCEBb0DKuvx35B_Ohd5HHK~C&YAWvsZh_(2+t}-8D-3!ZHy1j)QuA|qs~p2y zntyNEYKLmJDa#5V#A*35l_3jT-YU40+=TBtR5UM6?MBMnuy-4nIEYHv=w zoW=5)9Q3g{3{lh}zat80I&@NPzp73KK`^bVecMCt1Qsznxnj6a$uN=mbFT~1w^|J=ETgEu^7p~ro zySlL6izxiaA3ioD{;=1cFgH^vI&RJZ5vYa*K4)-Dk!Il$IgH!}3$yAEu+V{7rp zLyX+qZFzVm?e?A18$xZ)cGLyM)nen-nTEf9nrLpNlmCRxw zEH>`)U?BsC)||tQ>8c_}Zmx$7@Nj^l-Zff`j_#lR(c*kWXmORaz8Yc zNicZ=Z=VEvZ#Dz56GVfvRwwyTEU{eJ=1#s_X$TMji+$jU7fHV~#Hd>E@XNfw>7c|H zJeOP*2bcz;@vN^FmfJR0U4}DyLytGI5l;)vp^&x-S;!2Uz3WB)%)!=xRGRh9<$k&8 z{0M3dU!$BE%aegXTXk7_4CT)FLzTSgM5zY^8XNWJ>l_~Aksrv7nAgVsq;JTBJbh^J zdNN;cnYL^OJYYkR@0#jCZSUDGcwbke{6ia$Z%n$&^mJ8C>Sdh*ETTx<-V#|hXa#=tauGWdaORRsTyz00l6{inhWWXxQEHkIf1E_+gE zOd%;|MlW3QW}ThKDUZj8rvL;BBO0`BOpcvB=xi!K5lb7-EU`?xF`mwD(bhb_lI~jo z0s9;2dI)WtoqWArUV$pFFWWe|juGrUU7gE4JS~{fm*1D@Gyc7q%su>GPSL|D*mHZ% z$#ZSm+;izKI$zI%3$yvFr*>MP##h4sS1CZTEWB1`7)Zg)B;w+1J=sSsmIM!1C)Joijf8#g2aECCT6s|nUKb*Kc-Lv{gnT_-suY9^)CJQdPj^{YtG0Iti1$H zlkNABGK$wfp6ujJV^_?z=Qj%aXT;Oc)Y~h1yn(AtUbnK~x<8f>5O2#lU0ACw7AkO$ zqa|5M+?zWdmo&Zkl7*Do&7SuYZ=-x3 zoGkuOjGJ&V}%Q5i5t zG2Q$eh>S@ztN3mIDHaOYw@!dpfPrjza5p6+Rl)j-HM9EMt@}Wl;SAX8PubY{>B?p> z4My2Sxjqn+?*jejH5E4g1gu2kKk~1!6?)lWCE^~71D{-xaBK?YE3h`gl+X!_4%$q_ zz~ZTAK^O|^L?Nd0?5k~ZW|O#SBk;M-Y;1NV)2F_tC$ntt89!UkXeE(|Tla3j@0k_N z-v7RS>YK2mKT=(p24Y?&dq&YF98Oc9<@;E|)k9wHAX|O&ocP_^sNF-ho-@ZQQfofN zOLw2)q2)RPqe87lLla)jW^c_?N-Sy>EaZ*tjyef;ZuvH z7z*@r9Fu8Fu63(xKY3%36IW`TR&om%SY^s(l|$(cK7^RQbNEi&{P|*(U8*bubH}r? z`_KGL*qdiJ;Fker6!`uLoZ7dv3uwbzq|E2fNs%nJr0*3hjfA;?n=d+O1&Q%Mt-IW$ z;J=zv%OCUWxSs4~(|~eX1Nns>6;qmZGxs;VZ){fEUcM60(g-_B z+&QAkX|?`z1`+VP8-`-+vKVB-!WvtAqNWI1H$CW=&g{g@h)svQpW&L=)tMa(5Y5X~&LB+b%TyMd_ zCQs*G8(@@J;B5KWynCe1$f*l`^V9cjil`fYhS5)I8tebsXz^YILGvt=MVvCq#Dmwvui6Oim5IeTki-c-S$w2LUlYgR#S+<;GOV;+w{WHgbxSm5Q*xF-anKhV~x`lpqj@p8rXlx1gS`dK?FiL6`+|r@Sq~FU<73c}_-^;CvlV zHA7C)Ow9Na&7$tf#gvKR_m*eh+{^-J{#%P*be}0_t?UJhrxh-31n%PpW2fe}XY*ll zRUsChcNU$>eY^MVcK+7c9kf@Ger_(T1~uAZ_r)dLi*~KrH-`ux+VKcdobBT0b&65B zi-y~-Jha?HWuoqOy$c^Q1)ra$g!~M2k^ZU;<Zmpp%3(ku>XG*1G=D?cB0b*GpN*@G=YXu=G10>L@I%%+HH)jH4!9iR0qj_@cptjRSyl$sTZ!dhcCg(jMBNNdf zgSPK{>EA7B54MRXYXZIQ$8df4oX#%|kR3n*Izz$rJi%CD+kX8)uJB;)G;tRSTZll^ zDGL){)u-X7t~WoR>v--A^VCg+^j99Ri=?5?F7d$#0~0niQO^pHBWN|c$btfQXE^)1B>vq`J75@Wt`_0SRBM(dN% z7C$OPF)5MZ0qT{nHK3V!?@lMGyb7ljefvp|X>~GR#Dmi%&<3C(L5idjE1>yfd0 zBo6#?EA(I)lg7EdIe}v>W`TL~bmuYPx6Yod&ww1^pIWt9-7se5T>kv|+x0@`ov5cIf@ zwHDC)VJS2hZui^UxS>k;kl(g0+&vhS=;gGk5RX2&1vjJraWMGuJZVOdE18a39`3kp zh={IEKm^VXM!#*(WYx9!D=Af3)A@7rTO5N`b&t5-w%hIDma^b`p7BLlsx@-%$Gc9R z0yACnHk-^9sapvAeLDipa=jeOYWdus!g+2~%(AL{Qc^cjpTkPERuxA+x!_B`#)iQF z>46()Oh?xExVTYlI*SQvU2l7F4=(4rXjflKadQ-?*G*%y~vVVs>R^d@07?@fk@D%gj z+7SbA?4ZI}w(EF<$h0kA21T~>q+zad8u#TONyT@*zU4A+s1NqpXKlW}N@BjGeuNW- zFAQ`Fbd}%xvCxN%e$#O4 z5xQKxqVvaLHeB2$*ZHbZg4vJNcX_IHK1)vr!*Oe2#kR%|swO<{Cm|;e|Hx}vrJ>RN zq-3F%i8rP9_MUyZ-0W;)bk9^8<@CE@9{wPDA(rTdtJeI%$W2k!U_fM^O=Q{N<>n=!@dGs_7OkrFa&mqDV z?$iZZzfd0XOZ-M-Cf`5Ww!VqzNZD&JN;pTw#Qi6`k|49MKgA}PtIB>vfnnEru_tTDgsEaw?<^kCo3|SrhX83#d!%WW++8%t zixIKw(?q+heg8zn<@o=}w1f)C=(7QV!TJ{sEX4670Rb5;7ioaRm;du?*i8gdhd%U z;X{994Ou#$&D=Ka(qvMB3ut)!_^ji(G2rUCgYO}w3d)d%&s-<FF*s)~!vj4ZMNq*!EEjbq)Tdp(~E3S6gP*AAgSMn;z3U zr|fPk=l_eh6BhfcNw|&%C%OKq(^peW_c=YEh1Yqdv9F&#JI8!?wna?Z_V(B-H&>mK z?j%NmihUal5&zx10nC_6k$aYbP7V5()giVTc?|!~_M@(Q#XHsc3%CD6eHo3q79U0# zD1AGNinM8fze>|;oO`(*sMQDZUOqp^1CCiSVA?1Vy*mAzX=WB|ST2283LoKWWx#G- z@ggN@QYZfd8?Bnteuhq!PA`k4Q|O#q&^o-Aba8NOXt3h@_xz&{9xg5tm{;##GsKe} zAe{ndr0hl+0(X{|p_hsc7&(#AaboN!IQthLEl>`G^IY~tdfgKwWR^2)(MZKp{V1r5 ziazaq15X%%U4ZY1ze+KehspBLzH>h4!+ zk@7?bd>%p7+>`6AHPk zkNtj~Qb#u5HP48AI1{22{QJR3r4$e-3?=a5F~u8~Q8@n6PW$uKp#OXXH18ET45dpw zz3H{{f9pj%Ry#VUsCp$=4?3zoUW(=i)^*iXI-(z&jCH)%Zy9w^cId!ZG`CSOK{kz7 zi7i$^yk!5Ok+ibwBFRy-ufneUY8rB zJAIduuc~9MGZM89T&l8L`D03on5~BIna=jXb_E$R4W3sWGO?mb_$XRiP|LgH>OPDVnoT0q~7ix=-A#>#DV62bw>eT`Lkh=fXWU0QB})I%xI<;Pr#+-^ti5$>LfS5HL;^R_XRhGtHwSH zvxqteOd>08n%|p2TGv0(V;G1Y;1-b-C@`<`@#4o)8rTD8A&+XxRgjgR6Clo_1xm5V zd*^nCoWVQq4W=Mt}y zp_2~QZVujP`4{*&8{-QJ?CAW{p=&_^kq5{rSc+HYQ{Wb^81+pjL8#+SlOVqML;(LN z*EENN_>H_(H@X_zOiTNz)_6uNWcq4IL4{ofdOAr|=!L-r6R3JWt{D7~#(F?EljlfIchJ#+9Le^qE$G$Fk4)T0>DzYY{IB;I0L4WGxK$n|8TJHYe8>}FYE_J+y z9H6)Mn=0WIe^_rnWio^HXW6#2H?VP4(`!5)oH@H3oMqFTtj&f<;Bx{F4;>g~5?N0Z zz~zMO&+|tIrOUv?0TgA`YvWviNDARR^hd?F8xxCv_r|f(fD-vF z#pEf0f6HO37X}ZQHXd13d5@^|2SF48UdUQ^CrwYAUbN@l`ph7qbG6**$Itag=~`EP z*%3*<6SmqkpPvrlje*yxKKpIg*JxHD;Y0WS)l;J4S$`g&FbTxXmXjiuBgF}g-Xj6tfQZKWAhB|~{@PLo7p=}5jVBJe3X z!1XHBBN$`@qCt~#E4g3Dkn)S9SbrfM>AN2LnSptRWJAgKg_pnXmyTV22-M-;oGg{V zj29sfZvJp+$mKC+*>U0Q~a=D$ZR`1A(~E# zHsSl3J+q@R&0BvQL;g4_UCjN+!Z-c$%xiCvS1)!FSipt$`?s}AGB`)YujMgdC?$~* z*nclk3LhnczyCA%V%|bq6nK_{F|gHghYVqh=j)uJC+~m}H8jc`8vG|2ST8$4+HBi) zEU8Y6uiIG^pC|)#vsf~1MA@77^}8!+ciXP->HO-W>++CF|6+PVSIJhF*J!);)qdUU za*r;B<4{y(%;!*MI}~KR;WQ9x z)o8sfvF{4c|9!?Bif*Jry9K5IE^WYDn;{p}3&T4ki-C||Yc^0ml+Sf8n<{z}Xc|~; zTmowjCcVTkUK3lx;I!$$TDpmW-^y1&{G>kHn75B|3ke|2U`sDR-NC2_+v{8~DK+Y@l0JzQ8CJ4N1Gsx0$_xubJWA{L+0Wt;`Bdu7ec;v6t=%~+#ExPgJ?`RKsqs+BfM?X9- zCtNlBm3P4LZo-Mev>V|meMZmLupEPEjCm6VG-Cs!nPVkAAHL^->lL0PRB9+D!kVl{ zoDZHYq!-nseRel21>0=q_fjSo#O^t0Xp)UPH>>A$K=^VBI+`!pvr|(2IVE_EpgNET z2~d@YL_MM@OTN_G`!Mrjv~a;qwNdR{7YD^D1oVFSX4^0OM97K6>jwK&g=F-Y?vNMQ zGanrZMgJ;{zUz6_G?Bi$pOyEfb(d@#T8qm>(YrWUc0elJe4RdKggxGhTdOs;l@26E zZw_2H1c^&vQYr8_@yOMxhkOfp{LL5wmN;iaxzZbu)VDFWp3}!?Yk*sa#JakkM}2G^ zF8Z3$^jiGQP=;H`OS+r%;Xo_+QS%AjcO*an1_#G&1B8%|Av|5e>Vi4+W9je==QUPv zdAy3X0H)Z*NiSwC>$6WLsuVg-RCS2;@+GKOon726cYz(ZK0UbOt@$H+&BCd zsZfVCECp>O0H$>&Lim(Jj>jwqa!pIcOAG9#$NU2THxZ>L2Tj@G^Wk&=qz`z&^=jEP zTC~IHzgJMP?agRlPw+XK{;GxLTKWktm^aNQ)#5^>As zps7Y{gK+$^i;hJsT2|@T&WZOo_*9CwV89SNHPFMrXz|Ww4h7Qa{hqim>n|fWJ zV&n?8{F60pr>5>I^Do#e+-y8wa{ojg7|9 z8+wG-p9p?jtJfYNM+HFa8CcnE(J3IvCT0DNLwA)v*3W8f+b?B~lM>!H*>_PL+P8Z{ zo>|;va)vmV;B;rz#le;zU}#cKHEf8!v`;5Vz~5NrS_TE75IpK2@aFsT?LMOpng-yB zbh)kI1KftE{cSP80haNd1jlk~J!US?O}d~OGdEIoPhipjG#@vP55X-##!WF?tLyyQ zGr6dN{Y5h64*n8klQ!;G1mEGEbxFe9UrW#4m&20oTbaShq%tcWj2*NX4}S`FKFt0l zzf#e@Z*&=bDU;N03>L=a-b3_7&Ob_52U&>Y_42cncY!wRPMFiaxy*oyQ7WGs$z0bU<0;8ufQ3s!-Ze(MZj~)GvdUdFNg?TL36I@Hg3n|5tG2RId z!WK4JIXP+nuOnk_ryr*@NQQ3VqAXhW!lwt$B4PlKa|g8X23~c7_%B(i7B%gE9Ub5@ z*w!mws4xQ%t^VX|P`95MAQQ1#5N`=WGc@ac9r=Ue%;`@<(462^l2%NCBs{d6f^&K` zFM^--ms}OV|F9$vd#g_~|H!J-esI3{p|rwQP?6|qO`d9J*d!)3-$^V6%ZS4W@qC%Kk!Xaa*s6cTl{8EN*cYeJQelv6_ z`E;^+8GPNCbQSK8DTt4_O3J>gzE=h=C47#$B<69jnS8=pee*$m_NZG3%afq05VWQQ z{#!bZ7PcBLEO?|CoTLGEnH~lzv7>*yl@@E&62UFx-8#$9cnW`thN@<M>0tR( z#Ng?%v`2HS5!8zO$WxfpgI3gGclqT{^+9YI)Gz$0E{R@7u3f2a==|V|SqnuSs0@|o z2;~NqQ@6%J!01sJFeZK7C@>GuYL$D}SdyDNd<|$^k9RYt{yfJigk~9jk(wO^0RxKIz%MY}R-yAOX1v656L{@oI(Vg}ygJIg zRNB|+Q4t^zhDVG_5UiY@pMMzs)ncUksr^$8-VU0@i|a{_jt?6oK_y3S0gsJlm?*-F zZv!Awizm9HLk~-!GO>=Rvj)|lbNK(ckwD)7CW=NKtbkBFN2CddFQ8enRke1?^jTGQ zT5U-ihN^6(sQPj6U7K-sg1CGD0JsK;k;@{`!YSHS5TsWhCW7NN>j|_1?-`>gz8a-u z{Z4^}B^Mgpq=F@|QOkTj7p-i|U9{nRFr<*p%QyXXVADiePBpE>>Z)1uZzf%X0!42< z5N(*R|18s0m8B2uas$J;K1jlW{hb9|H{Nl-7sS6gpr-nE!PU@px8kA`Kmp-^KUX z653;ThJGWfLh0-iAMl1D#1@RoTaCykMw7%%F7U~Ogj%tioJoi#4ZblFnEWD1`n%-La~Dm&A*zkRo@d*Be)YhR*Y{+7XbEpNWm#ZW$zb35nW z81SE`B>VD18%#=XP}(Gjn*<^L_I;Sk8jsbsR(hT}66Rl$+{clctY6WpTFpJ}K6@G? z=7x(?J7YCst3Q)hXgz7-`4kCsFyzJj@xl>$x4UeA9)xT>BPE>dCPd={n3WD0A?hhm z{}Fmdo|cMF4*u3SR@GJ9(xbN_Td%V%xA1FDrkqj(v7-fdb%=ZiWqgY%H?lJ@w=O>T z8a0|(jhF|486&Cj@O>lD54L^M0g14n%5G9_3kSb{RkBk*|8abg+cDB_*ft!O+sJH8 z>_pQQAC+q0bE z-|Y@)5Do`BLP0*70r@p-m3t_zAmPeB+P!Z8Cj6})v%5np3i4S($!M^|aB{cQ0i^Q$ z7;(qEo$-}i+j8O_ttewfgt;hMeoW%TldT<+E0o~aP0mKHbY=qGSfxyI-Dtco-DOO)Gv1D|lw>ns#bhz?>6GN#1-J8pg(`U`( z04eHW1+AU@!cyg5|63*fOdmvjfJ5j-@#Mn=oieE_(U`fE@>vRuCjUE0b^rzvZ`Y^f zgiQgHs6_Nv6IS)>SjzkZbD^hm!$Q10h$PZ;;IShIrDKKg(pcGBD7??o7aFVR#u9;o)cfb`TGwbB$Xu1+cQpwO+^i zz~{O%4ai#|iwTj4{d5W$U}(;eF}2# ztVNOd44Cnlg0@w8(w4LP#yWq)3VCkFEG%v~l@+@8EY+FmX1DE$sGq=U_;6O!kl*hN zeu`-$37oN~I`9|9oR?(*X^eG=vAJ^m^j*M8qUGI(rjNHo;`LW6le9V+TVi1>s=E8T z&3noVzEa@+vS$4V*2tMk=84DP%A$vEAn?1Hw!aaOj){*@jbNLnc@aF{96NZ0Tz>^Ze%P{_!aSn`eMQr5~qdpI$ zym}qfQ#w!{(3m!eLqW2FC}z4XF-5cevMF?CaoLmX1^-XgB#H4-jDZvHt3S7*rEU3f zSy>nOA~Jwf59CbYOj~k$|DVz7Glo>YfimZCC8oq!UIDL>ylF$lMk4J1y%QB?6Kw`v zJ17+g6v-YayBFboySwJV&m-pwtY@Vbd35Fy_>37d3^869Bf-YR#^(2zDatE_F1|(KIQUM9$Sj zc5r%C|EVV8w&XB0#J@vJe?=lD%C6NBE*Vs|?AGw6YXw$2YqYj@r}y1py;uN;y_BX0 zPn_4C&_wiu;Au@xV^;g0-ZP$Gg7jcDQy-2u|19L$C6)y()_y3jy&iUnT`i?V^`QK5 zGpEk;+`Y`)c?h4W@W<=g;_fEAhFPITHrU7d&fy~~qA8UBrDADKwEge}tz=BgdV8T= z%Fo>tLD!MRIq1*29fe8zXst~$>iL<6bK!kWS=coXKkW8gsHmZH`wdi4Fk>4H#C55$}K+YGkdrW z$yKN4D*ABK@oBZL&2p^0rGJ=7|yE4O8zoTjn1@#zXw#VlH50~W0t&A<*% z;*a?N@0)H#Cu){~86Zt{^u8AoUoK(8iNtXffyj2&ZUGkb^j)9p%hd2ll7MORTUfFd z7eVu22PqWK%XqR3X4l@7eGd-XAJ7MXn3E$GJHwg#bh*_`qtvr&4U7qZG`}Yr!*&z; z@f{KWsRmuonLek#{^vCc0glX8skrW1_}oZp_i0oNg+v|s=>nwwfG#nddn8EQLg}Hf zr04XS-AouY{Lt+?ewG6Hgjve~r0`$12di^ex^ZB(!XK@lSE;__3o_6-J*=ym?tINz&T-1jA&|WOIU527|NSq%8xQ#8Lg$yPLoVjXg z7I@+K@e*4od=#g_<1CQD2~Q&N82+4#<(kGpC~5q_Y%VBeb1ihke_+LCq?2fV>e6Y& z3ct0id6LF zPevb9Gv0>!OBJ;98WVI%CzuINha;2RCkK1!Xl*`%uof*j+4C?K9x&&k*gFxr>86F@ z(ggFsu2)l;fsBj{rcLA-_uSlZ36{H?rnmBSpr1|IZ|tZ4T|o(gg*Qesk8ZxtuLgp) zI?pp?@y03LQ&su3!r=}?ngZc~$-e27XA9$Y5W-w=uWDuk@b^{#vgtE9Q~o)K00L<@ zssII@)OWOI{P-o?3S8gp=zD`DjNWpl?;m{nRvDs_Hh3a`&5)|SKi9O0V*xiX+H^RB z^1Uh2VwlnsFtD#e|GW?0*QkGyFCx$7Y4Of0=@A_9#b{gINI_&8+VmrR3C3iSRp-4+SlBkxca(zTZ@l$FxOt>u%&$NYqkPD&{b z?+^bZ+3jt|Qr+DoZ>Ay{9=00FLbY_4TPu4W2>10fy?%VfId&piX`$69?&gFfuI;Nh ztN?^H=yP!rabL0-)LLp~iXs$fQJ**M-`?krknDWb%J3qM>#Xu)11Kc>5e+E8t(mDX zCZf1JGw2wQuG1ypqwn1qewW$TVLhWWynHF5TzXfOQqC%bMIWq5f<5~)PS&50I46#S+2MN-b}mh!;fQ#*P6GopCrk0GW(NsqUC~${mHK!Y>#mJg0@d zXhG?~qTJ`+fi!e95dRZ3FUx>fr{KUHss?_T+76}F=d7>3l6iP#Ehy1in z@yZ5)b`4vDx3UYLBF@uplFiH6&4WcR2)H`mQQ2bQNlSSH$(*QYNIOzdX_3wiv}Q+|Bf`i=8q0QV384ZUZDwqqj2`S`vP^4 zbFUMdJ|NxlNe^~*QIj&0e=-sYbf(Irr@XNMdDDZvMw`o5@QhY7!a>zYcG`gN4KN)b zfYhtue^K=oKv8gi_^%4mwR8*1(%m6QEwS`c0!oK~gi;a$(o4hApu~c(AT1#X0)jLu z(jXuuQW8pw-m~xT-us{b4CDBYk?}JfCM0tcZ-DJoFmhxRLj3K~A2LrD=1h zvvV%YohuPciA7n#d4Z+t`+7SJLK8YT)b4Y{pUsp}Ee!qzFne_(D0lp>Lhj;on+L5! z4McAkx#N;Z<6;x3;lK}Z+VR-P*T+`g=1UN8^!xZy>2Ff#fsEQGBNl;P$AkIVxwHV> z!Rio7#JSc2`?6tH;$+x`JtD^+A4`F)mYNC02YAd`=m-fUxt*>EfPevDyEY2Kp=((L zl(CMEP8sR0lR?*5GOdP+0G9{fiZ+5?JpmY4a$cV*{epu!x{@QI7+B_kYK8&6@ZO>b zJWf?G$gGFUjvL03c8^^gO`Xg1NM8CAGRs1tjbi*fOC^*lI3z`ECU5U_UIMgtK}Ijf#N1jdb-&VXzC< zQxH|lt}wQbB+4}aHt~Ac_)|Cy;LbQp5I6wy7%$#Au2x9|A3G&@i`*}tc?t*uW0)pL zK)}%k{u9dp14#-L)8H`L>^`7ny%$G$sej`ns4MF*-r%BZo@LP(H zmH=B1wB<$v{r@js?;sv&J)B8JQq8ods*CY4J$*eM&xD}Ts4#$ua>N7sDOaKa>+O79 zX!`>unJGm*y`+j6cI(eBH+=7X_vwH&wg&*!zV)~s6{ipi1|-bwc~knac#~bZUVnFN z{{{a*fB0wijt7TZuOaYfcfknPv=HMUs!x2Tc(;eEk|gpI3UM>Sy%0-kwCg)eJg8HU zad$Va`3IIQjgI!O_uhIMepD%IyORLrO{}%nBrwZBK-bh##f+iY1VH@HkxT^CEIv4; zu#O;|1EHWLTE>azNel`j`gDaf2=MEq6}tdRK{VVp1|U`Wm}qH4U+bVU>`P8~>EW^9 zZm_at0d!-4TC<_>=N{i$@1TKiethmO6u;eGAZ}f1^$~SzX*MjYj;#E{`i>So^frqP z{A8n-6#9b%tc93}0KY{lZ}*#qE1J*R27tAlRFV*w^CTW-IK5@t<2fQKN5)31`{nSk zQRLu+DfQ!I;Q8lpAcOYnfLv}3$YC7<+LGb;?L*qXJkOmhFn#*k57^xHoN;9QdIUEj zCK7i)x)2d(mL63+H=HqxT@raAtEK(l5*4h$IO2aQNfsb5e*bdkc4t2VhRiPdefjlJ za-*>~nwaWmz_FhNlUSlh&>oTYU1V}Z0!&C3kSpo<2*GeGtPpZDb2gom--!YM&Cv59 znI#G~+}`a?9{J+{tl^1pn^4N_+5cj&jI~QNAW}3M#nDDgI<%_58UP!oQKeG4JmZS! z9hGbGwzczHZ0}Z>p-Y>KJU<|T8*=!&$c*93eDczf@m$JmO zaD6~DnlwzA2u=wl?IyyUIzW6TxGX@nl!;)xA|QuU{#GVeBl+-K8*10y0|M;rZGSk> zPg@!mw$f_ALVJ$9DmrxQkHkk~a&lafza&8HZ?~|1#>JSZQ2|^&1L5u6qpZkOYYdli}-wn|~GST3qsy#t) zfv7oyXjPl)XE0+VT!-odShVY2GN|^6J6^7eqd-h)#{k;(SNU(|hdP_VPi1=#OBcFW z6y@mn^11eo7)jQtxtb?fYN|IZnZwy+9WS$g&yt!aRl6mjwIa;&)2DWrU;CK(_Vc*F zK6PxatOG_YV(HiCtLrXq^UaQ0XFuAwJ!w1&^N9VQI*}MXU}CalvS@aPsayrS2TRP= zKUSENdo7NF&Puet)WW4jLDoMPlC|eMJ3{m;HUQ=R@bABV*>~xg$xMBnW!bMVTiu@p z0BiorlCfyBB5b?j=m=XU!DUtOd#Wz1xn94&CyMa4{C0-bJCgEW-uan)?iq|_w{2`x zTiaUPI7{QVZ!o*+eim_ZrJ2uW&(OFlYD=vSGB(|~=A!yt`rszByfCi+*=dQ9{lZ^1p&cWE7CRip-Hp&hJ^ z*nA6$4-j~_R31=i*uC2MfYl|UXl9)}9x@x@OT&9w!T}Fh>-Q*^gd^`#1tBH{Q9{)% z_uA|@hKBA_9jdXx0SFhYj}pOkV*`@2+yxRi=*1h74s&6~&QTi7`!>{-!`w**9v(?m*UU@aiB$Q#+7ec; zd4(R*rv}`|xF`BK(3gYP_(~*iVf{ZbY*M%y>k_>vAYZm zymRp9%Z%T?bVdXJw+}{Bv+9304=d+-az7q4f|Y+f`91WIaSM-0zoz58e!bCvo))M1 z*F&=+_IYlPx=bKMVklVfTO>f}`;=2Or>GhokxZU2gXayl3j7px%1gP_QTWw& z&qpMdF%Ct9$r3b=R!E$3+}GZjIFW=X|4F`(hQ zw%kdDlvek`Le zA2k5^YJfM3%Lwy;>f_5D0d=pt3Bv`xcJ0!LoM=|Bmvg+vqGKuB!fAP1fzIM}n1p@t!$Jn$R5oHCSAVNpm_na8tX57>ob2}O zWF_NL#9FJHi^-dJZPShj_-SLO0rmJ)5(;M4qT2eh9Ug)ZzSlovHTvkKaUNeJ&w}nM zW93Hp?m$>|MyWyrrTe)8c3Bn?r31xut!~hHzHLYct5N+==`RIVH2m0R!m?ni?Y!<3 zU^$!TBOssN@^WQxMSW-`itxte>Cdf3Z^OTrYg(z%kNa#w|NV*(uysiCL*fN*_z~}Q0#B3kcpe82u$Pj~f>VL3sbkVI`aqRYuO4D>HRYpEy9Yfei&fDBPtA{TA~eW3wpOFc1O+3bik*%CaM5CWNXs=%hXd z#Y2#N0pc$n0EbDzG$|C5&>o4s59W3Ac}sujU#@be^^lrIn94m~g?|L9VLYDHc_P?B zP-vLZxYoBAJ)!tvIL+C{pCkQW{6dlZJlV$IKIoF!mJN%kI^xEQ{XD>m3r0Ark>T=B zz$gq@V&Ae?;it2{=5Q{%={|bHXoLR!H#V+U(+E?hm(_?Fej`U-{4Y9!f$=}&n|#|d zUlYbAqWO!DzVGhi0rgtda|)mtZ~i`8xP?PGcO1MY9a3UL_{j)!X=A`prm6ATnqLw< zf`!+H%rd7D=$LV=saF$?B!0C){^5NK*MQ6=L!=kZKE!Ss*o9t<`W`%Av)m{OH}nj1s;w4@_2BgOt?vQBH+7T z`!4OL%S<=It|Hx>mt#Tui+3}$es;+QZ8yY$L@P9oh4SQ=CIuRGr+o9%^Xeq%Maiv; zl8;`e<&A?-m)oTyb5%5-ViNBWb7}}F(c1j2ZaXXC!2FnY5u-=1gd5t3mEhyRpTeF- z3oNA|1{JgnxTkgu5G5&kM)vn~FbbFd0L+H)#VZ}&zqQ#9GbW{yojuzN0S{U>)UvSa(Kd^)(EZ$TVti zM93A{?;Px_aYkIb;4@hqqEZg?Ra2w3!x3ZFclz`k%aaDf87HCUtGg|v8G(Rim`vge;oBVG3{_=Qm* zwC)A~`%)bExJuO{NuXd#%Dd3IfaX)Laiju&*4zo0$maX50`bE}tGy`a_{WOYKNnH+ zcZ~)-sYpIGQ*2ukZ@;jJ4Za&0{+(94NLFS;=~G?$?>Xje$ks`5%}P@Aqd$M$y)P1%1Q1b#Y4H1(0JpTLmqqLe zy@PG7lo&3)GYwa%>}#yjJHrk63~G-|xebclR?n~-uZjy7VU~=FN5G&J@6ce7xU%lv~rDuO1Tl5TWb-V(pjr8 zk)EEVs}D8nZf1n+zsnxMQ0gFmm#kBWqP`7pBo38QE)}rOwrbT5Vwvj^dFs9W+|1c9 z32`T5RCu1oUPjR$r=#sxbp);*A7+<-{Ov#CsI@zu%kh1@E*>G}bI@azpHT8Y(mGht zzXTFDkUJnlFfO3@~1sV-K z-2!4L9u7fbMw?4O8wqm|cnYLoI4mv%heH6%yOlNE0Lgho<*WV}7AJ_Ju(Y!yec{`?ZBbmv_umm?LsO-BFa=uJILNi{3yNEM__QMnruOu#Zo`HQFfn7>Z4#5{(~_HL zY4q6P>HeDse5$5p3s)k&ssFN)Z%+%N0tn127SI!Ja%w{HPg^Cq0lET2!r=C`|Nq&< z#n3;xM@>!%V#8AwIIvIblz(g*ygqd)R1RI@h%+zS;Ec%@zJqmv z`j|puuy_CG8^=fT>m^F{J{t*Q6nyD)_Y>PV=06fn=~4B3AA1dQvr~+mnLN1-7DO!c zqf>OMgo;DQVV!?3c6@?Vo=bzrCtka0d~M@gZkY$NvGJ18-?a~^>4oSPQWS3+GZ87+sk4jSM&p z0-a?&AMm7;<*|aHM_4?3{x#PIY6T9(%tllf`g$>2c#cEp4=d%; zNGHi62sOyvp@B#Lc|1|Tv3gTmRuUiC1>Pj&q@h&$%CCWuJXiv_{RSIE+-&{?PB!ZQ z3Q}DM-is2a^ql{WAei+O=~IpGkpVddC~Fg-t7n4Xw?uzr9#Uzl+A`8%9(=Pl-Pu{%D4?FosZ8%Ha+cZL%-Jvx1hS zc&5Z$30JIx9@$M7Npl)RRtEbF1y78ZF0>QO!Xk-4LqSy18#1Br5O`(IW?*oZYLRMO zLXlmNZ1D-*tr;O*d33ho}N(;#dhA(u}@|?RKoa$-Lj~UlTKu-=vP;wnx7)cD{bx&4Unr z_}RMB4fC)-pfsg?;JBuBY1{JTVQA7O=;~FxwuyUn!UE)P9zQw`iF#PCFOX<6y#8bO z^IHP`zOLzhtUDLwd#8B{CE)(@`T0AZBcU*Ox8y!;=W#maO;Gx6necvz{X1lrZ(5>h zhRq%J&V@l0w169+gY3`;6`rn+(~7xfinBQ^;+2xM_lkRcSskAf8*FhnoKL=4ec013 ztQOD5gUPFYcuy$#&%3}(qN+$|b7IaiBcBHr9C03EH4^fsv;ZFohf$H+`QJ&ZDmx0f zKT*Ad~~-xExPItkg?7#TW+l*x|b|Ri+dG)gWNX zWOk-mv+}`cwCBYHHNUYte?o~1)<M5K-1=)CEzmI-Js#WGb^LaJV#w(P$kib$WRyKw022DU1>klegve zzIVrty+xD1ew&dDX>h$M8ozqII_u9HGhE0UHTJ&_^}hoprAYC-g$a$KZ0H^cwX-0s4gYJvrk7>^djd?= z^96K!M$KRt>)j{%Xi6;b3*&2B?-NsxOByO3!rxU#Vhd!pz|6H>s3M_UvcA%B&V~8v zTn}UxZGYSLX8#zPQI;)Dr7`{Y)waE)-n1VkL65d`KaUqp`R?rg(X^J$3>r0FXUM7~ zMEc8=J8M}C0iO{DaBvk=t`jE-@zxP8dikb&*>r0f)yux##D1A%NQP#E7~tLM;Paak z6Hnsf0KV%~2O7FVC6OH4a7d?e458vx$}9E*|0|^eqMk70iAu4y^tZN(Uvez9Xq`E~ zfq@+fnGt#0Z%cDh#B*dL0W>WiHtbdC}*1ec~;ZJgJ z9IbqU|C#a|H{xgFyGIHLTIbM8PGNmOFI%-X`3~`)tO?$&+L`}*n%x!YXEmb@6E ztPbSVFm6_uQ~R$Q(ICn+jP%--xcQjYRmp0sWz#1Xm4!h9GGM&Qn`XlE7>_`CH&}S9 z6I7Rwi4`tjo$*I&BPfh+xKK?hY#S}yzJ=Xm!-rG(mjkTJ8TLvFTt%R219qlc3iID$ zJ}0D4F$vzi8Qf2y!>KdqxHv?=nXcaMb(?7NarKK{t-IUz1pZSJ-Dk%xe3^LGe$5b75R@ z-&t&${2r91yFxS@gunm`U@{ZYik@@LA$Ng^wU%9;R;}=X?CCHkC$6sgS!vX>vJ!FM zWZ)B4NB>i(G9s%~K257RWW#)3o%Z;KbSXnCUrsGcUI7e6bU6T^5yv5c%dO zjW_<*8U^9N4ClNV86m^SFD@nE)xmk6I3fW*XFiQ}Q96(H>m3N(d%wAmnD%Y|TkHCA zynq*ch)Fn=8-zB)ON;J>rzbSl-M)pBHx4!)=D$TE1qwD|s6_$0?mr>o>LL;}5fJDC zBnBIP2D})Sod3E#Xp-6e#bt(=i1JO*U{s6VL?2AMitN?h90W8>R_O(~Wl6T|e1LQ!jlUN7 zpVV&;fk2}9wq+sy@VY_?%SlaOjRjY+l)guWRbl%;PbM9`y`Wn&^OB|1|)D5P+3M>~IB%A<7g2ofN$qeGm|YamROX7*8zw{*kL?Wl71q zD)P145I{JQI~f|P*Aj@{&o36hUKJ15!aVhKogC#n4-);YdTp(5^}q8pq2~5X$_S}| z33xNmsCDuYn-0V)(c~|ZqO8J)S6+-7lp{|$9({WLwM)M38El?O7qhgpl*noLCZO*a z(o6g47iX+u6pAyIR-J0kgy0lau0^d6bh?HH0QLqx|1jjjZ6c6*0(=~|ih_~Uy++i% zvkJF`=adzKA9BGB*%n-6GchRzARimM<~De0epANCKTTb*QN(dn=zEOev4z?b0!}BP zzFhUmk%E9O&I_xo>q+D2)XO$|bxq)26FO%(7Ht+Xy0!o0ySOf#wz6@@Rg&j(aXcS~ zbS(Apm`vrEoSu<%M3$ku9`u_+8{LXzc8HMh7xy>X%v3p68GiH+-oYvo z?2S_C`yJjtnk=P^u~97wo&b4lP5E=#RsCF5k{RGlD(?n4C_J%%mRRk`gTns!mi+ehQMRVbKng);SJizjRzz54T0D*fxq%8UJJRQ!Q)k>^$qbFVU z^NX1-cBnAwtU;k-c++j-td2Ry)z2@q(SPK=M4rtnuq^HtJ$7ua?osK9f^AwfdR6te0>@nO4&qLMsum#lh zs0c^-G^ushM^%cXH`nOLpTVlYPJ{iu4MouTYoFz@?u5lBSq?$Pdd&QsPPvRnzezAJ zz_VMdMIo;m%_^blx82uZ)WcaF6nX*0O3uQLRg8mnzWr&{_n&Ew;9I>Ig^$A}l$5gG zeU@3LQxF9Y$u>YbqZs8zqgA^=sd*~{Xc0e*^o{iQVFpnekU-US0A$Ed;+7J!T<6v| z$ppMus6&@L5372LsIu?Zv+(;~cPX|ATw4qDB}u4Vu9OokGHEOUei>nIFz+CUBe3@3ATTKnzFw2r6~ zkE2!74BnH`80Ijf6)!tg)rFocCvv7Ts25^b^T!SyT>E*6xUS-K2~Xw)IV;6=e8vbdH|iSb8&Q>8dDhj* z91ccOEwW+Sk0vZoj>_-d7&#IG52zwkOvg8s|DAKht0a`Lhh}>lEJOK>fo9X0Dz37n@-ife5$nCGc-|h352g@9KhP8wO*v& zQw6Ldc0s&g%KVZlYJ)1-`ERqxo{si2;*u6zfLvq81oF}i>sVF1V?t)FcrEWb99C`7 zAkba><;2&H8_%fDz&wQ`Nn-VtORAm2!LJ?)2ZC2cN9jo+z# z$T0D z)}`ky_!6*Pf_Irg>b9`)F2swLdmJo7&<(%)!J#rkqsZ@$tPAO|s68yt;9grG#Q;bj zL<2sVP7H-*2;J?DG0yp6I7E(=wPTP?qU`A{rp{ac^&1Zzt+|^h`YtySO0a(7GpJkg zav~&yyVO@{;-D8D&$hD9ldMOd2PVe&JfOUy+FNK9RrGLB1%_J(d3@fKp#McFVAH5% z5XR-VPAC~SjOm7t`#t!kL<7pw>H?<7AJrM~Z`=@DUC@H^%|&Gz0XIA7 zW%hwa4Cuvxf(T?aROrz+zo-<-zDAV@HA*%O?8b3-yfLq zfRVqbWrmEz4uYkbj_ow9iPDkvIPcacNg?AwW@*R%QuOoTUTT1(#(3f|~dM+qH$zcfUEB+{lFPA`b zjHTsuS2U(lZNEc<%jE0^I)V1%;6)wkO8&1qat+>&`~u-%u>yofqEhZ}lPsvfhRF=% z-IPWX^9>ytXzf*$q!d6#IJO&jqFiN-?%LgF+io$pRr%fbIn-n8%Lb=0Dgt}8>m zyec;P`_EJ=gjt{K*|y6+&o6%);ZMZO2y$Wbtw19GdvK+DjZzs{iQCzU{3nKdU&!h= z@7=q8{H_%Ql%FoBE;Q-~Umeeoj)c7VxS-981}KFhaYr+ZwVQMHkk0mx-8kESHTVky za%%9stHIPi+G`C(`Q=rEZ)#x*8TY#axZBqL7RaJ6_uJC%>#<0YS#_58bC|!JFK|U% z6yLj@A(S_3$q(v5tDtWYVzb9D1go^_WiR%^htQOM& zz>u)Gr2ACzfV>iV<_&9iahHJ896G%05kB=UEVln5BTc8Vt4oh`a-{X-Bf>?`;*ZZ| z%n99%C5E~JdiW33bsXX+p<9$C2SSqwjE{rhS1x)DaH=xkzqk`|eezAnqp%JbP{i&^ z4n%=2hr3QdGMhD)UahxOu7Ai5dvvLqMZSHOSyD^sxIYb=V3}Y2UdhyA&3t(iE3;|o zJBBz~!fBB`VCP@%Q*LU$&^4Mth<>PCz|-4Wx&|7S;UbdhWc_23qVl9CTXU%tI#dYa zY1MeC+`I*0r1f++NC_PWua+`)PXZSuKL}4pGx}R7!5f@^H92|D%Z0c8mz`9Qqi#c% zN81>D{kTO#xV=)WUdoX?PwqyT%cJcUJOi3@wP;^!Q=*R3&VA3X{wPz1>+pM3ZWyn! z;cGA>p7;}(7UeAx#lHtvL!C2q<^JE-R^(o7JoDM1_LM!6_->rBzJSvI_CiM6;rV zzwG)6*ou>`H}R3`-bteMc4YF~gh~*DO$BgG)q`V^rj%%|UpC2YgHtN&MiJ)Utc8va#q!pbG1D!CmQ*QY0>iXxsFzbBCMb`Df^%2LIL?C?@2 zg#L;olJjcK2eq{0g=*F!Wt9gY6q0bmk~;74!Uh7GH-FR~`UIpjf7iaL^~4p-SvNk- z4auBf*3&poC1di2hK)A6<=%Po$b%LB;POv-R^j5>EHX}$X#6S{0VX&ZIjuN;8|yrk zMbVenhW1_U>2Mt)Iz%dY*}~>Vnue9CNL&kJ$PFFp9&oV!frI4$_AHRI;214L3Xk90 ze%Uxm2T$aV%xWkuD-^eLTUZBwk4zjZ?0m6&Z3MaxZ#Q<;?O3zpMYhTO-TZ@11AAFHubr>pxRm4{B>S4Ld~ zvsk*tJHLrt(CN5$vpv08zN=TeL0ih@%jvMHD3}+`)LH8r6pb=hxpS6&^qSJaY&?u? zIzS3Hz!Ki(3A5KM@qF7*o%|$5y^IOtxN>d4c1JYSi4zVqh97=#RwwPtS zuj>rB%@!5J7z=7kcGL{lTZ5N_*ZoZV)Z3IZlPV+ocf^bqZn(erwqa2(9=cUeZ0Z;Ksv(4Sd5CBt_-7}fl!z` zW5HL`_up+uqO=|)Jvnd~H2GS$+TzZSzZE(OQP-a}$|dPaOf?3QN)#VZQ-7yywvNqF zpPcxsr~_5skOp4X4Z>z?l3Vgl$9miN9U}|igp#%p^7plTW{K=~`8rsBh)_Zb?{D!s zysQqLXu1vDcSU{;j?cU^;95Yo%`NX|=N-&GJ-G3#1@Yohaj5!I`Hg68+Tr9GGmVLs zn~ubl8|2${`X-j%arRH{Rq5&vJWeioMOPUw1{FPR5!f{6Na>e&lj5rW<J3a z^*F5nHX8f_@zP!^FG>?uX?mLW{bn>DCSs`TkL||84=)nceotf48#odfDTi}&^#t2r zFx(PV3OQt=Hy9zEw5eabp8HxS{$Cy``&#(=XI0^ND9BH}VnY+B;W7(L&=8w>nzf#CJ3xh*Ou#JiyTnhv59_#G| z0sw)6s+277XFj_ECTsxy?rOyD?&FS)E?A=)Pkj*jxFe37)T9Tewl@=QN^1#5SSP7h zvG4GaQh(!1`gE47o5kgb9wpIYqbf@zqivHcGUQr9La&E&h6FAxGc@e1f$m{Jil4F%xD z-bh9v@yFA92{Q=2Yz%9y+tYRznsGcIgbyhyIoXY?YQ*!Vi80y#+=Ok zqwG;NU(a>S!>lxM<=mgF@A#4johlRQ4mCDXq~in4^x zT+7zDjfInUB=ZUiy-S9($e?Hm9hUxMPF zWUxSQ0BJm`{^4;zYvL4-))44IgE`N$?!=<sM1T*9m->S>9BurA80tm0^jFL z%dv<(nwQ`-am1(m%qNjd!d_ngBh5zXYW*oNg<3=tc_CH873ol(zy~O`KG^)<>{bhR z+_f7X|Eh()u7CSzG|7x#W(1(mKx4lr0sLB51_+24v^*=gVeW!f)|2`_8dov>FD#mkgy?-rdbu4>(?wo||+zp8ml zGFU?K@*2YLaCgh;vPIa3snqMUJNlM-cDvt%i1Kfl!<{MzK%1tb(l^c<+^%?Nuk1#p zy1vpO);!3EKoUh2Drs8V%U+ffNLO-)_C8;OMKNw_J7Q*=ir&;Iuf=teJ@M3GqD}X`-p8 z5sIta2**4oqUq`(OpuIsKJk0UftH#r^`{RT9}c8+7h2y|CtB#i%Tu`_zzV0jsSrto zJrHAIoZWxQ-CaM(Qy@>~q7FA9`1in4;JSA!pW2@q+pb!ZbB=tzg}7P{caivRdF|6X8-@ViHqRoVh-7(nHTj&67`5)B_p zRlunin%c6`R{1nQe*;bZ*4+|s3?3U-4l(xeu>#o*rR!FIO(BRB1DKvrY@=$qWD`-s z7OFV666){3r#Zr5xXGSBX!O3~R=WdVhI))E=8Q1_w1fJh;jfCz%Wx7fV08w8Qy|3J zWSM31L3Kgi)eh1ae>K>|r1~da>9l>|xg;6Dr+L;vHk%te$kfgPQC1ay-TT5fpU8+w z`(ImH^KRw1v6DRkGt;k9hii7lYZIr$i`FIktv)?-R-y;1yoK@KOmDpW6lz%Xc)~ZQTJbr_Q&VnyHn#?o5V1y!vzDWSCt7 zW10CRjo;Jvy#1%G3SIH7{#IoqdK_IY@z7T9nLdjioD05)*fXshI+OcF4kDO&IUnwP z$q_&*<|2v(9iNdHkf`BL*N$K!j&e>f{8u#U1bD?3)3xkuzhK3#JMxK(ppz?{==hJ` zEnLR$jxrBEc{8Vo;*fJWi9c_;;l&McYG@%CN{`q)bQKN z2iLa$4l%4d)y0twgcyOb5%aY?eGs*VAJ;>k{JNfc+J05kHQs&m2v50y1M~6acA#^8(m!R# z2(jCYo`fuhF`CjDJ!en#?f!fzM`&DKyOeZYn`vz>_Ud*m`r{)$deY*zb#&12dh^z& zCOWQ%w<93Vp ztI)HlmkOlJ{R4-RUdi73B&8sRM2$zhFhv0GO?p0Tzt``|KFStW@0#b4 zWnC!=v-bSvY?3{%CwUfNAK5Eg*!KNdQQj2Ud)=qURR=yF->o}2!VZsG6Nde?0M5b* z&(nLck^7r7}fyyciP+YaCAUm&9wCOF@!F_S};Fbh5XgJJ;Z-#oYmO9RBO_ zdNl}pklEn9e5Z{JqydbWHH7~Q8!Azc(~*CARv#TwB@7H@s(tb&n*>YJky!QCbOlED z+vNOlD!Y<>Bd-p<$y~;bcNZiA9=>i)IwUdu8^8y`fWz;}^F-68DjsPwrfM%Th+!GG zC3tQ^X6);Bk;Z(^!$`F4qUhd_ui-RS)HQ~{v!$W=!3U>x;Zv2$FiwM~ETFL{P|6J3 z#sORzbns5nVm7?fx?hnew!4pN-z_Bk*PU_$`kB{fY~fs#L3>wTBZp7Sx=iZHpZ!f?epri!$GGa5e9=g)45s<)QQR0=4J^tO4Ut6&f%?fJouDzB&A$B4XMJ&#*H z1~vQUagNvV?|(L^&{y95-CP$cY-`KX^N`qH|STZO5BC{iYslN)FtNu;@Mk#eim zwAwnXm?XN=zN*y+qv`r5BeOMQ=E>BzNs}3r#dAb$MLvLafSM4B@r}ZLnyKp#pPyr`i5vMKvd9%FkZX^*{eu2w}wF{ht#Q*OkJbLtL z8pPkI;!m2WBC`JnswRB3&u1!65T3e`O3blsOhR|n8VzgPgx@@2%3uWibRS# zJgUPu$aSf2GHM3}O%vua5K+>}P$YhMqoKDfk^>|#13Y&Oq+G8goLguG@A7&K8=GP8 zT4P>4x2jEOXK6zOuDre82NCs9i>@Rxvj28r{}i|9P^=%Fc_8@;4l ztVYIEf;%JM#EuNcq^I3^iMnKx@mwr;E&ssw$--O_>i--DYPeYQ;in>)gZwSJb#AI- z+1{m|!+*l7t;wv$O-v!!F(W#EV#~gknPz0M0qU$QSW=AYS8;ra6!xEyO#xrL08@+W z_$o&o4<_4?SGwhQ@iZ&?(LQ~Hpm0IO;K)6>_0 z+$wl?S5PfJVPH_(7uh!xTaFOEr3>Yv0rBIRUavrau|Ci@;-_l?f3Y5QbC$-HNCgARNX=TclKUP6Bu4VZd5gp2<&roT;3cni{7-vp|vuhc;X69lL}Qxpbj%L0FWBc zO@g1#xj<1qbj1M_LLuVoL)@wHB@~u@MxBhqh+iS%v=dx$eOHtC{1Mwf+A4x5Mt=`- z8a}aAkVE|Lth3F)Y?!MOGlDroRx1TKJ)o=PM%lT$JOty@ZHbe8zsI7eOC|qunaBr5`IA?d2s4vD7X7zR(isi7Y~Jb1 zmRC6~zRcHC_U2!rH$=gOCrkSsdPIP*k&h9m&=(9nv#)<2o9LK zwiHnFXlz`QCs;e{by{Dg04nN%_9EQ8*MPo~zygY>Bxz(&m)+%zf;Jx~D|JUi=q$(SdZ#Z5V(?rewCU~Ee!)<`IDj)h# zku6wi@bSDXJ2k%7ZY>8-B05dxWM4LHO_oHK#W;$gM09^Ib|>y(Y`^@%=G$VUH$ zG2u*YY^reQ=#E!+>nb~!6u*A+-zvRzg}t9mLW&n`vUP~zV}SD$2?GUn^^J9I{6_}h zo14jT)F*-6J#E+(&)gLcT){f4Y{+&n8uKCizI8`D%TX5xMt8-y{BNn9IC=?Byq}|t zy0oe42Ahl?_X0iW^IgX?N|>j+?dCk=flg(JWcIeKjFVFHd1A4rMub+{ zTN4BrhFESZQ;cl1Ro%Fsxd@t>aIoKiS&Gwzug*<2zx}5boLbnnL4e7Ax94~0Gmw`m zUfewF{b+1-MrcYvyj$E;x>=aOKQ%`Cexf_bH+1<-0L$MJv_02xz5Qh)dFTFyEuUP9 zAL)92MQ9cDQ6@kv859pbU8>0Lpp6W?M{D-3hx)QMn~fIWD^l4JBF~j*cqHF?p;1_B z<}oRc$@iMp%zcjzzisNOW)Os!Y15bZ+$VBx3&WChn!L`G4l)ux(HrW+j^ZDb*3&9GJkfe}>4ef~C?aBJ1R zH+D88A97(5dZz!SA1K;Te8?pexLl~Uep`n7(649BlxB;Aa{zQ$n)E>kC-A4eBb>dU zOC+~WE#e<6J^D!K&YA)Ar&pN1w32lyzU!G>%v&ms!_jGK;PaOJ@ADqXZqkeRZ}mSa zan^ocvkR@AP{gCnkKegtG-J*dl>k<2|EU6j9Lz>uDrfCOTE%TS;Fo`F`!0hUsf_gp zufp}L)|AS;y_-l{QmEJ*^;(Qx(y*--_p*(b zr);@aL7&>8!kuGP=5>6!ha!6^f-;$B2%|HfRAe$0V2bA3ai10>ZR164a~eHcYfd9R zR9S>B@q8+dijvjm*+B2dl)6QE^oz~ z=jrmA3gLwQF+Zh}23I`W5prFms7JcD*_&hqid8yaycFPkRlng`1EX_n7SULU)3KIf z*bJPdG)%#ZlKzEO4aOde(3mZ6v&Q-o}Tpx_{Lpn=E#6{>lmc2tcu;g?j zs|2W;WLur)%B&KFsF#o(SsK-Iwyn`AH0O$njM zJ_={$NtmkBt_#^vN#|~oa>uD`uthh!_1+zysQJLTVRX~d5iBWP!6$u#-^Gi&C9`A$ z^26)l)DM5gU?uQHZD2eSyHYyUl+m>gejzv6X{@U&E`_d*iyatFw;67^ehx}-+I6E~ zPs+&lcgaf)XmEE3NZhr90>+QgqMRfT5aeSuqhaPK*hR%#Nh#sBNPiS=5PZ23B^iQOYAO-PQKd#}cQtev`hTYH=*ut z(s!187<7>rQ0LZ|L$TBS{azrHfj@k0^?T%ZZ}|GG3{w2tb@zX_@S};++09qJJ%A6_ z_hw#QbthXhAO>U}aRE^r5`4W`1qO@C`+RyGaZ%c>H%xCVV1}9S{YT0Ct2wjP&Cior z+SsRN@%iI8sD*yT;Of?8Q5_0ZR{3>g@|r@mxc|!gm=X+rTuC$ypQ`hLkSX7g19q=U z-7^Oll4YY_Q%ccHfd?9D2BTA5VQvQ^;t!*8It0?rW$JaX?WA9l<9S!2owac>?ft-O z=L*GbR68SosH9}WGg`Tkc&75jN7Le+{Gqj~o9E`4@B+Nok{Q&vx-6IjxI(jT@p-SU zTSzFSXWwp@VY=7KW7#EB^DC*EY+rw=byAf+{9X`=_TfK%RP{cd8PzOXSXFQh=!tlkr zxO^GbpSP&VfcszFo|5>cHKs*>5Ps2B)!{$+vV5YKv!!2vxu>V`SYw50~yF;2KmQYej=@d{pq(NA^yO-_|K}qQpq`N`7 zQ$l{1_wzh6?;r2XF$2tXu>*4+XC3kVaO+F;;i+@`ptf&~pgz6wju=>43;kT?(CE#o z4Fw8cNt@J&s#WnJfQT4o@ZS7J2nzWG5tAr34@{z-)BEK*RZsCn| zqAA$7!bxEj#qwkFC?NTin_Xt85{s`9X8&T2FH?Asc$OMzEKhok;@<}Wy~_Xuzz4`G z0U~MB9y0|1m2whwx`XUrDU%;x`rmge0{JI6;OKk5G&mJSDp@4Pp@GP%fMYvI@~LO~ z`kqE3n6;-RTQ{m8&|M^|_g58AY}F5Foy4)D>8y&oKmja+?ZZbPSi0KM!?9`g#Ghnw z7)&RJ8&jpWRyYD%>~L?1;(MvFg7zWN;LSv%A@L!EIYVPJN?MZOoVID&!W`7RSLLL$}##0x@Jn%-oe2d&O3#GQw>DaqT`qz0HITr{CY6^ zp}G8~S!pVp>J!;G^G1~YcQT5w)QXl;90BK`a`)t}ktR-EN#xF(ueC!L=HKXdIW+(J zf@y+LMFLWY+ley^ncd6W$qsV)T5kIQSvqxIgck8+vz2*U(`e$>{A-04E^0-^StiCxe%m(N zA?+f!#rvy!F8QCY&_~;5RjFi?`6kRx$J7I7Gyp2=oe^rY~Txpsn{llQDbP&Js?3F z&6yG)5;k9y;T8L*OW8>ky=atUy3$>Ux;W13k2oC8Quwi#T)e13pCS&U&fyiHxmttO zo-ZYK6_~uXONFQf#lz&xmn+l>I>c4{U!3J#_Luj!Gj1gkjZTz6x=il;2iV@(ofz&S zod(SPEVz0Z*VKyeM}O{`2FnETP@#(6mP{$m%%Tr|hlV+MnWbjejy0<3duHyMhUg?* z20CPCUiL2hp|{lY%`6}HespZF|83V&nJxg9#NK#0jO0Je08eb70$X>CuFS&v%+tLs z3!UNLJrg*UK*s6z6h8`S;mR7k14cLq^goTIF)U0RsIq_#O%!QdA_H(?&F_saXsW~o zvYCtAK)L$YSaDzm9<2WB$OE^Nd~cd7nzNV1FD^U$F1G(fZWcTU`y4Na$)H@j25ff} zIr)bAK%K}N4Ro0RFB?7&BCEP(Z01y_@^t_{@9y%J z1sr4`RkANCqf09U6eKT{lvk)vG!;NSX;a@%qM&66sdbr^+hhJw1M$sTFh^9N)(G#h zO$sk~aXUm&h{IzBA1=~5m%p@??hEOq?fLX|%qnpIM7!zA6=qwZ`p&Y?M6|p0XVR^t zmHGI)Faj<>wp^bV+V6fttijKT->=S6K>`O&djaa#yQPTV>L1Zu&U@#q3HY!{s-^$BH6$9 zhh$6q?ISDw*2X^!GQQEFHFFXzR6*uS1~bf%KN#YG2ZmEP#8bYwZ*(vkecHXL9s-gb zi9l{_=K_ww%$2;(n~Yx}S8dY)Xb1J2Yn3(JD*(rzUF}3=AqOOAq(y;5v^7mP<`UzB~SegHs<-p*dh);Wv17tk_LkUd7Mbg4u zDg3#239INLcmg|ph@~X(VC2s=HrP(aAuYm^?VDwcMzit}mc$J@{Hs8(0)#W~@UNpt`y}f+gTEd|Rt*)X<&x9*9cBG;^$+$fiYgTMB$qU{EmT(d%wCG& zE%Ieg-v$t|>4!o&!`tTh_$-l>E?2jx2VU~jkm?!ts4|AEeLkmsFC~l@Qem6ga<0BO z{ra$9OF>6ypSxsHiEsLN35Kqf;bpIlOB<|T0+r9TPmABJ1MWm{!aPE#SqH3;$e(@)%EaW^N!$spXt>PbX7Jw zW{D6esP|vnX^rvPUPzD&reK_9;4nv=s7u{#{@3e51<~Y=cvHoi=ihMx8Nid3#!XOh zf6^E!12P?jRavPmb!aINtCiDCjnqdz4poV>tYuqWQut}v))Yp7XF~pH1?DEWs@V9&L~m#8X3FII!buKux+Hl9B)Li#y`b1 z_DYj!J^>y7B#30p5`t!8F$sNmezTb*nHFx)VhOIwif<@zikSTw|;pg}B$FUuKppfP8Yc11DH7D))4j@Ux6S;8b7 z0UrVMfFs(rO+OVLe~^zOV`p5sW!JQHi?i#`?`Gw$#gK##o(*uxrDzX?slRl=9B-wI z6lTg2d8KSF8%hR0>H35%W_c>UT3s==S%3S%Xl=cH-qIUyr)+J2E`N_kZW=e{zM^-& zyaF4KHY^MLz-p*Cg^od-p`}QP(eqL^Mb=Fzt2g?!D*%EmALU& zW&p|~tk2gVuHWRVaQt<)(NJp&R^PNGS?{kK+x284DYxhHHcj-z0cqE_UPMfJgA-Mn}zG5Oip@!+|zLG=jfJ%t*u9Q`t(C-`s5SdTqQZ7UmID&`qAIOETyT9!AHLs=*`74874jU%x#^%C~2K zFbjIjH}CsHre50xh?$?s8MUPc(X^hur0XRCI-xPXNWOUb^45)lRUat1((KExUfE9< zn3XdiNKLtrS*(LWDJf@J&vEcpG|CUTHK{D!C2U;NY@=hojfCPfiPv}4aT6LwIS4it zJ3vb&^IWYZR=Q$KW7Hp|F%QEv*w!>f$8x;iO>vchk19+C}?Pw-~LJX-k_?U=P$GI#$s)yI-beSUKe%WVR` z{AwWMBNRnwk)?5Y+5qBK2SEzwy1lPNR_<~TAIz#q)oBzT#Xs`v_VC8?w#fwwp(f?@ z0pP@HCmN)h?#b*&TQPnbTHfX`U)f*y2{NR_y^tJMxlEmzs1dE1UO`<+kS{}?0gdfj z!KZ^Yh!MGZ=^b;**TPH{-n@!MWvPj?;uDD~otMnOWG~zD08d1w?4MTFerJA=7sS2( z@YNUl_VofUtyOt>;ATfY&StIaB6DLO_SfY)8PMX<6l8pY`GBR|$-}Wf+uL43~byl@WcJ?KL)4%j$pfTdxfrzue*m(A-*VD-4?Y{(fQY*KKTCV@m20$@C zD+aFHf{{uCib+hWBee4p@#x>T5Qt9W?R5lbUh79*3Ku)!^Su+NLM9YMPik>?-*lJB z0dF!?e{!yW)_sb%ID)gQ`fGGloCKhYn>eW%=k1i>HSv4xxd{BcRXB}PB9>UrViv+F z(|5nY;Ha79W7Su1)O4{i*dN|_X1f~V4pcU15F9;=hZZ(A*i72)9AJwS;t8Br$^N~i`xA&ErlL$J0)X#7n;|x3*C&PR`>D5pJ^2zS8GRFbb zF0_>SV+8+B7y#1cutp&lsqCKe?AD{qF|7N${`+W@ZvQB&3SL0g9eyRYx$oWY2D=oi z*pBDvLDnn=FE)rQOvnEedx%7W-bRy8=Ok2(bR{31_MKR;Em`0a{o0}4gT-D^n~6@; zv#pe<8{XPY9^a0-&1e6uCb`%t8nCJvQS0r$y0dTDWeRhhOlt1IjxS9#wiAn;bU*jJ z{-j(xlZ>P2A1B-T2?O(18~IdqwX!X1e^t4#)&9l$AG#U=Z4)JsP6WIqF4GDlsE|UQ zH(HUNRzAxg-|Q;{|Sgd~wzL4YG$0wnjzNKbDyF8pl)b}HGi3iqmzYXksq%v1Ki%P77_h0Shp+Vdy ztXVM2ojzq|k2fLN%`xR7Fp~vc%=p9zRlWr<(MPH$Exz>sv{{ng0>O%US0(;tCP%Mg zJe}^>x(HVIfFS4KXZ&Y%$vrP1&9ykmJd^Ra0qJep;FRTy>Ixoo32f2dZ8Djm>Gz~| zGf3?f0X)+<(Z#9c$Q{uilkNs9Dtg7XzUdYV8*hgFndxCU%)%1Rzgv>qOPonj^);*C zV|>k=no7J4GO-Od;ulY3%M$ic=TCeC2Kw!%J`Wa;t+i;YPH`1Rxo@0>^pogq4Tb8C zEuL3ZYTdz?iqD9@%l}OgBhh>HF6Nc(V}3nzSoAMCycm}r-R{dU2ZFWq4tqVH6GTGzvl^+xdOaPz_F$@4r>*18G#3;-){iN zI{7{Xv}Nt^*w~m_w8WrHqPC=oB`Ra1hzGo943CDB4Ffx3XuKxAydpj`5Ige92%!>B zAN_sw0gx&)_cjJp7Lm7qLgS{4`gy?wL<*Yst+?t;nzBR-7yE0A8xYNLzxfmYU_jne z89p(jzJY|l)p~Z4b{*jjKRJ|k?_kOGg75a&ub?eeKpGQy0M005(!IkJda3ZrtNa6` zPucj671*&>SrEx4Zha!DGQ5hXk_ut0YhC!}T(d%JFad$-W+c6PJ+Uy7iXAGmoHMOCHhX=+-8n$txiw6_!wQ#TpYCGEpa zH%X!%Mk9(#W)^$)9tZOY+Z~5x1??m6Q2)8&7@_ku-^$)&9!OfAr%;sOFIB1l3gn@mpq@UB3ry=E9Z(|TuNJoNxAb6k-xsK_^|$PcK3#FfItl@ukIV>IUn=y);- z7+5~#@|DWcdf+Z~x{rKXBea&2J^*Cco*1`6>@ z-sK|Lha_FnY?4F3M#dsT%yU#LlhX}WbZC`}j`kVNgo~p_l^sgGz9rwNr>!|lTi)@8 zeZ|TuVNNVF5t|a6ajz8gniX!p^=_(LvF9ukj*g27i%5bo_+0(X8p3)lo!fR1429pa zc>YVXE;KnB?(r*HVu{EaOKYg&nTv;BEg2U*=)MKdE=e^s|P zVkQ&JjzPm-s)YA1YBW<@Ev@ljrA&{+K19@Fo}YeDz*kZ(WKwOgEo2&L;ETss?0A_K zNx^RrRgkG_{;B$UELU*`i){u$xFQx1Yo_{uZiBNq^Z%+>$vy*)7p0Fv$(d4tJZuF%8A`0@bB zJD}0^)S3f1fgqI__!Y|m{`MLMDDr_g;aHV|+K?lO7gDB2>A?=*j64+@CwF zjTZCqLBl9bhq@wfe{`!Tj5+`B+CTRgVeXF5?xe-bQdCWLG|6(3a!ic7C+~kT>mIYq zq?#JGcg-s(x9iH4;q-G9e{a<$D0r+g*6DE*$aZ;!jow=Oe%3QqZr=l7^1?p1NW; zKJcV+${Mm&<5V8*AUw%JBHTN<}ED7K+7`*CGUrMOaCWVDi zsp8z~Ot&LCH%y;wTc8r`MoHAC;)BXXds9{ahc9u&1a0L-I%|n%u!(58?inwO#C$f5-r;j2edRP56H+4B*;nA@e7{q3OBCW1g!Bn*Q)^)oB{KF(Lri`*o% zCHJ*Dg&_^x{eWT4&zv>%TXYG3DSJ7dJ0RIDEC8EO)ByTo;sTk=53(D{1;5!{?BEsJ zpv}Q}1j58w6K$^-Cm#LHt#uFbAJw^#)cYBz!H6M#EO1!8gJ>rf--0^fH_z|PdkGW2 zS1A=ETQg;+7JhQ3pnT{RjA^2uk!;4VP*=F2E4M4s(S}0omr`az=qMX4xM6PfI8|wKT3Td`Oy%L}#0bX-hUt^m>0{^ihRyv< z|8etGeOa)gD*bL}FUhA&==gaUiRqn(lvW$Ag&tHAJ5$ROsm$sgWkO%%VL|f`Jkz@taKrH-&F!p{|$+Xq%=ZoN~N~Rxeu8mK*;v zM=(OqD9!EBMkP6*OZ}X@dRaVXC*%=>%-4JR?Npprw84}5w5u_9Iie9~>v6*PlNHNF zYUh+t>!tsfh0$*J%#)}@1t4)rez1xd&^fiknFL`p^Od`fGm{Cr8%$)Cq%b zCmal`GyK0SJp`DTmUssTF34*9f@y8%7Ec$i7T1jg$*Vp|f#y&&WvrH#6yLaD>yYyq z-KuM^NOre3;U_AifRZP!GUjT*=8yYBLlH*!)XSYbVlHDEQSTI<9v$4ur<;+0A0k#`@e2-PU;uua5kNg z`-R^j{_W>QVGY1z9_-6pt$@u+yy@~YfMDA)ExWWFyqrLGu93-Mk$23}6n#A*%#NWG zo+gLVpQ#LoJ7~x;#M9i0w*fpnm%;b}2>>ab9!$j#G~6fC@dHeBS$~H~*VQ<1@ZIwM zr6KMqTm$!ZDRbi2=f&0cZD{h%M_292(_F?TcV(dddo%tB-Ux`W9mKN%me82c%6-^B zuSgQ{X=Knwk#PPAB1n*EyMK|A<9OsZE>cd}RNg9BO=!qY2>I2-nPN`=%esp3S~Iy{ zALuwsgy|6bt$D<+RX`q?xbrsXQK9Zrxd2z21pva)k`Odl&ABFBMlF-M-9`Hsyc+kG zr|NCjw5?q9QW?Z*xz@a`rJ!^m+mipP&fHW1QCM<{Qy+lYGe#)uj@Nuvvww>GlL#;g zjYj%$riPlhT!&UATg8L-OkFnTC+J|@#-e#40H5xk=CVQ-5TpZw+aZqd2M|iFahmY< zWZ2BnAVp&F5ug&Z=ofRD8!roi+O z?vCuLXJmDt^*qGlaoBxFr-IQ_kV0(oPBzskCBmY@$h zK(DO|Kp$|(%=9RTuw##`08i8nNb1tM99pZ@sJI({EOWik?|U-7d8#}G8}s(-^_wUKS1#fp33%cr+4rfVJBg9U21Ib!Y% zVxGTsT=u)a2ZI4^AwaUU0ftbW@h5tZp@@J$k;Dp;CP=9Cezpdq+h#|l+i@z*l;vU& z45~|j(O;xfZEh;!YOVsR2&P|N=!ddqsy!=qihZ5BL|M{KsX&Fl&*Ti4L82n)`8g=x z=*ZqmU%}nhw9>GNFr2BClBvQ_!vbbXr7-($jsk)|vu0ITF7@*5_?}sXso>BzwAoJg zG*oDXs6}56Oe+lZ{qg(8jfX>{{Ddp0uShm84k0Wac$p|Bi~Bjv<4uGjre?wzD#;?RT_3@-q-d8H2;&1y~u1>4-3DV#YD@uGhO(H_ux6m(OJ0rO_cn8GJY4!at!z8s58D2V0Gl;S)k} zM9oQIe8M`qoAP2^r2aYT`!-9Nk#WrCOIi!AQNos4W$hKc-Uu~9!$-ThBCMs*O}!av zp5>7Pp~|G3rRH7pJujbk>sLdBL0C59ZpfNy;D~5HJ6UYor4-bjW()?e*71uF)f$WF1+1L4qkbPm(wpCosUKHI_9sdwg%OuOfZ*Pl5B~r0s z(Ltj&DfBFT#*5Jv+h~_fQPjgubS6&P6|o!<*X27BBtiXBKvkA-^|U*D=}irGfcD6= zX3DpX8Gc=zYouL;;?#2;D0AZY2v%9e2!j>E!0OpZGs1aK)PmB}8P79bg1jA5a-^F+ z`bTno2$`m${}JP1WNJ;%`m@+$XB3o)P~mVA6+IMHjT5G0CGKdNs+pd_EGJ}es1b7o z&QFXJAh8HR8XFYAC4PZ_HP@Wa5;H5Jr~x^vBn@(QeK|O*^)Vq(`vKT_seS#a~%bc zY?6*{Kt9c^wT#U{ojRCcdIo@kNrf4ZG9J8APfUbN_Z8S}hI}+qq;|iSQH7M2?Zn7} zUuD}im%E>7w&sP3vYlSI+uV66OD5^FJ}E(wIj;M}p~zNC%dx-PiOnZ~4A&G0 z`UeKOpC5=7+*9IONbBJC`NApE{r8NOL?$7Qv_Dc=!!dK9U=wTdws-1UMQEjEt#_KQ&!gX-LbsRPceyVcFFuHosi!FKOk)AYZKA(IkzG5IKMeXAhcC|l-QGUuZE_RB`1Lc4qxUjDMS zx`N3Pq+R-*38md6GY-29jO2Zi4tZqLgW>fN;-Zf_$nmxU;W%7j>QhC<@fey{zb`Wk zP1f!2(LSsO+yc;S=>{2CqE9qj%G5w98-+25OU>apcy0`F*4EZOMfiFU(0qSt1Uw-D zNMVhl&3irvIMh7{ki()|&gNU9T2DS}*^tkeesm`_B7_REx<6E>p3mnSO8By{uq2(I zpTFoF0S?t87FY#(&FTkcMoPL`e=I7r9`m<2M(euuppaK7CRm|EHWQGxvY`ntgw@)y!LOr)0e-szX6?(eMlUpFz~%|Od^YKw#%W| zJK-M0bim`h>`>>B8{xbR|(a>6fN2a?J)KTm1HH92iio-T>mX;x+n| z!7oxvuV4B%e+*`|n1DN6q&npLY&*MK63|YC)Bo1l+^R9K$&hC4=s8PLO>tlHtM|EVMm!e0Xaelk9L{3-y{AU$@O zKNa^P*HO?UqQ;=tLYs6yUhd$+wvNHq+dHvwEC(sLDO4Pk4k0~1kFN&!8EP5Zt$s9{ zY<0cZhJK(sN9VyX`z#_S2U3IIq zc;27$>#rKZ%8vz+v!n&iapnu0leM7WG71g9)hAjQYi5T2R@MFm@yLpp`BMFM?f{W5 zlSedNlk}0I2;}^yID$Uo!pnRUSwXQ$cXdkw;QnLX(}J^P{G-8aB!Sp4PDd80-&ytt zucBwMEw;aLH=xQ&3^Pc#qNP_tbP(>b-eIn@!Yrs|4^=^IYIqKP%vH)!wEeU;6ZxvD@^ zZ-U({xb)DV(-KO4Kepom%l{Ig#WWF=sa}La;LlM}AD;S+FJ%6MD&}4=QRe5t*G!T4 z$c(NG$?A|!M#lMDoKE*|*7VTO4OA_x_aSt+%3SEV^=&JPuxwM_ulbdR2hIY}P-j|g z)wI!&=~2{ChrZdlZPbGf(1CC`+98{kDyihCLe{}c`iz}BX&Rz_yda zJl-LpI3lHZLPuuTY^>G`KNl4~b%S9W1TDN@t|I?(V#lHPwZtJhF8&2_P|6@Ek8@Ji z8<&jr>xcQ>-gGu3Em}2fjH62wl17Z1M?1YbMxg1`Y)K_3Cyr>I?=|K_Hj%-cqmBul zPM1v|N?9`>NWPp`thXy&iTFgc(Q*(jW*z^7NttTJ(e~B62E9cE-@F*nRlPwv6$r3K z@bJD1N$^ks$&S?fkJ#1k%@0a{r9!+|c@GSl;F)X~#u=@aEXqFuotfQvLru{Zmb~a- z2(X0~$Km{M*fI%X2%4b?rG9I&PsU&7Pbt9!{4pP^9$hP)4$F<_94V1Q$OmYgph29n zvkC8{QIJE}5X@|?^$qDNnG+xd`nLK(f--(}OXoqC*;-m*kRM`7!m~x>`WrzdmnFTg z3Gov7##Rs0e)V{hO3Ud{8#MWmenuPZ_qZSPP1?+gXMPiRzB2no9IKp=u{f5xe~>u& zsP(r6J(xg+6pFkSxXP>S@gkfX^Lcf96n{TTSMx)HXb>c;)_1>g^GM*;2N(la)R@>| zG=U<>@9yua+}&P?$iUI3sEhi|q^A!rmk%F=K4?ol=09dnL&78V3^~8EkmjNBUq9KbSqjkdJ$<>x-tqUVY9vp<{`BVER;=^Ud`IAunumSX4>rqkRg8NN z*ZX$!IBC51YNI{`Tt=EZ9doXv;bT+~<&PWCu5dV3LA0M-B3UrINOf7TFBQJ?KuqV5#NTmE|!5Q{^p3j6$Nq ztFBKQZ^uM4knOgEYx&Cv^}#r^S5HB9-hIwS_DB@?Bk5 zU6>;W3J_N{9gtuI;>ip@L3j28HkAsk2|{-F0j+;ormPhL1af>F_(vzIWkKew+xV2C*K zblRF_Tshne{wbxs#}I+fxswd-zmOqOsGBXlvV9WeTV zQ|X#NjgQ!8W0XAN@3gv=iza@GJpFK9`MSnc^W1eyCH*vn7X|Pw3b$`I)1*7c&-Zv} zI8Rz{$2R*9Yn;3HqDpf%ize|KlymFW*$_X`=EJwF^8}FOj?ktsV>O0S=wIv}0`C}Q z`^~_fk-pJ=#7V~$QpQM!F7l1brvM)bRfWd6Kxma=mWpn zUNKp%SSq(yBWtEeW^%yJvcmGQ@HAXnXOy8sxj+7{7odRO%sDVT zXnLiz(LLARhvagwq0BjfG?N*VkQOvVR-j7obF-g$V*2F#u2MJaGEGzOhlN<; z+xnP3ywyf^kV@CX7yckUi$#h}EDV&N=2p_=?^+@oN?~~TY0=HS0^X9Z$@%f0@pf2K z_9s6eq+?Io@(EfiC2)jSIedh{$hv^jljUp70&Xk5*_x#zg)!P<30kSUKUJnK%4KnO zj{42mM)(Na;mDunn3VT6wLN98%L@RLM@ta1? zboT3oh(+Tw$;}ht_RD7HL(RU&{+?wIIXO-t0Zhl3!hgmzRegxo zGprkT`1Arnq(i#k6dxiJD+rN&GV6Ic=!x>Y*_t6v1jQ}*)|F}pWgu$8LG9ouH#XKZ zcedt4O-ckcueVg^Ub{g~vVOZe&d<3p?iLsLz>&+C2{ho@BV{qR09 zgv1V7WTmMJ+J6>k%-;vT9u*Nmi%e{M?>Aod+0eEh?u2;0^R(4>TYCMWMj(nVy2EEo z{}qMZ8HK3l)#}Z0k0ovK4|W06uvGsuAAJrKhlrp2K^Bjj%>!U%sCReyVshi)6u8zgP?)1yRnlGn9#XZP*_G z6Kdj&R~RI#$SwJO>pFllC$ySY>!PnP(^zH2=s&YavER>Zyuf*p`wnmGmoi;QJ-_Xb zciq8{;B-;tAjkK}OP#2S?6!I`jJ5@)b}$rqp)hr+qj~1fxp4#zf57wC(9ez^06j_y zmt$m)e-_&B&LM4*#26-+WR1i3@5FXDgrF}kX0F_`9d9~rfdo8xTzhY}&kJ zhyX{SZ;j1_=p;R~p#;$e|NPZUDTdN%a^xx~o;4_$Ot&Wcqaz^r@2V`Q;3O5k7>BPk)`esLAw!2t{ zEZXDyY=k~X40klh!)yN0g$KD;5`iZcNw6s?Wol_V5OkVJvHRL`X>xl|hiK5EiJD#) zRM2~3M<(DsRT9&;5l;Jt%6&Q^)*?=_{|QSI**O%OF*qeviFZQ47#AF z&gVbU5T=O_(oa9=;e$i)QcvQzzn}~SPvYCO<-b$3-ruXY`wu%!jQnO&UXjs148F^@ z3#4TcdGaB<$fwFhsfvm&;V6!`&HG}&_ICZ^2HXVahgC= z2mU?(L+&s1r6wmf|BpXsbU?=er!ir4h?6Uvg3Ov~*#&jiWCaTc_nh=lB6f#A-1(pM zRY(X1+3LIS5e~lb^wG|NL>zo+nKLQ`h%M>q1u$^DBob<@2lcmpOsz4groGKjjhfK? zsii&@_u_{n8x00yf+D|HJRZ&tK;y#5%|>d7CmNg|MF9halKMSwnZq)xHNOLmvw#OYwihVfx0p+I1pyy4|n zxo0o9Aw`WFI}U~k^EF`5VbY+n<(!7H)SOzp_JLfOFZdOE5aP#Zc?g2cF<$DGME6k0&iZy5_OQM3W*iuQ+ zs)2@xp6mCS3ol+aw8m<%A(+hP`FPIW|8nTzWG(HT*RU0#8L&3u(Chp{w>U%}pz^ak zPs*z0dFOi)kxJK)xc77J=39M5$Df#5vGT4aH1n8(WlHlgJo&lJ_eH(A4fXCVFT_H# z-Z?y$FV|z5TL^6^Mp|j99QCh|dQD>O16c6&4{fn5uN-nHBof%ulFnlxWD9DHIgY)^ zpk72Qiidn+bar3~lC`1I6FwE~$0Ec;T)Hi=8_J??(^Jl5kL3 z@ZcwM-#Cps_{+2OO)}&=K$N{?c#IX?HUb;i+CHPi7b{EOj$s!@jvjcz^EMdYgN&+V zvg^k8TuGRNdP_rSHzL_MxIy00ekvQU6o>v}Jzay0XlX~SRZ^7Kg%O+B#6Nxs_-(`hV@rnjiIqcno zgA9xj@hekAqR_-aXkHVY3nI|(*PN}2|G^16R zS&+^6=STUGrwv@IhM@Vt^_JdT@HVh>Z z{Z?&R-Z`MpFKsnWDSskY+}3su5rY^L_biKnypkS@JnyOb!}G&d6XS>vQQpSUS{4{F z{cA-nD6;_fINgo}d8pu?5NQ()WuT~ahrSXcgr|^$67`p&#_((&$>5QUFiJ;USzb9F zb}NacP2JOryH{b0KIOr(q`pdEBq`7JeW^jVBp7^|Q(>8QA)XAzr*SJ?o2V=!Owf`I zNWV#?t0T8u#fxsoU))-pn~R9v)bH3h>Pee8EZ23_yN~?dtUFE-1Ub7sIuDSru<7dn z8q*JRXzI?|Q8Zj0*suN$@;CTeP%=cUIt$LujU*oyE5p;N66d6z_Eu2&G_MX{uYP#( z=e%|N#{184DKSH2uAlv!tx=(-NaKe>N&}&G|KTb-uYi?hqwkM=eQ6zDD(5q<<1R9j zrj%ZB)goYg;lP3epSl+8UxB%adG#JoO{k9g{9!}LK`1PK zb#_Y=?><&Z9qI8=csTg|Kz@yRD11VO+!Tk{8iv@4>-VFk;8&afp}moZ(IExHLm`6# zHUcxq9u{f}XF+jWIj=WE1lAA0D7s6Ony5V5(hew6Zt1!+7h>KufC)_JTtYi;)UfU9 zOz^qzx$Em;ydZ__5dzn(X6>xgdg&#z#`bvSV$BqJ;dV7Uh5K2=ung}~yr+~$Q zWg@-MFcDqu;{YzUX?w9=v(s3NS#Q%6aRS7&WBKpVXr}q`QS?LhOywKmFFVh>b19BZ zIF#AE;^yEe2$3H-e2*hWjUh`RnJyxE*{-H?l@bGfk^#AE2GfPRFcG}7a8V9?1g;SH z07QzQr97s!U}b>}ol+nO0meum)4h{sd~`RayXF=mx8{EsXYbVZ*Wgxs^;rv#T&3KU zis6XkhV}x>LReo6+;%xT(#PZPpO*yba8f4g<<^lCp>ZG#c_Z!iywbP&HV;n){=^7% zo1<GJX%r6}6c4WZKx3t@NP2bmm40(&o08CN{3JA-bT6_l zWDQKeNP3(kc|^bnCH{r1HH>SU=n&O#?HV8ittE_ZlBVX$Ay3_Ypa$xUtRot%vrppF zWRMQf(HqUx)3n%rCiAssowKK&z->`HJ}7Ga)Z4BPFEJau=WTXgoF}nIR)G=y(Cd<; zkCvk&xKZ?pj=nrg1`5+IwhrFO$VmSL4e!OHdDhdTn4iD0m(9{a_3i%?FKP$U>={g` zP4X3P;qc%pJ2f`PGCA*~lsgc^z@h52pHU%w8^e^qOQJByzu4iIMY&F~GA0+IxBKyo z-pW`KS&|wTV|Ipp$~J>gG0_ZJKeUR0Kp~)bz-wZ&q!K(?E2e1t69{MX(TnM9tzN3a z@4w=$75sCId>3VnMDzd)3C6CN_g5FLeFCo~f8Wj6X8LXX?d+)hJW7O``^nn#r$wjl zU^^c0$yY*5QDFy>sIsBhC6%3iRyhixd|6dg_diQ%lcSj?nme!EPX+Jl{aXrjTB;32 zNay@dE6i^T@mQb?*d;NSfBLjvmnfMCjaH)5Pr9fNFPaj*gwJr*G|Fv71f)lRMumXv}b=y6&}lDcaOQ0IOQ(*yny zlZt?tges&aJRQA*Oen+mtGMce7#O$!{WHLwfcx&d~gRU@sW6p>D=3b zLu9~v4p>eC_UwOCY8Q>H_cX0zh%}{4F)Mhy)-_k(;FR8RodrCsmf6wFIpWXfxdAsbf zbR7HgHiN`>D--$`70!Z-vdrUY<&%;d(xv50ENRIRldWSXwi~ia#oJ z$1oeB@-Ul1FrQLteT%eY7f^yItS)+gzV+Qw z+8GPm;3$w4Oi*x}%`kE9MXgpexmn(%%qma~68y3hLBNhqq1U-Lj>M2i!qxp^i6fF} zq=GFatu~YGO;xUY{zFil?w3nkwJvNo5x88hL`PfX-|?>`)Q&isex+8x(*-S&-rPzs zo<6(;;T>m~L$#SN(8Xb`SHokgHPky;D_**_Yk zx=%I}D2-n^o(75}loQb2n;Ot`6CGw2q*h{KHm6=15^KnOUm1Q3Fj$BD!;iPszkUfp zCTSc2Hz1F)Ho{`SPvZH*TSIq?SHCdh${*M~a`xGJnxlf^j=F8Au4u{kRXrU!bS20N z39$}Z3TTD`Ywmc`Q5@F(>BKR9mb<@VDDo77VbLP0T|5ev^+O~dH#J%|@|NyENQ=IL zF#beIO**~uxtojEitKP0I8*muFx#@7N0{Q~!=m}abY+mT|Gv&f&b3b&n{xTJ0~3W& zD)Ud*^kBBvCOQK%hg_hT4NBM)2Qqv8`iL!HQpN$n0m(f z{_<}EPh%7gIEfo6xpVwCmsc`Y;#0r_T9{p(jz(w%f`GgELb}HK_0xYTld9$uJE_q1 zuj!Iq`;xwL?nvwW(@fNH?aQL&A1?ZiB|>zP_=?h(?=&<~?j(F;!QBshX0aY)E%$o@ ziq`x*ds-a&$P8HgGY-aia~1}*?NpP!i`||%^4|KmUl^#-6<=F$(U`TvXA&@f;OcI0 zJ4VZ7`C%Wuzotodkj`V}icE|UlgoD%h@R)amzk?XZ%PdLyx`LKD|lo1X4R9F=Q>QQ zf&S`!oI1l-_0n~M`Iq_oza+9hQHAr%)5=nZ6h%$GL`}EAB=9@G^0O3QV+kUB`Q1W0I#>BneiH zIVwg^%mKWc$cq5{ND31$!Z-I~@~@Qz-dAf|R})spY|njV3Pf|Bq^i6RQ0xmvXX$dqzboX=V8fEh2Sq;uBdMC%$%w#L7*ZO+( z%I_Fw!tlO>Z=-p8`$*_&##*vY7O+?<=dK1L6!X{fkuE>wl`i7W(u>*bx1{IYjur$k z#ZSE!Mhz1oCOtQ!hibXopPTFT)6}XZ5R^;{I|wEZxbRi!&nrBxBK-U73f_d1}Ob z+ooLH?l7>P_6A{dlgY~*R0h0n7d2#3N)2oncHm^z`8c4#L1&(lfBbREh2up!2s=Nv z$6c$Lco*7NU(&ifu=a*B+6u|42%r8PQd}4O_bnx+2|)6R*ac<^wmsL1M1){_af_Gu&ukmN;uy=4?LP41}1fxn`p5jnVMsh>NpZ zR@MQZ?%ujCFrIR^jaLTnZ{sRnN=tcbPA zdD>}G9?pUo6cZV}wm$UHIKJZU`de{V-s86DlSt+NV>%q8{)h$?vFIMU7ktb8h!^jWp34EbMb) z_p@!>#^w8{$4Zp7>-gt@0{86@;7jyPA}f|nCk*Jz;(6UPW7@8kmKEQILgoTV;7mJj z!qBkD)8E%wuo1$!m7+AxCbA~62#MUEkCT)Q*A(62%PQVsX-9DT5GJE1FA2X(-MRZK z?o|OKUKJg$mB-;DS?KMj?HYqYysl<-N#XGi#~;!^GjB_|ohgX-9grgT`HNuh=k$Cl zF)THJw64zaAZ5_aA}$DRXRGW^1h_m01^dZO?z@3={=@G5@zhr70@ax`J)& z6}WLu2)r^ zL^$MCCN-%nJlZsVQ1FM!@GI7(CCNJuWSHICxI*Uqut9=F=r@`Vh+UuC~^nV0lCzK4cs; zjf*;aBP`KA&Z#_t6??t#8i#X=pQ54v!cbzPr@zBVmuZBQ;j1{JTY88A(&W&!tkaoeA1XIxjoHUnFGT|@= zY5R|kh_EjI8(jC6fH^T??lmok{|dhi0RmTuBgX&e%76|>;XR4pp&CC>RrLW5F{4q! zc;D_^fEQ*TgC!^~?uCm|*ixz{DQXCh&yh8F)%UhI_S`P~*!%ttlKwZjLw5788^hxj zrb;QV{*fN@)O`zc;Vi@xB~K4brBn7B zKSY+)J5J4M-3DSp97WM37TSxs56!(WX{l_;d@I?C29x1lkRktnO-hCRtR>Le0}X3a zDFKIree^lBj)C{Sv*GMGv75}L4_-|;_1xTw&?704rwH7xR@-?2z9kSg*Zg5)pttK; ztJLsLOsGSN2%z#}v|D^U)e5@c>5&FM76~VC4ay46Hp#{#cFKrSF=(P_^Qo10yU^X* z@>2CYK|9|y${nU=s6|8DDAv^c!%msm{7!WvzITJJ933-klxNZgr@BbU2`k-RFW70oG4w+g);_T2ZN5BAE| zqewJlD0=+yIpw|Lpv-SnIexiNUxFJPhb6cvj0PLTD3`Xph*WxBNV6H_%dBLSex5nN(hXbBS+e5t**;yI-HsQaIhS0&8T>MdcLpwLg+6WC; z?Z=K>MaM<70WW4KmN*ey7^*9w=mw{)(NZ|sNr&0?5$6UIsr1_Il5fms3vbUBHX|}P zK^w) zSM8&3^c`v2^$OolH~GkiQWvg3bO<+Nl;{^ybbiSHknV?02=GZb$Yp5gduqAxE6<~< zy;dP^FHR^mCM7wQbXpR>xh^D+Y-m(frq?y%S{^Ka&q9&Gr_*on8h>?BQSERUO8Mz* zJ^yt_5f(SqN%u1>2@|v9Eav4+x?#!j@ofdM>M8kJ8YBmm#XFjXqPLfanKN6P+OHcC z;M^kuQ6mgr^IS{H>O8g^V!yB`vl37c)bYJB0ebe2@$xlP{NLQ_`h%bY}c0j zpAg%_4(DAtY}I}$xFQ6SjC%H;2x(g7x-ig%@I{$M`42AzS@)-}RyLwA`3uLo(V+F&qEswnq=E$9q@)eqK!w1~^aTSk< zm0Zrsg_1S!a~29pY=~ERG(3}#<;sy;Y2B6IyEB?&A44g#kS+AgJ~>W%=Oplv0FeGN zfRv_?;u~I}0MW1I(cvfq zGrfmT8C}Mp4f49JW-WYyg&e|hG49JXbekzGCiye2rcsI+n%u$>CicuXrh39kWZq=F z3-wFlAG;I@u}R(ezM2Yi(t*isA8J3)9frli^CeT+qHJnju+<+qfQ#n(1l6=BsE_w7 zS!t{ol%3KS?ky6Ha<-1-DE_Dqm>EJshGTF6StEbdkuFh5Vd)w4tKx1fu^@}*qI%=O z!&xX#9;&M*Q$@@M`4oiHQpvj$=pb&>DbpJ~EClvhn^}5ZLp{uhMD+E5`S^ILz`#>G0(38*=R9ZcU?IwOD2ym9@mQWGIx=NZsJw_dCF zaziYYDEKaKT1*ALUg&RF3Fr^N(S|l%JEEwKxDD|NlHHxY!T*UFnWk+47NDeD(3PwD zaZ8CW#Lc^Ql=BBHPGMVH17)lrM%GBm1%=*Z_NlRQBl9t_r(nYA0cKRPoG|BN8rVt} zN*6*ZtO|_>9d_xaNFEetA+a{5fbO_%^c>#%*y6mu>PQ;l@om9+%7T*p|;Gf)YIHI%nvOBz@fg%8sq>?LSW; z+#PmfA$+*CK0wK(1E{uOUV5}(Xq6-H)H9W^EMLY0bQr*`x~_w1Bl|H%OpRUM;$W;) z>+}%Z*kBJ>#{YHX*5=Sv=bD&BZ_mKJ4@Qnd*9Pv378vMlZ(R#FdTG}eWTIKbMTQnu zc$J+=FQ?G<3QW*7Tgvi^@qf^FTWu-$LobdZwu<*TVX(|+VKJ-U33yyPP`kd4;iBpY>1Z}7-WMCeb?G$QhM?6UW(uTL3> za(MXY2#l~=Ksrh#H)3=|a;V6@;^?xNi8b(O>7qQM5W$Te0vCbh@K#FGXb5!x&p@+b zcGmJ!oe>i_8ydbCvKKb0zF}SKlLFV<(go+G!xYkFri2P;mbE`7e+>C;wDOzjiM_Dg z2(;G>H4IZZ*?dmSWk(J}$QD}enz)6B7xB!H&+^E*t-GU$8o?v=6koA&eT= zufT9|>8Qz;Vc{tx^Oh7uh+qa1zt;=ELIQlQA@x2%;s#I__uXN^J3{HRISMa()Xs z>5rb2ePalS?_-qVhM;f%VQaam@7+*cT(+uTU?>LI&(4~VhT+pBj>JE)A-?x0#pNc_ zjRNc~tx_Mrhv#%TZ<7;oGVdF!CX-SMY7rolBil3!(>(CBO3&XqtFk1GkvMF z?^%@)LQJi6=qGHfAsW#={b`q64Nz&%bsbP-X;yQ}R@nQZzh$6qv1ZN2TDR})wR!Dh zU|YU%-6>0{3U0?6|FX+p=H2ckY(j$~GD!V=43R}P>P@wS0TEmcjcUTBwi)Zscgfm# zO;^-RttWanNTOWar?ti8hWCw}2?k(mGvUBx;1YB4IN8^zL(fqN4Xt*<<_{Pork3$! zYVeo(_N(L1?HayvU#8-m79dkCS_KHe&nH5kB#Kz*!2|MztxhUlKX3_g?7$%n2Sll;Qh)2bA|x!c_e4FTVI?z zFANRyXJIkEGj7`Qq`2CkF$NlIT3ZtXX?dpUh=zPyVD8B7LzlaD!ZGD_e0P1F^Z}*= za+grWj8Y~Hj|yn(LlVQ5Y0A^!?}@S|@M(ZQCQcE}xt!8H`fQpue^%NFF$Mn`A&3+| zRFfsE&Px6F&z=hO{>!y54?ChFY{R@W=@kgblCE74;PIjWrITO|=A`+hyt}p@=iH2G zNO4==W#Z*AdGFP8EaUm;W=%c+xDh2ax9jJ3Pp0E`NsE1d6p*&iK4L!onv{MOPvVj? zCh2Bpw=|cU8%h~%%_HV}3o#Z`smAV`cy5m?LS}y{@cRe5pL=|~Z!>u68hu7{ zrNd(LR}xA#lbnY|l&z&xqty3CLv07U#`kO6;KuMLC0?qA;P+}5LdhO|buYVXeR5rj zCP|M#i~NhFO#n^f4LkVqp46XbY@`@Z@#AjxdV z>x=3S>EY8S4wY(?F#p+!2LTtW>V@Qo^N18U!hR^`H+DtZHPYU457OttvW_md5_91H zY=1GWi=!BzrN`ddcC1+|W~9gdU94dj>+;;h^hDQw>=|d8a)`E?@4H&Q!`AT_5B!0xbH!rD>7e0v?+Qz8(WHbTA? zU1qdbSMM^;9se&``$^B@Vj+(>7+Fn%hSBa=6K9_+%vrsW>Nirf4jWa@1APpbNhHCJ zvxh$GTvY`wSc^JfH+!XPuTaP7fnw3X`O55)g=}Q+m~`h{8qyk`o`ql+MuzS_L&G{l zacS_ApARA|Y0K|m;HyJND#!=dCgj)udX5UDBcwa_unvX;#T$w0>l@K;|DNp@9iN=- zM%?>%_<`}NEF7W@2ka&SGCRJee9Ir&6RCFF+nIGZ0y%UxYg+<{E;qbq6+g;nU-iPX z3FBp!9G8XuU{ZyI#Sa>-6KWE9Y^pXVr;ktG=%?Qqo4Va-)_3*kLXM;gz3O2mI2n5O z2)bTfY<+`8Ra(@ulhciNC3Fib^2&35M0pr5q_A_8(SatWO zxpP6-tH0E&e2o9Lud_R{=G?wsWq_C*L!KEM0IN(s{C2RMtX zdph+wQ#tP3)RcybgUi8MQreVdM024W)Am;P&+~{A6&R+wYtre-QTx{nRQ^Uuyi?Uw z@1_K}A|0jjJ0?$51LMD#lI6%?dABfdTZPIgjYAx7!+ndn;V6&uy%zKRgG0nIeELE7 z?*a)7ym#p6F}TxO^ZE@o1Bjv!kbSdoP-e_QYQ)LuD*yQbe*xAFj<2~?hN<~Ge#ar< z(~fT+x3>O1v`p~m3d&;90VW+B8aI0m{zCL!i+vu`&%{eOj2R*%1_&=RRL^g^Z@rHk z9@!fSqj^eoNOu+)8(xn%D{9d6{XG~=Q|9pc#TLOLRipw&;x|!d_w3axA*E*T?cjDb z<$*T`$!7{y3Fm0mWVwW?V5E#&biW3G1R%C_{U0P$U|qtW@C(NQwGf3cJ+~c~J`(*f zPfpC>-&%LeJQYv`0ZslTNAMr0stygUb7m9;X9GbmIFPF>IvGhK*btjrJ!i59T9iGk zax74vtFkek0-$ovRIfKI+6`v|r{1Aiau0O|Ax`N9aIHawt92|kNTYW%98=-9B+FXJ zv0}V_+tz3ekd zHRDZ3!f-Nq3oE(l4S2c?vyNMk*1O8kYub7)DuPc{vspto=9CaC+#7&Vm~>vb^^16R z&QYWDmB#SW^TEK~A{9R4;AT##} zbnCg&xZ^-4vYzXuXN&3#Fga+r3CCvwZV}c-EvZ-V>Dz!!VeWap1m@s9Cll&oX!*=K z2y5XGe99mNme+#{`7& zP~7>x;YEWaUTz)o5WBe~TlZFuU58*CbAMll9peIVN`smsVe$29pp3}3`zMfcFhwt- zYjfCJd!ORuIGwB9j(=_=c9@Ab;~k7y{IU7{m4QLd`sx>e;Z3caK8UxH$0i&p*mOK0!18K{A1MdP16X;5_~ zdPC+uv^3EGNvILpJbDHOy84z|wwwFO5=14fq zVo17D|3}>-F~Y(2I(+^Xd)D#1y;|=`E=qK-i4XR;@u&1p{aPO*dOP0@lJ%!rFalm% z!rFrlDol)&^YHcFw${Ko_LeaXKkk(f-WR8)wX~ivDEi+_qX0&Moe_pFelSwTit!%= zgDEBBNl-X;)Cd7RB0%bk-ouoOr0<)&XVw%{UaQ}|uRG=@kcqH-_3#xhvx$(gEii$X>ZUSn=E#DbWB|MB{8NAl5=3D`;e+k1q~j25_q33|$5*g=P>F#(#0I@aPe zN730UOQileXuB7F<{@bO>gkztJ}m9V8*^o`*f7&1v+1#N`%H@iMiuXm4Y09t4SoEd zuQSO{jmX8}*B`R%Sgeh36GbE_thu&b2iv}st$cBv{m`%HjTD@T)P7R@a+bqwI z5>UgJnI?)j(qE*4hE=?9F<>q8utkywLr=do<| z7o)p7KkmLL6h)Xap^QiEW~_V8=*;zDF%NemSrMl!Tu80ToSa&R>y)MK`6C`A4prQ@ zs|ZM1u{Z^>ruztxUgE1ykH2w>4_?ufY(ndOfxRnJ&HG-9 zRhvd28n8&a`1BGzAEgQ6joOB(l7=>D!yO4AAZWbnZRHv6%GOSrZ$w5dt1}_7Qe9h5 zk@B^ABkCp9OX+P^BL4>CX+E<)PP4a-n#w~t9HS+BCZ*m!;3U3qM*@e4gcAzkSKr>a z#hmpsb*_S^%rB-bv4ufSWhzCdK;&ui%Q3h)imdXBp;*}@w#vLK)OxxS{RImG z*)tanWt=G2uGA)mx$$PaE^FxCKEocunY3ffn`$5q?{UfPwp> zr+mR3CUV)R2v0Oj92a8&M2mC_VPQN9B8h{;e9 z5>R+7ZlqKx#Ioajly8WqE<4~PZ%AG3Yw)*E9NfdicD}HRR$@vC`|`z?PXk%Y#}+=9 z{+C8@*lqi9OWS&}XdW7GSnH$cLTp^VVazc)k6v3^dTG;P;5@DGdpr#aD^YOzB;VrT z+zmlMABx{`AW+YK40q9MAi9|h#@PXF9SD%27e#g5TA(dzRW1})Bj%Per#VwyCG>%z zB^6Ey@XgqpvCDQ#+0fjEVJa3?<#!L%-i^)lr7!|q&ASOusIMr6Fh;>|y@8P;<63on zLyUsw6?#?EOLJC+rt+mw{^J*##(dPnYalHaaA}3wo}gUW?%T&enda3Rpp@oP)f7io z|56%$8qhikD@WPbutZ*bQ*5b8`yG-`5F6-j)pm=R3kmlY9#_x`5&$zf(L8Nwn0pj8 zmyl(ZmvP(ob+QNR)nLtl?1qn|cmcirg5vk|3e6xPV|)fmf7&bTrX+r_yh<_=iig^A zNL%x<){^`rnqkJ-9VnLhA;kCGf;tSyTgR&u!>T2z5_O=0FcMrWl}wU#0PMEte@X7F}Jn(0I5+eGy1gt{m&;e zvCPEKRIY8+ys>wm#}$v&z=BS!vDgoV-Y%kV2x?TGJcdb*-*#8dMdwjfskwUmO;ruf zv6;2wCUXWVZ&toYH-fp|d*L8v{_%9`Bo zBH0C+z`fwS8!-3nuCEUwkJu$`?i3TBuK%fSBixNPoV*UjJGnoGHiDN1pqkLQdfpip z*$Pcp3n(AUbW;3@fIxr3j&7nOc$}9j-#k}+O-tC)Q3=C@YHQEa(JzM>NX$6{_ozSm z4h!NUvyleOc<3*^a*>f%l;A61G?5xK-)F-CZ%5acqwO~6aL`|v@{pZ3&)89K2yXu# zw?P|$niDk5VyJejDP94FJ69l}3}~pWz|>YW_gh)tKU8+AMoni76cd(GHB8j}FFI4& zcUqf|rx_o(`T9|`JtGA)(Zwh3E8CJ(sPD%7012p}L>o`1@)FOcPRotnO3AXE3m@PX zf#DI!(Pr*-X9fy8z___1F!%RWO!t=kg59F;nB)`1f3Yv)<6?M1o_O|etq>^U!pdR| zrS8z&$8o;DEMW4jDIo3TJfaO**ZS<%6j5BZ&;n)*Q>m>43tTCLBq&0EQ=lngzk7=Nu zY4hY5P|rv$I(oW}1n7=HGeT?(| zHOKXYA7^Fj5IDS+e1a$Au(bri93Z(F=k}T_p&B}{{fiqcV97me)mHHL(!Y~W5Q)jA zIaFt2HJ~vER$y#O0Pb=(>hko5(+!B3QWn*g@|qX4c24P zF4B$;=wQEH;-z>MeRhY=T%+od;1$8d#^BTrB}7}T`q9BRMb6io4L6jB)!KfiSSA!i z;G&x90vk8q$-nSPUX<`CakO762>34si*o9Ewkpg@rL1@#vHE>MgadX<*9cdMG4S4Xr(XN#uPT}BEBK~ zNqcT=^6@=>pGv}{EjcKJC_*V2*NmCFbIDn{bFTz3t{S$59o)@@>;25nVyV~|Ch%fF zPNpih(+i2s(iIg>dfIm76LF3HS`!WNlVXEH7Vo)phG9#SX*#b$6@-~s%!grPBP}}? z(C^!>mR2sNf31Tg29r|G#+Z|kF|{to_uBHcnYF=hJo$wZN#r6TlW5`Q+K?NZf@oT} zNE|fG)O6`nT3F0J4j~ueX0&Tm0*!;jZ<0MqJaDdWSKQM)h_0QV7r{%ZNEqW6IwG{W^}`ZauA(B28Bxx=bX?LOofphGRFm z01D>q`JV^w+CVMZ);q!FD1qavqcDCBfFS`>?g>zBZ&)ZC(004>x?^w8fAC39s{d~7 zqY)gD!pe{h%MohtlW^UzD{HGB7YLBI?+}{vQRQqjWR5+VOt{m~uebBdn&y-#MbQ9Y z-e^?gWusPAck|6K=_t43@BXi~Fjo?x@Dhiic#+g#m6UG(N;)i}CXX6P{)NwewTkkT z!_LL~gA?R0ft;tt!fwc7dZO}2@4L^xj#Yanp6XVD`DqUG6zATOG!dZ;?eg;XY}!-m zi8a-=^zGj>`nuYc>vvmpBiPBbK)8me7s$7cZCck~4L-_+EV0F8O{xEaCUIbQ6u^=9 zCf`I9K@ve04c+`3f(?uwJm-`%xT`v6KR_xPv50!HY0-98jbG6&~)uid;3436I)y$IlPu# zmPP9#7rmn0Q92~}yvm6&%>X8m+C~A5K|$~m&(E#D!C4v!Y1AOu7z3fhzaJ>MFbz^M z7OiXkLz!4&LOhv;lI#>kGTY+p+%K|rSA`!0K*Ltf6vHc60AGg7x2^DJy@rs) z@3bW*(3k3@#$ovNJ^#kR<#z95*5nd(9|8=?eu3>prSLuGuc3{z$a+6Ege&7yGz?sB ztA1i8iOYrm$W*MbmlNp+0nCDAl4o2xS}?NKos-j&a;O$%qWFFK)u3YUO+H_}!8?Ff zC797v1XrAQt@mkiOvV{S3(ROukHxv9rVYx6znV7EB7gTe!q$F?;?hIJwQ1(4sU&Z1 zP`+|zhR4AEMV^vnO{EH-G&lV;M+gOmrlB~~6fw*?X6lxdDdY`<)X|X85>Wo5Oj1Cf zmcf)xYrkf@9QZK2x^3m2JGaI1KLlJdW^0BF+ZME+nx|(wZRd`zUDhDKxQ3tibdr&c6)X61mfxQ6S4itiv3(Nt4QqK9XF00V{#;px^|a1(zDZe=xn zX=Us=|7v<%w8f|Iu?XJDMgE`oQWy8qP_{$b9?d^V=KFMw@z1>-8@#7|BOOl|~t5 ztaAd!LbgEDSUuP;m2MSNNVCwi83`VG@~1AMNCJPL+`Jpx{edB{79pbzLSTn6t5@{1`Y<{ zMzLH|SlWvOIV6h;e9RqvLyfH8{Aq!RRqR009}XtBRE&LqALcbM(?Rr1xGO!?Z=yl5 zCpVrY$ujYf3kHUQBd3D>qMW(RPD{1hu=pa4uMX&_FuHEI)>Q+NwQhJ+B~6qV4IgOBB!VCp8RZ8tPhc>+F+ z`?iGMZ3z8j(BPoRfr9EVe?6TJ;?QONcwfo164+6|F6rX{HaEoLU{1h7M&p4!8JBZC9kVWITz&%T&t95z7aC)w)QpI$eyb8i{LAE%8>!}|E8K!0D4_A zbut?tX0&H_4W1B+^qMOt79{Zu4mK6|mxi}!Hk^D-w4Y)K8q;E+z5|JpTQQ8n2qb0$ zt)_qgJU#{xV%}cVUC1@SAAgPg<(ITLJ-6<62@gE{{pt;fc0YXjgW)~gn*D~U{(mb| zRPQCJJ1;%VoGt#E0aTpY3}MGTs*Z>2zo*ZGSROqf`BL}S>{zDAP~)WZ`_I=l5BA_-n?lZ zXjl)dAAb-*EC9w*emzOB48LO)wA4KCG{oz4GL*& zEqv@QWA;OaAfDGccBdH>d2t;hc&7T~oqEUjGRm-ezbtZfey)0tm-Z!jW!$@P+fSePv{X_Ru(dR-E(>J2&R1WD zgxAzhHrRFWp`mCAk@(TDmt1&QhsZY#?f%M?{pjtozX5&&hhCNm-%>Ohubm@BQ!KwUYS&~fSjn$sJyq`uqA2m8^;jskL9SKcf`$EV&p28u z5|2&^DAytd%fd$vxwN+mB)cB}`jPKvc=bZvIiQSU+Kjn*AgxjiXXC5IaQENFYTmQr zDxqo12c0_hWK@7ja#y|$XbQRRZ=YHKy-p(m4N6DDgmIB<2zE&vNH|uZ8A`VP$2A6& zo`uQ)m!}@eGOa~Z7h^cb$}AvE)T{{Fa)<@DHmCaE{@Qefwim7IBAQogPkWAljg;+2LhRt{FH(X^kR}_YOr4ls?m#g^hJXfQ6FJTh;Agh3&^4bALypic{(4{;=1d(OafSxO`Vq{oB1GO(usl zp=rOTeXey*+kjo>>J0Y`G!p9)0kr5M^s>KM!~F&0f$S?o*+ZR8xeN8p98TY1`c3xOWYDcH))X^LwBBa9$(<%4bq?cw}wjls{ns zW}C^L+SIClfB~6M+RRvAoo2|WY04zabK-v z8lNq}Fj*c5g}iuy)Bf>}TW6FmR&+aLknh+*6YA_UNtJtM$YGH8py|3~;Np|a5zyRG zWw@p&epE{{i}#Y~s|VZ>I$prmL|?ay(_Llgr8Bu=eQJsTrc{OFw9w2;VL`Fra@YU5 zRnVomo0E)Q88qrKsZ|6_5cQ0drE0!BE_7uKU_n_?KHWRCeDJa3VD&cxT2L}2(uv&q zDB6R1IS9wfEPL>gr9CmncJcPixU8Z2n}rcz1Qep5cJoA6p0)mun?c{PZ$Njv`egOQU$Wb32G`H_I_h+X5_y58l zQPT5EpeNVfPyZepx2Ye6c?o;%v8UC-ujf{jbsoo%kxK$18i^Crxs4@dS}{wLca^PZuC4E{Rc5?IqqmtJ2kM?`>}(aZ@O=W7PaTCUpMOu8{?H7)P2Ho~{lM0f z7a}kdm)85484NY%5bBO@MV(TRuYb>EHD)Dx$6+0ZT16V~ z0wBxDe=Ji<3E&z4!^ywn4NzeA7In(nEdQmU>qRP0C}vr_ZizL}`B2KmKylE>w3}Nl z!xBdU-bh6r;T#>#q>$z(qe{;!jCB;VnI3Y5t%t;WEt~TC95aX{?nTh)Chs_BxWuiK z?Z**QIknnU%3nN?$Y7}$e(X70%RzhujSU-ur20#iNj*F~<ZPB>`VJ)73aM?67Mk0|f&H8?+(oda%6Y zBmg&~Wv{<15^*B}&;Wqh-`m86oodu6Z?_s#p^3sjzt6Bay_&0GT~ss2G;C>Ih&Ey4@+5dXRq!hHwq_hx4iR^s~PoButr~f)s*#U(QbB&;aT^uFj)^=}83#MY$2I0_3Ffy4wAC5^OG#@?O%- zg%qDvTXZ@~jPZ)FnA^SMK^{GUfIUx1d>T_xK|1f%hIrRuv#sC15kfOrYPu=#1d7RF zFd|4U9mNC1tCfSfydg4GiNnG)0jiGZ8U998nhJ3$}K>XHS;ed^gB(TQJ5H zxbzLh&t!TDLzfKim5VQpy1Pf<%7w;seXAC~mmAM2j41dneH;y;p?q%B_Ua-;7yRm( zz=Mj{q+N+E`uu$Gp}}4QvBQuQk1UJOBga?!ezYm6Ui#ffcXL?(x(`TIJUk0WGFOvm z=H$XvUVs4W3rsQ|Bpe44j|Yk1&h=xnfs7j9l3e_~1V|iCH&aL&Hv@DSs2ktCab9OL zO7D5IQOuKtI$8`1x^rpvT1UeG$D&?Ltz*Ns0ANR10Zlu$UulMaz7SxORmSoD(1B#_ z#@i9yfMqt+EUqSHr^PZB{N-q;Y3aL1O+;DK^dDa+oqmMVJ*RirN)IFV0r{nhg$x`t zt#dYrxSUYiqnTriC!Vqk$BJkmiQO}24oi&sjzz_~$SpCeh zb4C$2#pzI^<0uyCAGKHJ`q!b}>wBa~sK9q7GYYe}TYFF*rTDz%dUaeDB|8wcHet+& z)Upp00A98WfnYUT?@?>N02KayK-+(bqV4?u`*hZ-ul7xx^#|U|Px&$IRfOGrvD^6s$u}t>16?e6&?1o3rpLB0HE=cv+ z|FQa8)Ej*JZjjuYb2+0BG%JF20B-CS+Mz)+1_b$LDS_M6(7?_1emQr<(pbD`gTW?5 znenR;0?Sy=iC|&Yfv4LEO}8bhCd~hptet?Jf*sHL+lqiSIk}&(RsX#2VBPd(-G>uS1O*TWvU6p?e?fH*>|y(tyYWxv|*Cf~jDg_e2fYCfe~;sH$#>^yqWS*&7`K4dO8^hY*(mAtCk$5gcaZDX@F-e{5iT}uN3je)0; z@&RcMvKh`zU4EfLfr0PFcdMWUK=hacliSRA-g3g`{SQmqJMCA3a_WB%*82iHG1JsM zQm!Q}1GV1lg1%g^FomtkMxBb}pdy%1j`|5n zs{)uz6`XJg8H7ikIyOuxT-0PnXPSt?kI0KZmwtyM1XlO|`8u?tfIO1WDu=aid3cN(SVy}1AY4Yl^O)_t|@abEIN z|9_bIADC|X*#Q`uP>zK6vK-8ne#%w!{5+5V`*-WFi#`@gLxK8aCQjrg3|k+ii{?ub zWq=)1UkC2R@Go}?7k#s>DGNvKYta@+Op-x{4c{92AwgUld zj`}bPM`$m(oTlqdC^D)Wk=GVW+5YUuzXO36&CFj6)%0^(h`WyMzBBlwPCKt8Rp8cU zLSc>JknGi{^DlQDc+U0ufn7(5y!W=iweu+&VExGZC6+}EN4j#P^YH__hq}lz#QKx zG45bwKo1BuG1+i#db{!dI75cNASOV%0s_(RcOydSVat<=%}{rA`L6&;z-IMaD4nP` zlZmQIg8_ycCSct{7Sd4NysRl6*wm7N0Dk)qaJ7W0d&&y-M{+WN8y-aia98hT8jw0^ zsgY2!lCZ{QQsaZ2g$F7&kEoZY-PJ0F06{c(`yQ}Xw_}%Y=;!P6exDD?v%mz#Ui50n za_8v&A8{!^tKjo{iL`nX$D=s_q||zD7AUK#F0?+91eKNN(5erB0jsa{74aHI{~sB0 z6|c)l6ZsVsVoWH~vt?TO*Vz9-5ZGAmtg`cu4a^xRw>`T^UCfJH^bm^w7gBa6T74Cf zaTroy-vk}-)PTkGUZE;acb%euCCs-&Yn7O<;%bxiaA(1eXl^LEfQbQ{*VumDf)e-pWLV>dKb)s z=<2D-18nUoN!b1D?KUweLyxRuVR>3)QzwXf{&K4T5OxZ~|9S4Of9th#C1v4aA1>n% zz)-ReN4nwsR zm(u6m%dHW>&ImxzsDVEIN-^A|E(sXqv=26)v}4r{=e$R|&iIp$>!*5$dY|4@xkVD& zEr+lFIaG>3_rzqx(LA9vxNHOaYwI4>v7^}dm5$fGg#l$z*Gh0$zu%;q@yybaV(R&- z{m@xNSdhi>WwBUU<1DiDn!rOzO{jAJSgr+PaXDq#wV?GBH*KOZkAM=!G+0HObXY|UC-V(qsS zK~#a=(9NJlAaVBybmXd*tXq#INtApNRY;A21)Yt}KD+`i07pqJuz!o=@qWm74YKz& zh$W(Four@PP^YbMeFiAz5suvzw{9nsDaQnuP`YO`XZQ-pRC&)v6`x8dMHU^lTDFvG zJafsC37zMyiE$~T#Q?Y>B*8?S*rl&v-r39fP0`aeK4V64a<~oP?h57p;>$y1arW*@ zWU}`58KXU&2t$;iac=w85zFL;AMLq7YNnno7J3V}6F%MywC(9LUhdvE_&>vDOFlh8 zj7K*Y7f9RQeg0$8-FDIn4G(2>dpU<#y#01L2XJEz6M#u(U_B7ZFcm&s6m&}pzqZ>7 zf4&AN=6GHp!vS4fMB?QvgaPGWi1PnK)tkpd-Mw++wqY2{82cbIW5~XREZN7Jl9YYl zq9}wY#Mt*Sill6*l%=s|xs!d3D9e;YA>?OlK`1tLVA)&;_lqu?#CjoIr!u(S%hc%iA-HhbFS41Y65zZz-L*BQ zl%22Pog4eo^4zalHzS4y<+UB6bVSPc7DPFCccx=Mjju{vZ~S}EeXDBUI`FH_d&%?1 zzxh%{Gs$-EhC^$YKDODc-^-PiF9maR{u+|`nt^ByaDpULrzBH4!KY9UCniCm>)Wqk#Cb`Q^I(q1{QFmN8n-bc_cEyA2PB zXTjTOva?4q>6v9EnlzzC&Rj@&a~^j2eMnaOqZWb^eUV(N0O{rRtSD2gk6o!@)}WNV z22okmZp_A;vtjPp6P@6|rWG%qvzu>~;*UzMMwCK?ETBPJr|CbQH=`e^+71~VbMnjD zNWR`~-cdBG^~P!Ju60BWXSL=azkW{ETKiQG1s{lXaRF2jg^$3nakPEX*tSK^yy+Jk zy~!>fFVjR!N=1*{GdTEKUdAwbH|Wgah{1XIIZU!llVX8znU5cfCO?3(xGjvp zmJ)0_7&w>C!auEgTa(PCu9m@TT$>ok+jHhpNdsO+7n5KmCz^9dw^Rc4>W*W71lpQz zwzn)CpZ$90ApPO3ueU3IEbtXnh6nAuN-;jsI@4d`5Ovu3eP6`U$}#GbShvl4t(M*2 zxvfh`{BBma>qCRIYz5{e_jnQLm$*-v`C{9_A9sQgzRzELydElPjX-bRN-6={#nVHj z7%#o)wvWo7Im}Ia8s+gR%;Amq*LJ!t-!?j7HrO*2bEuCkDVL2CY!?j5es5J&;dP`x zCDlr89TTIZWhH-dlrK3PsP?@oo>burT2Y~VzDAC^My>~&LM`Ert={FnRlQrMW@g8W0~dptlQ9g{<9=6`Q$IBgrEAatWU?+o zPw891+LQ$p#e5;FK9+`cc1L`yKA!EzfLU%J4|?)qOWnCAN@5vrptO)!!|D zS8&b3!@O9incMT-)XHp2PwVNv+3LaX&MSk5ac4dZ?#C&(U$+i8UT2o@l-%={_4K#3 z27Ur2hwD5u72(^DRJ{evvvF{}*2(-NC`w zIoYct8+92!$EpSCG_Lm6?8j6@VFyL}5Iav&b_PT&hxB#qXp0dKztQX5GvGPsOv~#_ zkk~&JrwxR0wv4BBwe)T!U)7kj+ljkT?8ylWkdb*Xp@0T$L}y+cqt63Y66t7yj2h_x z+XXW%n}cy@)li+=!Be-zbJXp@dCIYG3tXIDxgAteQvtl?bO+{O;qmHh3NV0ZzGtPN z3Mpk+4Wv6b)YdIZ(Y3~M0%PB0`01sFjt1I`Oit|HT=(C;hg&Xv?xCvmoeywg81!g= zqdm63I`8fAG=r~W;vDVUIrZt1pj3HHJdaDHLE5Y!O3QlvPKHKF%e(pD$-3`Sd|ghG z@%>3Dv5!V#X0!5k8~JN4m6YWeJ_(GeP|yz@E$JQ){+-yU>L+%a&}378W%Rsoy`Ayh z7F9X5#$QT|0(B!C=2;<(dFkW=HY2v6<{Krt7nA~-XgdeWU$uU==Z))G9}Ak?aoQPj zP53T&%c@4&u6pJa5C;`AM3}~mjM`mN+kk~ zg@jB;z0Kc)^5B9-#Bnf+ablC9m!flA8c%e5TXoq+s_6r8_RDGr!B<(9_5A$w}&F!4itV;yzI+@A;dEAaGGmu*+w1@ z;59zJPctoQl2FZfVjmQIJFn}V4X8g}0U{lYDLH`R#M(g@!Um&}rF`)rhpJFPeK$TP ztmGz`^009k@P;1M=te@R43?GG)Qr(QjSM{kZ>7JHYm}co0jMKBnp>9edp_hVY!Euj z!|MsnkG>twMSjuzq#AvqMgEdL5n41TKo>BvVD37}Q6#AN8L||_J0Si`|7wq%!)czn zp9fO>gA8x8`X;h&7Fdzjr0ITgf5LA=wYdhrYknW3(^ts1LXD#G$PMmYHAR61@SXi0 z-$0IhUiq6dJZF6Lg@7W#ow@&j_l0$ zQTwr-CzI=B)X$oNi&QfeDO!QW3n3`gSM|n-IEy{8EbW|2NW4TF;a^(jrQLb_3bsvK zX+K=tqKRzeSUxGFO)8L|4k5bhoWwp^_lQqGuS)V;NT_bd%K5!} zX4?-)^hn!ru68r-V)i77nizLJ+jSyr>N-29vH|FZtUC%u$qA5ONZvy`a#MfI<9twh zNCQffBN^->%dgxfT{^4Y#*fpowfsefUJr6z6pJ&#e32$cGR%8kA>$9~8La)LK6;K4 zpH{)r^O=LDb0)TWuR)UxVyyx0yw3O2K3>px_>^2$Ta|oS&%<&?p7Ay4yDNH)9>3tj#lUC6A}LMq?~P-3-5XeGwqt-Liyy# z*o_i#Xv?_UGJVQ_XzbR>8MDo#rb+9jP-dlV)LF%h3-^U}29QA^;ciOt0p~1F{@rpp zu5Z2Zlv_(v_;W*XdufORU!K9PdEvTV0=sl^v;6Knk(baq*LkP!o|&W%lSg>rVfDc; z2lk6lUH5owzMO{Dhtr)%?EQ3k!qL;G7nh@^b8w=2AEW>IE0k!8K5Kx#_bBSiOWv6? zH?G89ldIY-_+Im>;xv_Y3C2Hebhs1AGITfIY+0xC0BBp{u=WAv;Ufw<{m$_VMX;^R z6NLCQPl!0OYgss#gY6{dk|{3Uf}L!Hq5L^{-yoW~PzV{cM1#N;g;(sh;Lny!3c4>% zzjiJkB`&4gxKxC%+}C1PX0e-duF+Sv2i_+mcQcvz96u5a!%|pZkVY*0F18J6)z31W z^h$#qT^c$~Q^@^BK8K7N+wMga3QFJJa}3a`r&jpZg+bN8ZIB##(-ouZ5v$9XO^Xz# zQ#NPtv0Z=ewkXCIdi@#O)GHxs4< z(|$kHebx_W3KI_WnJj5pb316o=M8%{aqH)~wdxf^#{8}8uBtX?RO_5lAgh)rxA$Aa z*Z}cnJ{PAA%zeyCwB#xOiueZABr4m(?M$(~V`^2u)r5ZSD&Kh1G--nBL+icOj>=>P zFl+4`0*X$Nng?>^^B6yoznCN`Fnaps5pv97S~7W(h^ug$fyff;WIlW{yv!0HmhQ>= zCM}s>b-|7PW^amPG|c7I-Rj%- zj8nphG2zoy-+o_Sy>mh9(p58z9zff(H&uCl$Ph|@+~iYDKO;%IlLu_L(&cNJ{A(Vq z)yekxbnX)he%qBjZ^f&6R{dk(V8v5yv);hP?P1O-^jXyweux0B%%qdlhs9T$U$iZ{)^=^w1 z^@qg0_+!@@g#b|pjzC$w#+Xb>^rx!#VS5Jheb@Hiw0@YeYS)Sb;F;$+#eux*^u@Ux zJZ~OlUTBXdhlW2!UWXx3p}?5HEnyjetU+6ew{DZ|;7h9;Lbnqe4VlZ2bDbI|dAyGo zo&xpceflYHIe^5hgRi$&WhHwZJXd_QNl>a#2)lDW_wCuXH*jATw`f*SW6~>)EJodTB!1 z_hbWA8Aw!J`2^v17E!lT$F)m~#$Wo(>>sZO)tD9Oe(iqA#+|wv3nN!QG+de>)HeYb zM@}tu|BUV`jVP4D9GusMbB8P3x}!ukBMW)z-gtciz6Tev6|#-PjWdbjO{RL=Tm^cJ z4{nUy!{OMqjvWIhl56Ag82KKlp3TD{F5{QhzkkVIw5PVoMfE(zMh$ROh0P@Fhesh3 zc`B-ROrp)NLW?=;8Kg#g%Uo_rNP3Rqp`cR%8mgMBP%|LE2>R{!4fHdFZl{@{zcCxX zMA3PeZd#(<69x(#Nsn=L+#f)la2W`#?S&m5u$k7qjW`F_i@S#Zxek#9xIn~8XKLe-e?pJseGCu~a3J)8WLRbK+Z+;{DFbB>vlV0k3|`I+4;qKJbh>YMQ=c2#JE znAkZrRcYi|j*R=Z1}MnSP{zF-K2zlcQyR8x8YD<_zZPUDrHSN`4>o}PgvjeNq-&*a zTe_XUqT~H-Iy1ERLj72&2@tJo#Mri2JQ!HfRX`ei1AiN`?+CmJP7IWp{lv&X{DBZQ z?Lmxd#1`eYJ%=&{dCd~b<(MQ>^R_cAj7vifJu&^6w;|need^Igax?lO4CZRZnD4#Z zt^4d|87jbNDy|ZSatS#1_+AXbwDFlD>ZZa4<<{e~BLxo0FV-fT^}bwloEkAH$wCoX zgZqkoy_sk=hq|{T-Z&=2KhLct zDUwj0Pc`$}QmUq^-MBY($%NAtvt&;J^unD?KZ)Rwp6c%!B&JFy=7yhvw0qpU@5kd9 zM)O30T#vu$rk_Cp4WO4M;=o=WTRya@f@AJ+V~{F6eDCMme_+g0nEoFDbsu6Nsau7-(Yq#Pgwu@wSn@Jt|2=KiXMuQ zNep7(`@fuosIip`Ri?V^aigsH)}%EjrAPwC5- zA2QO?2zEj(9=UsHMHx&#A(XSg9Im0wsIz3Yd+=wlN*0x4ro_l zjXI5fCG?vo((eSw6lEh2h6FJ+Yw34}h z&yl9g+in_n^gUVe`6Nt3lpIqDmL)`h_+g8d{b1VIn)!tNUX2w)-BX42TF*#%XMA2e z>PmCul~M7|dw&RLQU@E5faaQqyDxFIuOv(2<*%`{gDTf`--^@~(uxILTpBMN>G`V& zR>6ZN1T;A4v?f;c`2}nIN%X2mCrnPArJc@g<_&iF_({7j)J;qksy<9FeftpGmh$(! zZp~inlTe2?8%j`X)iWgttpn%tY+wRrs+?osPwgL^1AiD=!=F+YFn}ou1x37&1+1{6 z4UW4KC-lAU&c=KPvdaN3tRjl0o(lv5CK)dw*#*}t6&vjpxhr%J2X+RJg^_~a_VnU$ z%HJsHk#lgZhH}YdWXW^swWqWKUAw6$WM?S>?D!^#pVvNu+w84cFa|DWe8J&c_NzyV z%P6eoXHD8b4;!+Q4k<`;d`ogr>x|ek-D+0YK%9u~y+=K+K5b|7o9+>bU!E?#hX=@U zVh;@wmr1C19SqS4%rtCM&*FvevQx;sbPYEmJGEcmAgk1nnv2{*^g0`S-Fge@HC07` zcvlg}4$yMwr{(bAoSk(}k>l~pbG+E|z7D8KSkDUJS~=l+LR8 z@pw(yVMfuplXf`U=b3)u(KjV0ZJM?8Ka+2=X7Nh-QF_U!;a$hP>(jh-A1T`bY}FYz ztev6$Q0acefNbO4pWnC?hS{adS}0*Luh^&Nz&UU-qENo%9G6t6U2r>&a-%k%_t7)# zRTu`&g}aXhL$R0h;KD|guH(H@pkQ;;s2>IjI)G{e5*W6y5}m`984bO$%Lv+V7f*s= zjt8B@WZV6GfG?TYEeMNmf>9$jc z8L`d`oQ&5CqOp2i+BWTRg!q4p0i-OrSpH5o-Td2fV`BGNJHWMutt@Dlg!8>St}>hIzo z7q+?;PW`tV(8J1MNa}8o&l`H!M4I!^y*FDx<4b3XKZxUE=K6AT<&CU_zY_GEOwn1& zpY;~^wfJ2fXM?tP6P%(l|Unzs27b+zW9r=Wmqyv4RAZRybdt)CMB)&E-xh> z0yXvO>Z>CvX_dKj!-CB%v$XdLdZw6^;@6|u{7LY~1A!{qH;?|olwC4Z~8c;)tKF`FcBT}%V=i=lil28wEh)+9t zD7u<|cyw<&Y-@?fGaNL5nrJY2{RNhj4_CBCL4(aeR^5}qG6h?r--llSY~nz0BbepF zN#+5f_y0KqDyTdjaQ=Wk_i0L^{#|DqEICmEfl7P$q0DcVLDztREi}A&rNH(af1`Qq zh--wZ%IPbp!LjcvS5}aD*`}D#%A2D~N$sVC_?7$wQ#1_LrYy4ykX|z#4f!z5#3s_s zF%aOJZd-btzwp#|#v!m4c50+6!#)Z9XC@NM zSYw2kX@1-cWlZ<;=|*|clWJG;SgW@TJeaoFn&b4yvwDI`w?~YEN_@P(9;L5UzEkjK zB6v^zx#%o?=3eJ5niaVSW0Joohv^SQt0>&WR$P@aE2;2a-p_~~Hh@%3nP%GD+Vm26 zmXXbMpiPpq;Y||2W}57%dCERz{UTE%tz2{_L4;J&b9(!}aIeG|V|@wqcklVS@5{dv zs-o4jThe`_X{Y&Q?dQEVz8iL<7nCv#qDYgxMd7^d*Ma5EIvyzP&Co#^XvnAE2 z+dt#^K=a2CNSZ_g%{Lys-#ZUZ66fKrg@V~QH91+(Ml`_7fbAXJ0b*e2vnfE)r0#B) zw&;!jW)qZ#_~W~vaR9ZW4$k!$g0NYSr_Hmal7nNTB!XjWq-7dEs<|oKsM^x^W&1PR z*U1oPA#5nVHX+v!COU@gnWtAn!h|i_?5+mQEYvEQ)E0i*O~t-+i@6^UIYtU@p879_ ze4!cCx=yY_+sD?4M2h@K+IMxE1Tl||A7^5lx-Lf%`hi*O{(3X;ZM=D#R%d^Bs0A7o zz|IqV;JW-2k)PsX=EoAK3Jw;|xO0U>D6Kd+<==5IOk+TB1qryNec@l2dk-tco~lIF zJvBDPPRCv}ot8^+nha&Gg*b7nXc$CacZ2Jk&B@ui+#IQH7x#`*f4}a<75>i7x^Ax5 zsUr>gnu94AflTPD#9#1V44*L<3B~l}8f4)Y(h5?51$7B0vCru29dy$03#mg~%&jO= z;^Ts-CiCx9uS1hjqL?z5T+LU7BGrcEyOD-9MV`R!?7Dau>HyoxE^w(@vF;gd4JE)i z7jQZ&fW6_5!J7)FUpLs=)I>$KGTt4$cJtb#YWwo?;DVXzJvGy~RC=)JT(qw@c#1=_ z_0p~sRxX`IyxIH?I}auYoN_0!73kvF?>PAk7V=w+&3kkB>Jyj#9<1K<(F2fCx*MyJ zk6F+|b>QZYNvgw^C{Y*q=tYx1O`JH&O*T;5fhIAi^MQt$3D7}gi5SX%_4bnJ94D=L z495s5JK=DI%;?2u8}QsM=CR?nF>Yi&Lx~ z%K>nY5?{IAQxyUNY-<}iLW-;|0EN{t>?TJ!WTiczI8t8#;Xioh zw$Z*dN4*e}5>X5NiGRNHV%maVT~FupJwL&W-#fIu@g5Zb zZ7vU_th0k3bG|4sGc(~vkAw14h$Wl;(BAuc*YD$E5QLY}>%@&m^`nFenQpK42 zoK&(W5h_XGhn86~!5@4MVW`s?;SF?J=s$R&3kL?!H+b)d1To`Apko4Q7ImHiT^D*Q ziuo55lO*(8XlHn!m_rePfMOX;T_mN+AlVDQ*Tar~K=5++09v_xvNCJgk$px)|Eta1 znqNKH)lRr*UP!Ii{+!b4;XO@xfJJPEnZjat4FEk{-ujiZQ$eo^Fe+RL5DM=aCW;Om zi&#_LoZH(m@+!L=X;-R;p(QiE&}|(PdqsaIA-wd+@F**MyLZwgWP!{>brg)QJOkf z@b~=?my8bdv+GcvMRV8tOpTDJ)Xgpq&dM>N( z9U8+tAN+(Lshn2&{!G+^$jCodDQiE)k>v<(JJYVJTXK}!iygmW4cAUXJZ|7@U%P1< z;-z^v9fI55kF*D5e!W9OuA&8W6;CzFu}yY%J987HK%!tFE<2H(&s-|@4=h<_UF-i3GeohY>)O^ zklADYmLyquRD(C1oNucAgwVuWkz6{ZcKPp}sHCTPpfEDjD;e{vbK&@?uN`n?id0F@4tg*KNCU#RfdJytt)DJn=Lcy;9Fh^;-Qn0Hte)=2@G;^GEG4yKHxTa z?qR7X{3#40=O|4{oJC?H?9uu5!a3* zuD4dZoVoZOC(_NaII~VSwJe={9+W&-$dy?YELR8Sb%3T>Mi!Y)8y;n;Pm_T0A8sGB2 z-db@iy17hOE*R}(!|I%#XY{ERs&?yzm{{#eu|cuROI^dy#g(VZsexxUME*wr53wnc&g4CP;>K3g;uj$mVh}9|t z3$@B%xYOLYkQ5;gsr?jBbpN|=l8_mzh=Nz-_r`)!^>Ir5GWog#;jls&fNu=G=Xp{f90b8vv=s08shK#EaSv4Vi!B@jf!i zQaENMR)R^N+wsR34qad!T@@G?GoHqvJ;df`h6Xs4q-+od==4xXlML9y7e_6 zIFHUHY-?drxFPHLD4Q9h!*iI7?O;447};a_S{pF%bLm@UwHHB z&qyr#?KNwm_+KW!X2;cTsf&fC^_e7x&`xq_0b;6?EcEuL2hx3y+OA+c^lK8t-Lc^) zOH@K|&nczHfy2|CWnzOVhN&ZlQGr{>h{<7F#a|y5CdwJhLIp;`Bp~YZd5>lIv@%#d zE7P*(3~G|U1l~VLK2F5(e81`v^Cf90hzH4aw#MONJVq%p!ef)PdTHP7ksQIs=gPN8 zlZU0WQ#`v-CVG!Mk2n@h8|JdD2>yO#x~|C=5D$Uw;XUP1Iuq}yi=j5~e39O$s5x6_riZ-(ny_ z=Mdc|0%pHF&B2;p>iEh<@XxX*n07R@6KL^X+cFG8=5TYCs4I$X$_!b-;fa(NSj+pC z^ED|08jCe?MzgmKSijwFX7%yZ$o$O5PtXYcdNIa!G*)E!`U-!SohN7ZYr?adx9Aw; z0OkY4=^1&S=HQ!jUsccFc*ej6NG!P)@Biuj_D~#SUbb`sLt&}8B;3j`pJs~9i~HMc zgO}$%^Hjm$diIR64ywF*=a?CO)_#pS;uc_N@Sn1;_2}LHzTU}EKJ(Gtgx-{!+px`x z^)Z=fcnNX2Hs9{&1xse232UD%25J#N4!%#If`IoO0FJ7Nv+jYL54vle8MD4ScX$f2 z9X<7V~wsz5yBgjRa)y(zHb zfd={IpXN$$=AeDx`L;whi5w~`vU2w%EK+X!{xWRsZA&YJW>9*@_CeMtRe=snnjLf(~5 zH9Y(Bd2E=z;GL@)vh$KCJexq~(o7{*DMs6XX(50qJq>$#e zsylLEgCYNYjoRwy_yvkz7_6KRPz_qzhC^IRLoEh|u=+ngFUVX8RjiZ!q{_hXrWq#p zw|ge+v8?>O3Fh7dT>A~i()862X;s6&9Wc7MSuIK-6e|m?ALD-|r=1;JoE?9lm*Q{G zwnn%^K*ig4ad zrKu>rxUc3a`6#eQp#8dIv#WZ}<@lp$HAr*q3hl`3rF+i-U8v6MM zx!S|HI`UxKzK0oZ0Bpu^Y|r-j8nGJHyoTC#^Ue3ueNsxQW%i|IkqQbmkR#jpnZMhw znGc`suH5+UihK(%jN13zNYqK|<^O$Z_ymAJpwhqIS@b{Yp?$b+Ag?45Y@@w5&&AT( z_HgX|-(H=gHwLNbb7C1|TT(6ut}{^_A``C7;RA`jl;;tTEcWtb2mI^B%($fDWB~gh z;-ds&62!%zEspS%r!6F!84b%e;BD|v*L=1&G_L#? z$9p;UicJSpj|UzY*E3tUz^M(3p+QzcS=Jc@Xz9wiv?(gWEY_z1#WFZ%oQ(k*RXx>9yQbb+T4x%@Jr_ zV_o*}jAb-YLhRN56+>4(X0A7t*3WPS;^ z9a}*-l}c@`PqaFe9XHKQl2@SQ!h4Z5AIS&v>F>0?nTMPc^h&ZA+RZY??sar=#9^fU z>|iXV+^d#q$Lcd^r+^`Gf!VuI9E+@dozFetx_8OwzSgFuCifFoLz7PJe%2!m_N%(k zm`)Cze;8*DL^H^CLAX>=Eusm)ac3LN!62TNZ_JY|cp+eZhf_4YBpZ8o@NF_TBI*=i zu+gYv10+3tL4D!!_oI%6ULBlhl8TOrlpC4iROimYy_GGvd)~CRCgHX13rTm z@h@Ca(gSyUFIFD?96!CTZX;e?%~+cD^KhB_Li;<|BpR*LVt2D}9=0^kt7)xlz!x{# zNAdoXAJkOEQtK2DzS!?c{h~>t%E&}+qsvcf5x6B_q({RL(Z}i+IOJTkFF8_`v{CRc>nw8g9@{qEJd5Xb@Qowx_4wB+t=8mQrGjlsuba-aSI!o?G4Nk z0z9qwP@O4u!i=crNLSR3yHhejvAB0U54jNKF`<}*5aRgNi%vud`c!Mm89#=oBHZZ@ zdqfqCdU%vx!DCBE`{N)Y`L2+x+fPDj1g`+ zsBV(1(+za^1>;d!rRUckaSOqeo>3Or*qW2R9Y{`hzBEWQRFiGM=O%fPz=<{;wKm7H^jJ+G11qB2B zI;z&4H9Pa#n?E_g_^dAl#P=C$ii8KPuNe&~(@P<;%Q8tQFNBX7I;O7>MEBxYXuc9P zx=7hXc9hu$G|I`Bm%`Xgz@o~%fhWoV7` z4fli)S4zY!1U_Yk%8}WTFQCXA5A(RoOYS-HNi>>Y(XJt#9aW}sV6EC7jr{wKa@>?= zcF@%L|9wOv`ClU|%5iT$e8wKc+U$uib^Dl^Xd+z43n5BiQ{a6zc{$^aIGPUVcj%5+ zLqtnI_{|F(x26tSmWtqBVwP|gf23@j4|iLYCDIn!aJ5Q7R6 z_;(#{i1NL2_J%Rgx6U=p*6QcQHGWlxeDW&Jd*`QDF`zw}n-x5)zSvlGXVUpj<+5|~ zYE3a_M+FK`+9V&*t#!)IYJ~Qa-a!yP{Y0_u-(G_$m!Evg^~m-okVXt#yyTBU1k&d;?B(r|w=xG!|ueMgSz!-oEsz+Pd!)qnmB z^KM5rOml~7ZI`DQPc>F28mTEN(=G1gI9#vXm0WzT^G0@{^7ZuB7|q{J^^WhAJ{O#L z(r3ma9jpCiXBZbT=6YtNCcZy|y8bsMl9XS64ZV_DIDND5+h1NktwI0Sr<;z33)u$d zEY4hhA~rg8b^R)kV7Vs07D!Gwz>*l};H0*p4!UQKwzJ-DG5PWS4xJf_JmLf#GFgFW z{zPv2Rd|I47Q|C?O@H-o-M zWhtHDMD8{@*$3+>#M7kt=Vt+x%#l^kDcZ)nC3iAUykhHs0`3>uPgsxRF#qB+bV@+w zdOm)JzYt4DJrX#gZjc)oX8bHFP*3pw^sY02MR|9ZkIK@(p9^-${xg`v9CHnMFuiG6 zS-$Xo{rgEimmdXHE>KF|gDg6|*eVBGUIA$nd)>TXUKxkF;NQufGc?;TYNt)J^a`vN zD%TFkPp6R5q2_2ut|S=&(VxKjHTz(=?+w>MWv&QIA3CX6rQC*Z`NxkGw&lgtp(P}v zs=v&6&7X1K>wtsn`Qz^|(gWika1#R);wl{)CWL%(oY~rRxj6m$cee07!_jdY=Wniv zGG4=ljnN%rU2YZc)2UoQ0|g6)S&0u&CB!mxq7<+`;lvr3VUE7~zn(UFokus!1r%$6 zB-QQB>STze)&9IL!-X_J3ez?nBN+7M2qYI&ZHgx){qsV=OY-Mj*#k#7t#oJt0>>*J zF5Z2T+U&w4tNMLaSFw$?>cp$UU^xk{K-|N)-5jInIp8KjIkQXpU~&anJbJyG>O6eC zBG%Hw0m#cv5R%Xgp&0N#bDs>6AghCBr<>bkDAe|dM12aubq;r4SUSJ~?w~MBC@a!h zM}`72pj?C(JXK`)ki+>|BBul2w;eI;2=e+tp%LP;O&;$KKk6KP^cf0E?iWZqrjuk) zXRu^&i@S4GCL1~rEiV@1Y@=s9^q$>ecq>mq(jWeH6*znr7iV_fMn6rlyMY$x`t26W zqN-}oWj<6$zz}%cs@@N|v79pmls=|_ngZx^Hr>3kF<$##Vwh`Ky|!`p@aCI~CQl#$M`zEX7@AW! zB*y7VG$~^M-ZHJ$shC$X8k|H4nG_{4OC)GmQ@w|afUNSuNOtC$RDr}#OmZ}@4y$w` z4TB}0Y3X|q?96n4R$0LP+XAIF8%iMOG;n{rT!Www{7;#V!EvJfr=V=vA zJ>_H}L>+nW3=E?yX6edu2xK+sDvMpy&w<{ivJ4r?!dvI-N9u9a%a4DYc&Sbq5m>sA z1;w7svKCGHrpp2*F$*Jg%dDEtuyRq}Q2)f}aZc)!wXrhg3~T(GZE#%-l^`qnP~(10 zlN&^q`lR9Rw&)Js4C#$z_^!@9@?<$?rKSW{Kur8PDfWEI?rH;#nGC8k>};QS&?)ou zXN4Az?WBwm=ylI2lW#767hJxCGqlp)6=rg)!9TTg8rD~0jd8oG_gbNWE&8U6Ko!k# zW{Bn>ty8;#v{0P5H#Zmd<_n}Q^25@F$?glygl@!D%vX9ce|NDaD0;u9AE}hCU%JEez4snsAfi+2$+f1#--9pW9H6M^jp=N?(cGM! z1}`uVc3)cW4COYae6gc;8#6qN9HTZMDlYW7j!R{X&wk*cuI2!g(w3D>G;u9Sf?lT&?-hVPr&pSzPJ*9s#Uk29Y4-TmEv^2t9w z&l>qWFI<(4Z@c?f=eXMFEG94LYvShkc{gD2$mag>3yjEC8h&j}(AiTUshC5X>{5N> zF1Y-@F&2&(xRcJS)JfEiZ#|I>V0GGH+$ltN32K*AN81vrV|l6+MTZGR#TVTE5#C+E z+Y);JfZJmyTd%I~XMU#kUd6wVh^J|$UHFP(S2mCrWEq(eBpolw&X45n*8ULWMe7R) z5uu}Pt2IiEF~#=Z1zZm*ePfx50v}u9YSJGC?h5w#j;fUlz{igoevlQm!lTrukgks5 zZurtNm1pM@GQf4qQ@eEF-dMXm@c5-EVTj?Lhd1YSGgk5{RGD7Yb9e|u4gW+Ji72uR zj&(#g0b<~hOM`oTwyq*D#~ZiJJvGDqy<)dU9~I}Bb|(5ZB!=sy!wcPQT^iuX^3cir z%BO)ex9bhnK?07;FIyar^9-u1JqdYUy*2$S-t%1iy9ND9)pqr$P1GrpOsQy%gXgrV zD`W>sxhXNXPWH(3_lM0L&j)*q&t3j@rguKr$EcOy`4O_C@`XOYuTRLVY0{joOQrSH z^^wh*6D`eW_8qLI2MK|#9g$2quO3NS&$hh2U1h6MTjklRw%;fENJs-Ts*#RSK&NNC z#0Q&tez#)-7&w~%`ky;hQWES8*QYMArw0;E6l#Dr&xKS>k*6gdi{!Y<_5ki)H&5UM zQtW-wiJ$R4!25E6(AIEe)ZOP@Ef6Lks?TGykPqz7V#H%*)IWF!{noxFldK);-q&AD z|Kg4Ss>29u79Q0>Wfpo2I5^dsl${n_|EL6F^3Uu9DwX|xD%L&S90r?^k?8|Ludwqg z>T#t8Jr(Ub`4&dmXQ$O<{CDj~CgR7r*#2GnG89KvNI88IX&Gb#KQ#x))NHW$f3hKH zIx8=!t(B!Ld<0*lro7F}QtCQF=?@95& z_pzM1&qjY)=GKm=Fg}QpvnK4dPeA&NV)=;`HixOrkSzL`u}Ie9Sf>jzw6(CJK@ZOL zhxvgO=)~Oyae#CYaG_|$MA}f>b2Pq|acdVVlK#2xJN0zXE;lB7G&1!*cb3pV%~|0# z`y2EJ?-@rYx=-^W+Uh-nxF^lpqN+m@btk<}M)S&-+tz$J8frUeWV+<;(|TBy`}VZh zwSgHfg;THl1HUMG=mmc=T-21iRp$j}wXQ(@J2|4p6hgKBdd5yCN9=Aq_qa_kD6-M>+$FVZrr%Tm zt6Zn$p!MPNf~bO$onEGFeS@}n0t&yBZE@Es>XzakyKc=JnDVmkm2X~6{PXwMS$1BN zb6gXR6gn6w!F@1e4qws1s>*3wq{>Z+up`&26Wn@dV!Q=fh%Q?sT`#n>8y4?h#n4q2Z$TD@ibjY~f4VdesX zC;Q^x!$qCf+MUK35=b*d@k*hU?KU0$Cd2a5U&LS(0fAgPC{ilIttVA^Ui zyH8KBc}hyF-SyjpCym;U5+!bhYH)k5Ql?ub*r8Yq}|K%S_=*lc_5gp*(hO_ZFs`83&J^qN%~VE3d%Sz%zF{k zx6yDPm#Kc@_PU-_fU-T*H`IVmfXY;+_YeR;IA9qLR7b_KPIx4N+a3#=Emt2YE+FId zZ#w<&XzwrNu0Y|r-52RMWs|gz!dxyPs*gq#vgSOxC$dXOTR`XpOvKv`)+m+Xi?Zg) zE*n3VUyc2<@psLF?g=*RM~7C9yjidvA{b6Bq@_L0f*37c6n`1krTK*`vyGD23@ZFu|M|82XCwu3Uo)Y5uX8*pUR_ zl@=B-&@js6bNV?i6g~abh;{Vo(#92gp-bs!0Vm<~wW)_8D)#2?gzNt#R7nubsudrM z#4|Z%2gsq5$x5sg*e}jj`D>H@l0PPH+&sppIcZr<90%!;IL;2z@DG~xWD3ed5hi6! z4}KJWroC4E~h@j=@8+>B&)_@%bTa7 zKHcfp-dy4QJoHF^JJVTy^9`%%5IwDQ;`$M{Vw~bf&qHOl9;E*1kGxM7rtl_;15(YD zjz4Be5=bwe#{q|dVvgK)$xpzQ547&E-%FDG`INDvlk%^?$=?U603#|vWj8k&ea?Y} z`M%IgU2#r60Pv1iHbJuiRiYphxZY;r-}iR|fHE7x_{rTeP|quxGHf<{Rw|QCns-bV za{pw2WgJ?2(hV_lS&daE&G;*Esup`E;t&ky zW)Ma-4^idT9{TY$=h3M9YwSR^ou1B)@~1>eA~e=~(y8~EW@8;UYX_@hLUSx$%|f0j zt1HF1=eyuP;ZOi1KeZbH`7W-yEWkh-E`3<4pa}VyLv*_`$+hk@3UNBQ@i^TJagNEe zQ{;<$l)EOrzsmeQ6pf0Zg)xY@9uN%&!pet2Jk(?L(hSp{me>Uff@Ujb5F@;#%y7 zAPE~pwI4cF+ohO-W&>ua_i&*2YUD;d@Fe-Dk6nhZL>)?=Ow>lU&s(s-#Qr0*?epT$ zrlmVE?YQ%-)FHo?c$|#InLWxPux)B9hJE0F#Hgy~L83X=iGNw_x;WTTH59|HnIT8I zc80s63ZPFwC3fb28}*1=?Mz_O&m!b7|?(QK+vyLu@GmJJ)*OKuSkK4TG=&z8~ z<1h|9<0qKkooThc{u7i~hS&DiKW8V{6y8(-5f;LusV%>Y1h!b27Z<#Rddg^IhkR~ZNQ8L8*DZ>d+!~*&N7WtOlDQ8j}Vdzt3eUHj}OA8-=-Bz z1NkKrw@KP_8(pLLrH`3Aud$phs=VSs%I1Hg>#uy_Hk8lwR|NkkRbMgFbaOlZ)wqy^ z2co*D7$#E$?pP1(Yy-UA^u{lcZhE^-F6t%<8}pGvPS9D~$be{)RZjeGfi98ezycix z3p6!;oDW8Q8qPy`jH3vNezP$ahJFE#45hdC?&4yoAi^3p3g~%4&AW6q}EG zKVbivWmlUe?A1n80)Gu_)@24$tg>eo5mzsvR0GWEhMt|v7ji@hJ6|^d@J&Ndsz@OF zOUe0Iv8=t;rY#GgX2ve*|R63N(T8&<8I)Q8^PF#yvq6NvU7RJe!u+q{N@x zMkkjljLUVSS7L+>$WZ=(b$2S2t*E5~M9*mv6i8Rywz@lp%c-F(m*=&1`QJMLhgGzKRb8!+cZ!?x4+{Z+Jj?Tjd}vCO(oH=JR}Y$}c3FDXN0%KE z9ypmtv+Dn#WqdV$N~XHKepJ@i9zv_NeX>$;LT_l}+(@Jscie=4;gjm*_0!J1N{K?v zVfvQXSThct1VZ$x%L6yIjRysv22K;|qBj!si8wyb&ZUsZ8YB59z+-@R=E?z<)1Yg# zCtYy5x|%NBd(uO}lzZSy`;~nb;LLa+H9d@KK)qUb>Z(s2k~+|*i}st$xA<_5{2%}6a@i~ z6@6am;DZ@m%KQ9A7H;LB`G4*vWpmo`Tx=GXfZdGbqvTj(^muF zpAmo_QsQuNi z@zLAkTezV@8-fYD;vM;0bWyQx$yVL=&zb^pVH@tKPqx8Tj7E% z<5{pBSKtBY&@rv9fd-kEqqaXsKO@9Enn|Tin8g!i^UU3XmfokcbT7bF>nZ12f=CLt zt`(f|gg!b>yzyK0OBojt;0%M)EAToQg`sJn^g5=E`OfC4oYZ+wH_(E^oPQyr^d+{h z?cFu(mE%SG`MpSHZZ#3m4L$@^;>2TsZk2RgSO#DNl|M`43{PL?iySBPCwf=Y{Sem< zemQqC7%r@>cEAo66Qf7@{{76N4iDvMt6j$u zfbK}u#-ysA?NT){^O-v|&9N=6>e7%d)Y=h+?Y}RZ z+bPEAVa?)Ly)cIiL*nE_hvyMs;BE^$wL+M~ zOXNb1xiQ$ar%xzvOkn-Ds@C={e^RuxFNM(7jVGd0ICYPM6n6O7mB_|e{j_uV3hK@A zV>mfOt=PzG>X*GRUJ?clwV{j`+NHxRp@W;=AF}e9R3CwCjyv;Wtv}b@`KB@i1jBOevXc`=)~i z!OZ*`gMrmhE;K^*CT@dI&CKNk_=)FW+b&0#Is?KfU=McWK!V*ySI4HEIOUn$Av(%8 z7T~mG%3P+%5^zHr{0zl7)ChL@nqZX|PGAUUYRnP#vd3ney}7iS@j%9|JPJDSHU%dR zU$#FJR;PZ=Q1ISarem^<*4K71FkyuWPlMze?e(&SzCXG!{Qg)SrxZvxLxgb3?-ouR zGbT2NUxZba5j0Pikf=Pl#2x;mu!^RoEq;kxHL8w>(Vv z>zmmSTE-&8p)5n|qU2_4$Rb~h>1c#VC*+vK0g5OQeXfjFTI*^eu15)%(kHq5L4;>) zM9d5x&U$RDX%5tUOY5T(H~Vw1Ug;-c^xwac`NtGqF#&%K#t6fO=&!fE2E}$D=2a>Z z-!}sTlG^b9 z8VR&a1wk>APk4MYIDsD-$+JJoi`QeQ=thvD^m0x2A-8lg@dbRxhD>=_oR*m@e3>Fb zn}lEts;03Api9PqKYnZC9G0D z1MW_|hfa|v2ydQh7}%sT(0yiXdii$$)y=OUvlt(6taHb9dJhw4?NK#-p0B4*2f=B( zvK5}GeO2_5NK7)_tOH|pDDsw5|DN3J`P-oahWQ5j@9$$3mjreXM(2WSdi9{uyjome z@!0~^N;nSNYH`IfJ%_}hWZh&OkIffc%0+~$@ar%%Q#{GSbVqz^CgJfzc!utCwDz2b zA?njcqJE)#hPa(}oLw}G5;@672mWrS7ckl{j=0~C-%Rf6E7YLln8(D&Q4v#6ch(j7 z>oD}wgAajTTo@YettkCLyGLQ*WFKfTd`cMPpa==Lnimag)4zETaDLijIpUA3q)h#9 z65!O7k!iX4b1MNX3Qx9sFW&Iio(GMFn7^Tht7(=`TeCdXTJXN#R4k_6^*C32^5*Bp zX+eg&MOK;*&L-KwqnmOkp&F5NP@Rs5#~0ps##ej%;32&!pN2&Xc5A<)@dq{Bz|#Y3 zg14Sa-aO3{6^bDMgeSZ)N)({MJ%D=MJs@q2y42Wr$U&Qt@FIxfWOy-qW+Jf7G4VPOPfP zV40p~A4mM4o8FBL);Q zwMQ%g2ak5(K&O1+1YQG>3Nb`o&|~{Yl!fB+ksrSXy}y+HKh^cNgDv&!{rJMi&z%?04U?gSAGmrqE6muH}!@vvYxAG5%*dh>N=I+1eA_e=kJ7{iG z0Jrn+?%4Dd2Y@p@QAe2GJOaE50RHR$3vexX@0U)73jA-nt_P27c5*07~xUN`3> z3Z@KDkQoUAXQ3rKgtiz?14N*j^YpcXP;^ty{Va?Mrb9^#T3>`O)Aj82@K#N8nSW29 zy8TVclxwH@?z#fa((yR&$k|{kLx-sXty}Z{?UxikOb#-B&5aQ9F2+QjdSMuz?Kmx| zqosFdcfM%7xe!~Dd<+-ZJ7T}EcD=ly3YO#Mcu@l~)J2I-s&21DSd%L}`1!UP_YNx&YE!lwh<5RsQAE#(oIB)o6Oc;33X@3)K__Z^q+`Jfnr_7+#T#;3gq z-k*cn5v|*El~#z9W3?ar6bW%iCVdpg5xYZ>JRT;;r9@uTo{8;Y2d1F*d#(MhW1(I6 z%g(X*3d+L0cM4s5%@6p|(6S@^m+=UGiWz`=qk_y+-NJ<%BgawEa6TY(j} z9Ea8>J4VVmtRbfy3yGd;9u9>VT-Cch+Bb77VXcd=O!A-Z9KG*-2{Y(vK?7fMoYDx11ox1xx7Lb(tL}MNR3NTkuA61!7t)L8N^&$7AtL?k zNiGMwbs#iDL>DbEckek4^ITMI5FwUhfQ&|8+vpPz|1_ag%8Q_5!4ZH?EcS5IGh`(U zglHJ-@v0CnDFC1)5F2E$>4;by9Eo3LNbfYv1#$Kg(LDdt`Dn_qti@G z;S1qqQy{9-mSA`6ua0))(~8=Vs1M|}{tg;hX7$YI7`j!2wUB5u1?0hhKn7EO+K#*n zK&}QA62LzsF@t4bLW7O*8IQH_Mt8^JUCQI?nXX|-`cwwRYaq*s32&iy9+2RDJ^3pw zEI8M+{Y!68Nr!WFFg1)J*&>-iVuogeZnO8o!VO&mvw>4HELkFupzdF3qNkh#RnJg8 z=lWc3Rlby!4jk#~utQ2C_$LoU-fFsm!Oe35k=Ml14@$BUfR0&Un8$lv2fDe;O9#gv zR>3;T2_qgxhQeYoeRsHL;|AcVEQR;iTBK8*p{>{@U4|W(PlH9Io)Zb#wyszajxVVU za{7>6m~O#`7i4jo&C_&_!+LP*fZ-h=0$@R!kFfZzw}s0GP2S>aJFhvrNIhv+{XR&D zslTkAU&?yKYW1x1Vl=mowy!EBw#sB45i!5R#DD_S>MNl(`{(s5&}+bxpBp;XnG3pZ zkos^A#`NxAAbqV_@nur#$!XIYmF*SNofPs~VQ?VyGc`#_xm6XZ7g}HW_T1j5jkRsg zi@pzMYw3oW@5UhQ_bf-!abm_}54|rZ#pSNp_*w%Jw2)J%c)7SL){iiyn8rh+GAqkN z=u|MR>0K6Mq``!K z=+bLr5!C&Y+xjiPvf|{uFD$PC!lo0>L8%O#PUT+}jfIjO9UgHgJf}hnH7@V85Dw%s zwK{}jF+O++w1S>ObXX=D#&cs?z%HbW07&zo7vLL6qD6I&9*MXRph^25E6C#laY+vS zD+#Eys}9k3xj|BG2giXnHsspO&kb*kf1d5 z3iFFAL65h)GCoVT_>W%gJg>R$y_#Ti`dedmlE`pU=WUy2@~N$le~6VK8#Gy1zpD)c z{^OtVKz{StjUYg9)$*c#?y;uyjs350Wpd|B*3PM31%Aw;4!r8@LGqARFDRl0p$=wF zZ5HW>ATpr}98~R=q?IgqFEC9VCLb*ZVEVI1jtViCX(9qJ07G8)X#j7M4B3O75!?ee z0I2wbs-p#@!xk(TW4REBN}&-dOv`uWQ*+UfPj!TcaM;;Qy6PyC1kVR~@1Jz}5+6n! z_we0pct`W?SF%FbS+BRB=mDnE&OusAQH|Vo?#EBM9UDmE7HtVnuVOXt5(|z2QC(9m z;Z1^wUy?`>qjl%<&YIv0Pqp1-bagk^D>34-Jnh2C*wEqUY~#x5g*+wjGc-2P`5X2b z5R0e^`-Bwk+Lz%2uxb;aN|qsb^8lW zUR2ZeneXJe=A~C+T!A(K1b@sVR}k=fnHp!1FJKSKW%IA_`!I-8PV)DD2EOEU7sAx- zWwA?!+55q85z9iHxHhqPrwa{FyO>bjrRtO8GJApE-_4zyDjZt(M=QQX^VqoSlM-a= zYqu9wfAIWxa4`Dqw>z5KA>OZ8N7uJ_Cw43H56bH|>ZZlM^+KrzL*>>crO|lhUJP@*nistoB5GFyt3^E=g6KTdr&Tv zkB30Ats5(m$z3dZ4A(t=Csvq0>EwC83zhz5fmeCt8oBhv$w|B5rF|0f19@Lg%S^|f zdGiV-UN1|BD6Ss%+)mI-b_J%hFc+M9mKo_ls2b6Q7Z%5%a*d-`i}Bd$_x-N54Atgp z8v0xxuGx@!R4z;;PYbYX)bn#POlr^^o(&$2gN>M!rfQXa3_hF8_agJ_=ZqRQ4i1aJ zI2f^-zt)+NmiKj_Q^m_z_}KgOEnL`}0jhc%1$&=Ix*%o`x~RAZsImD)F)t@ z>}(bwgPDX>xGg|&6StK z@3(oZt%44YnIT^6&yIZqDuRu`Wjy|@OM=M(20~FFRZ=dmiN;J+leH4sBcuV~ps>oG zJX1xs?e7?~bivzx;;sXcW&k5)84zYJ)1gfHDzyMU-s&`xTHSAYSC!5Q+EW(d?1x5q3!Kgwn3i zC`2GbaNBXq?X6l0;rx8qyH#A;f(UB+IilVJ`8l@}b}30`UK1;(2(khFJT?o7Wg}o09M==4=^)>6#+) z0@w8E(sXj#K@kR4!=6GIrlHD}hTFOdSg5JeRNj$<)O9WMkch=0ElZr8I?U*tH0xJ zcL$9$)bb`c7u+_R*o=+(7rwE)09?vUC)iOyT@nPv(!+FhKYY!={dLOQ zm+j99x>2Y`EH+>p+A;Ph0kGmco9lPd7OX<`JhaRgUpvnTSmQfx(vL9jz52Am?7%K< z0lI8)Y{Gl=-$)WlzjK188PkSawfgx}Ks)yvUj6(E0T@YK2l3?3m;;7r;+T@5Nq@oA z_%cEe^l{%U!2sFtK#zmnolF7v12j_{iL=$~C8w^i`THicJzSg;%QXfh51>E|m4dUL z8>&1WjOi&-ZW<~0b{0Ffa1ri}O{d}H&#V`qAvC;;1+%%zZ7Yp+0z*JZhN`8a<3N!k z9~NS41b-&{hO~6w2_0toYdf`{t??UCDxqfZ;QDGuf^3%Ne3PUxq~Wp*ePPt(09B^0 z%JbZibse$zWZ)O4_(|2A{@wOU`NxAh*WShog_z6$pV4{Koq6WiJxx_JW@_d)O>K2&&=@c0iMG7 zepl+dis1JyLAxog^8Ho8$FgZqb9IUSNfcpSD~@dMSa=ccFA;2j;>x@o?Jk%rLMQw< ztG(Q_TofX*@ZkBo65-H3wF{1rOZ}t$ z@|Ya|oW z(NDjagV5hv4~et?=WCpCC51km3#ju#0NMNQz4&JS*z zu0Hd$v9|Kx*dmJM2R()B8XP_dJ=CRe&VPP;>w9CiKGc|SXIjKqJWUTW3`8z&X@Q+3 ziWk!c8fnP9AcKexbF|ak>R@9kPU)A zQ%&B80W%+3b`F%iH~#BeaA9$ecUC|F21CNIW*m@MB^M0idBchXmh@Z$aj!aE_L%Z; zau`Ni-P)N%b`+zlrnmkBRC_EQDki=_DK$+qz_drEq12KCFZ6_^Vrqk4e+I|Kg(;7A zRUpfNBj!y@ofJ(;KX#+OU3z6H!bOC`zOu#ODO!7YnjzTSphxoEl#aE1HQ0i`=Q4fH zIv?xX-*{lB006>~SI{yQejzW3}<+O&3s zE`5n9>kHaiT;~Z7P;yb?1{u1Wr)$blO-8i-hfmNnw>)tdOo5=JDc59c_*+S}VFT0& zqC<&t94a4Up{}mpfVTf8MlTv21yHEI^(|iP8-OYvnFffSkuBc_1iqSiND!siSnhdn+^{piGxYWzGyj43VdG`& z-8tT3Job2M^pwu1?O2wT-~BY)kKm1n>&c6p6$RFBKoUY&A4ufYT>{loW(b6pJpRjj zZiKD5A8jW+a|Q1*eJh=6C_N3v>ji)?W>kc^>>P{fIRIg5^gkCCS(w>U5sn0%fq;5MESZqoa4|0I3c<+f%XVDMBk zmw43te%jOVDWWbTLrsWrFq?q;4BUQ$+EBcB+GE2ig2WCk1!163C^BhQO6Z}nH+P+9 z6Pw~l4u8!wP-ATx$%1xh&@VY=>13hBQdst+N4SR?@+Vt_#fN4K${|JY9zyGLz0KS@ z#oR#Ow^g#kXRtr30JjA7jyW^J-fSO#Ij<6)M%_zQ6InhzYTq;Rb^k@@rQDf&XG)5t zi8!{&*87+UaQFwV{w!`-4-qe}wvldtxSHxxmy5RVc+9M!ijL6x-B-vlB6uD$ta-Sw zB86RdiPj?>LjFC^!z@ag(BIa?=w$3a_;KS3K&kTHP^M0PC{SAlWF9>RB>Lk)^G=(9;tXL5+OAqejwmFP4e9Jl5=e+X=LKljAjcG|XQL@VED>Y$Ng_P7GW zdx5#X#^uAt4#9u90bpmO7)2JSh6k{V9KoK2p}?+s8fNR?+c9>GpYpAYJpRlA6U8Ww zE?lgulmGmn#d1Njb$K`udQ2_9lp70vz8Tw~R^{M_9SdJy3E5I_{54dNn|-X7XZl9w zGfZTK0n@XGd9szSV(bH^MTy*4e&8wM5#!MC<5Mc({#(^Fy0=z4dCnQuCin@x+SZbo z%RgMmcM(nFnhx$$aS14m(^}XxKd*&bHpW`^> zemwEdi)I@~Dwp;2l4d{#upO6@iK9eyL3U48$#Iw(8UN55k1d|NWC?!`%3&$U=>v9A zxc>Wl0y)< zASYW4S!`b9Y5v_AtdL56DB;GBbSv$vXe$^g>qmONzgo_c{Q$yGr&@lE+Vq@{KA@)h z?a*_q&RuV<7jJUvhXfr#c&EfZ_G1;Ff-vJNV)+lLC!jn+(dJA7w_b&8@Pc8|;5+0W zJsj@^ z3dF0b<9-2lh|f*^KdT0>E{Bk|$)}I2XuLg_&$Xw?%Rb`n*jv%9ngQegb841-CZ5;o zQ0Z2x@z`hQO`P42#^^KO;rZy)Urt(1DzvD$<3aO3WKQU1tIxz9zac5pJnPn()f#lx zd$=>Jel=e1&LlCZo2%w=@OZQ4UZp|zl3$$0$9Y}N6`r-cP~On4@h80P~b%Y`9hJ^b2V=v1S=xPZ(n&4WApcdLP+ zZJ_D(P<|J6!tMnV_E@s(3H{W5kJmClCC89Is}A(yg;jsM8taPW;h81VI3tA~0nryh zB3I!HH;APKq$5<>+CI`ihXD%+^cs=X^!9p?sCadU<+l-OCnRGqM8^}p_&;>>!KM!7ESVqwGMKQOgOdqA={ z;Lq&;a`&`LE!qO4?amsKob#tIpWge(%oc|VXDU+k31G0R{i2G;lMv2LM!*P8LVtT7d!Bk$E&Dh zx`(Fy2mdZBIN|MP)(a;1+KS0W{I6}wft1TCw^3_l)~l029er#pd5Z6H63vvPtu}`W z6OIvV^m)!92{sMm{ee%hRI*#v($P3*RiLPx#B1A;0ts)>VXI|%7R?C){1R7BUFOjZ z1B!VF-7rDUp*O)G<@gIB` zPXBqMc!kNlR6vqL6~YLPbb&?ycp=pY7oc&dbfAZ#01n4JJAf|xayMaj?xVo5y+X1MnA34}AB#N`++0{v$==obMEo``BH{%u4lgy#K@kh|dHm z^lUX=Gh6vnoEitcjPOZwB-;|(BZ@1?wtXEm5>SuRynbFv5^6|>cADkF;iPi?LjOMP zMb5~7fk;6HTu3ng8_~8Qa^ncM#bZpdhCCkN2rf(?W6Hrr9@rkhMLuu+cl_~iz4HG1 zc|OyK&$mv|(_G!k>%3}K?Kp2xS902k@pXR~1A+Ce2ga%2mj*u#$6Et$;4)QBKGs5z zpH~VrK2m??RTHnTD|DUqCFX^*Y(q6yQ1O?_LO>VuLak_{SF+oPCs37&VMyt==_p}30WZA z-SF>Qyyckw=F}$#U+<4q-KTP@K_Mo@#x%w6Ji$jVTMI7FI2+k73|q1<0V)g`XV4LG zAVrRniU-V#M!K-uXl809X^2z(|h{ z{(6>ampra9DmyYXE}G6Hag6-{GT)WS?izI-CPZGC96nxmaR@o0)> zRFJ{#4O>9cxxn=7GK&cS^n(09sIXAb1sA~-h!9r3n1sh~=dW|~BY7r83p>X6nEYP( zOlrl-lwd4gzBcyn#g6AaRll35z4kiPse%PzXtKn2WIBwtfk9TBiSn=R+VpVi3J=q( z+A}v&$22~j{I<70#B$pj2Nd;~9ADVA-Oxij0RLOivcz-Ub_6B8+RUjs8-?YI(t-7E zDRP^(LQK0c%PpNQ@lnd$I`Jsm6_3PUB!*HC5aG}kV&>LuV-OZnE7MCLjb4E>T6HLe z)k-WG8zG)oh|u-l*85=k`~jvcblkar??K#cRvujuP=W*U8+a~d%CwDkFs28r>#RK5 znPh=Q$#|fLA&FfVN(dF_0OZ<$COxNR4p!P}aH-l$744UW!x<&cqhqz)KELY{y8frw z3@)$X{`k!^XGFk? zeJxHapTw|^CayW8OkQiK6rRQJa_KUsTz%h|d5w$_cD*y|6VdWxfM%bKBOBAWO!|}1 z9}d?gP`V9?@gyUCB?N9El_84GI1`<^T)5Uf-X{!#Vbbv-bRqiD$&cW;`>Em(j- zd}lI)_coTDUX0gfIZh##s|6=UWAvY0sonpu^(nXWaO*SE4D`i?Igb`rtt_4o5zwH` z)x&Q!7nOueYjTq2!O?r~bizfD_97aR4Cak4Q=%@7dL%QOkQR4x?w9z&8x_L%S7ROg z@U%95LB!Y>TQXJO$gXid454L?w>_iu4EjE5D9}-u0wH(gXcnlS08G(Ct@3 zXAMiZgP#c(m=L*7fx!0zO5vIK-s`h~;w3q|kIgMAYf_khy8Yk8v~ z!$7$3rYfYgc(qF1z?Uf~A8kK{SoaY``Y_0?rbTAru6%bX9a>#I`59W!&+MTJD0iz< z87>K@Q%zrd1>AM>qVdtSNAengbaj0G$?Aqe+1*oR;YO}2xn0-l8)gsbk3ThU_+!*J zvhzw}w{Z#FPo0nEpPt6_%uBei7>!QxjCd_1csS0WVpt!PUrSRBQv|-zBdPLhV1?!7H??Wht`rQXl*fDQ6==s5@)I@u!j4DKowc^3=8B}d#A3>W zd4_b<2Jt^FxShG5XGFSISU=5InK)!efC!a#8_Q%Ql7IRJGVCMfTJqTwzi*C;I6qKE z`!G;*LklvN>9m$IqTfqF%gk6zog3|!()CaRvae~?Uwqk|^1SH-x*ZP5j@Vz@+Tsd- zc&j^2h!@{%1G;54%j32Nw@u}olC2SuzEk5dRO6BUZskBX&vKz6H%_>RhUe5^ra$*L z_|{L3lSrox7P8tqZp-l?@}2BQjh^vTyz;3!-o}ueRz7J_xbB>)wPl_3Sucs#a#NC9 zK!h+eq)XzdLrPCNlW1I2)dNNa#fWAVlE1VBen4kr^XVKUc;$SrBsdZ$>l$#0fV3%^ zau()$-QM;du)o&xK5cuyc_VO73)DU`l3FV%but1p%(-VE0b(4PIQJ&)JC>6$&>gtm ztBa!s#Ul2_F-(H&?!n>GHZvSJR#mVfSioIf)0n1Psjk59%LFxal!l*USs0g!PnU^Y zK4i3jD|e#4#p?{eT_8cOb( z;-~I1l(!hs96<~wa0lr8f5#p8lc8LOg>{OZ>Fx=dGFjjZ8=2vof$JovR6Za#RB+BV z!nID=(W-=8gg&1imEpjp9OtZRuDL(xDaQ>t4m-dRJ&c>bv8Grod zVCZ2@nzfW!MR7lS2X^%Rx_?&HqpN1;sBTNV_hC@H*syECh!T_&a`BgjG~Hti<U;GraL^za%KUt|5sd<3+Q8kQiuY(CIl2 z$6f)=MMwRY+qQr4@Pk_Ecnx;Y%GpYpkK1+Cydb540)dRUf5Va{8wa#)R?}#wyQ!ps zlVs?uUyOtOHYC*{X+SAc-96hv3XhW!jhm8Rw6X&4$)5XAj7ttA@PI|F?Y^kHjl~yU zxUGMQRQUivz>>vO2!tu`R}3wkvjt1$M93vC0Y-A*J8n~F(eP1e&~gM$rYy8c0T2b= z6LgooPVhd&ami!Rsq}hO#g9_XUdx&b^3l^-%6xQsj0>N4A7bikkIc4gxn6>=MW0?0 zPzZLX&|@rAQ`HRZlvKW$)7+2!d#UnAF3N_-FZ5l$<7!eo*P`f63bT^y_T(L%6MP;Q z*pi@H=MK^(dOX5x&R1!irSB|%$XGrAqGgZtZMPH*{ac4=3SR4x{GP7dPE`JWZG3lM zVBI;_t<-!$yz;rduEJ=uyWE3pjAm@}WAa`;)0Al^{_rO4)*h2IQDEuT<`PH`j>C10 z%^j+Vr&C>gu&;5K7^FbA7bp<~^x)II!qh%`+kpF|O=Q?(?vDFjn5P&YDwc}#Od67M z$S57Md--;pXI@PklpTVQu<8D+)|R4{4xD3^2Gp2}ghNE*8~vmRdkleDxMJgWTh^Eg za#shM925O$CsOkae&{`S-~j`shmXHbh)ducP5CGAyWQ8f-RSRF>`=1ZC^?!e!My*+ z*If}>jMVT5YH6Ysg1Ip)g(`=nAcKPmCl94|qrU0A$|U$3=`10NPJiOUHv^AUQ63o& z!)sr7T@fzW^yA6nhopXLhcCr!wg+D#*~gab3~s4=oR;djF_Q0GH9eLr7#03_vikDl z;Zg6Z{_AOpCn2>aS=6s1?hO)xncIIkXD)_ZKHi!lTOb`_U)%auBWFwf&yMQ+;7OmJ z5x97-TfF0+zEnSyCCgk<}uGQkx-x29+JNmVw5B=Ki^mf@Z_dGmO?QD+TFAg zu0n}ZWJlfoea7JrFIaG}tF&fWQwhna#9Ee-o(UYGu@@=SY=9cc zwk5}Co8eE`!SRt1!~0eFY#3WGH&|IQZTF$>Hb*PdConHmfOnYCzW55POp1(@h3mhu z$OTY=uU`+517B$sL{TxeQ}Hj(2bOfR`OHA8+W6Dkm8)YH<)cnV#EqtD6mImJ9Cu?X zKYFpS*J%msfwtED{?^2F!>flo`G4=rh!vRW8rXG+DOGTw;ZT(qOD@SN=v2v*LjjeE z5ZK}qJtUv)2S+CV`9-}Yp2+vIpynU^2d~2?4iejE`~7q|uDSE8GNme6yZn<+(A)h5 z&C=VekH!UL(?1684T{%vUn{LIaJt$c9dl-YH~-+f=k?9zzZc%#S!tQO)jFH^;#2AE zKS|>P%k(Pod17cEd(?!J<~){7N3Te#EA!Re71lr*G210OS90)b`v8{55s)(Yy203`Qnq)yok)rSQC^b+3Ajj*+gZB}*Bx!i zoD%WTBhV3>JVlG<`lwi@4_K0a3f?l;6*1tV7K=X%q!mFebM|&G(4_-%6-@f1_*odQ z0b6(=pUf>SL-=%tC?$I0#qs)!cF)>JUdd=B!cmJ-s#m!HYN@XHB4;b|dcSZ%&7Evs z;0w6^w1k5EEdxo3;{4}Z>f;n2pg4$P61ckx7T)0oul@yJYJAsn|si9H@|(6H!^Rl zV#t@zwttf#m|J)Js{6#tn(WWFvI#d1PL3nH-CZ&pc04*8Sz}elJU^Jbe>ACRn(MKD zS4WuF@DIITj7>uaiDO0u-|6?PM-=ZVL(ebq~*PoZ^ zhnl6$;I6fD7B_dpH;(;9S! zr0Aj&as1SANY>(H^6jZAwmPA-wgEBFlYkpi>$3Gv4EHFha_p|^jFDEi_F@~x&c%JB zi9#V6%1Neg9S3M-gXwQ?* zNV$J38&n~bOO^zvm`2aQ+|dO$l2lPW zfnj?tR6#3Cd(v}W-O$e6^9a2?sv>%-Kgar47{qPd3O>7e;j1b@)^UE%w5l1x&ffJ# zwa&EsUR7t6sT?R#qvfy1pc7L{!QotgJA|THn9dwtg z{2i~S#+~HnEgx=cJGmFG%*%_>vL|;<9nCb1+zawS_7S?FVi9BV&@uvxdyVFVDxgQ} zvi%VZpWk^vWje^~ZqwKSu==_3KUi(jtJAZX4uZDAi!^8Q1!1mel%B0W+rMq)^Z(e& zeQ3nT^HX@i9IM@;Ef#1ulTpcfd55Emy#~W_RBa>hdszE zMm$>`*KA{lGp@jVz;k5kqGEFZ#i=bx{3_xqMT6WFtKnddhA5F(HAa+F6lO!g>bD#Y_DGNPm2TMgd?^>aUH}fb?c$KG zfJ$GkU%B{VF38A&md>FgZ{WNcd}I9Cn{L2x>Vc8N6T-tiHtF5Kr!WV*q&oeAA0WQ! z_1bn%fpIxVVM5~~@@QED< za_~b2i$UJ-Qy& z1lWmD#0Qu@4&8zxP(tg(4Tdd62aKqdDg+rv#i`AIzajA=cc^-PXPMNEl1lj|IZHE| z8UGJ8!LAd|zou-Czhh7>u{506MbydWl{)sMoj?BL61DU8{LCN`(7yS19^PbK@dpWj zilGnRdBM4-OZ)6AAg;v;>TYN4w}9MB@z#0f6NaC`nwE(ZdighiwF?FR6!Ir2XBh-)0}zC*%onvdFr0N?T@tf&6_9}5cde|0#hS0j}{7k?|@%o z;Sb+|p-pPvd?ZD|=SY&R0y2M*9fzG~E9xF=ftqQQBN&Ns!PkWC}oPk7`cqORzje0NH~e4*F28Y<)RiPmgHXrvgBJIeea#ng)tgI z54`jvj=)~zN*g%(rgF4GOwXPA@hfuA!gH9HcF?rXMu(&$?fz=oF072VSW z>`rgZ+&%@)%;l(D3oiWrJZp=qvUx3{k#G0DtY@vnZ=u+eyYwQj_hWwQlg~n4L2(+( zZGIXPVM%GWp>Kl9rL)c#Du+Fyziq)E8Qg^?H-eoaseO?@a#R^w=Eh<=&Rbpqf;I%Q zni3=UH1WKa94JcG5{EKV@hW|}58>yP$J@UC|3jBd-N0T4j{O4?kw5?7hK}AE?$L$y zlA6RZJS9xxIzkUB|N0llKaG%&n()zykRfDK5BhT+V?-wOL@eHXCLN82jT0Pp09C+f zK5)>%o-&9Y0<-tuvovw>)7VumT?gYzkkm#Sn;Bn8&A{AL*}c)kOD8!p;5G zQ_iJ>M)jj~1n-EPaPjS>x6PA23_wUq*@38s%J6=dfL8Ev$%$Za(FgmwXgsjD4l!t- zZGO80jCM_%qD;@Rlh%<=$I*7%4qohug_Hwwfu7iD717u*1`wl>tn{VX^i>92+TQM3 zv#+2t8u)@UjGO1)&@=b(VYHk9)7$?!vgUX&Id&BpDR%DfKv|rCjcX9#l-vJYEZ%27 z!oZw@0c98gdq4Q(*84A*{u?tz=;G+d{W1Hx)0x~F4S4R@rw7}Rj28u=F)U8=-6g?y=k5YhioKEeWL|OFU}zeag@YFr*OeOA zlh1|F0u5Xm^}O)Du9&i89 zY)N)%%dG6M;+mwhk9Shx`e)yV=eatE0Do|>D%XpAq5i@u2$4p7nK{BJka^ogKK-2) zv0Ah*$0ZTbmjnLY^7v{|izS>}9?R0yjbAtEQi!D0-OHD!`7wq|GRv0ubQ|uB7Wnq&DU3IUF4wS=J6 zIcR#;{+<5P@OZ65{1620;M3F7Rj||spZUR+-%I%q&ZL7T>&KGufcA=P6rSTF?qbBp zOnQ{6H#moRWKy8s#>0(G&Ef^RoO2hGcqHRU`}zs@X6#*NM}Ax(VAq5H%*=0zFZkvv zN{4@cO~`Uh{HQN7d@%SlRqq(}@L8=|4wwf7cZ|B1J;I=ieL+O6&9yMeCH~}{Z|vQK z4B9u3z z=ASPniQe?}eP@%c)_iK?&Livt#Vl4F@G~uJm(HH{H|Dw^LF^#c$y|OSEEzLfPAYB0sL7a~-8r3Z z^jWdHvIfr;-MjT`R@b-?qsFD%UMc**1k}(EJJl>aPshbZxYSz*+rUM1hXlB_8%8E| zo`^}sSNqJ1Fq3Y%pVu$`;ge}1F(mjgp$}=CGJFM|XU*1tG~qzIQl}$?7RK4FwjU5M zan}t<>$l(D&(!k$R@JW*b0rJ6HT{=cB;_O(iB&89BsJ-LmA9C+uBoAML+JSN?d;1&gNR0cgTm?jw1x7*)i0M+Ey2I}pM(3)R2t4P zBl%yvPDEwtTA%%*N+j7O8Yn5G*b?O?B;>Z|eZPDuVeCvh(>k+m ze}wQ|-*cXGp65Alj=qqRw0Pko3n>)J;^Zxf+u{2o^jYv5_`ChOa6WuJn3KRspit^d z7J0Jf!SO@;wq*R3LRn%&pZhk>OIrmeAC|IrNz){J>A|c6*_3@*d&Sa7akljFry`$> zd|DVIOQBGf^&}@I>^Q`ASf5vlZX{eDC^+_X!=!%UMX-@lC{?du+BmQ#{+vfTAXH+iqef|D3%RQH~^VW5AM83+J z_Et4_+isU|y9dS2Ms!Ni6h3}{>B$rb=}9qE29oxH0lkxOVb9~$5rPC`d`dE|F^Z{n$OJEQHfUj@~5=C)WM-2 z{rU{I`j+R*mN1>nDJ<=GP4{;Vw%ls2zk**@u>r-D8eAw&fa2ABA4CUnH5gzG3IswV zgU>)g!c{V{2Ash6N#}5gt7OEjW$0P71d+{848XB@THPC zAFy(yZPCWl4b{$K{h|uI#(Ox>4|CMKFS^q_7kl1H!J+I#+0v~I7Tt}JwZ1IJ=4zbJ zdpPZz8TL-;6wP0k`!6D~ojCvLhzY@_e1&}1`Ok6wnsqpb{1dJX74ark&CA31w$$Ya zi1v81r>wQo#^{KY;@jR;pm>HWvt^u|ZDUjceG>+K2L|qE4!i9J^~0;r^9uKu>il1% zGhLUA1)@@&$I)9pOucqh;_EFgZ}Oap5=HYaVo>6V?8%~|cz?Zg2Q=QXni&N%{6*}{ zKDYZ|Y@R!*jhT9uow_`Jx6A5xzE)c0En>#1b&k5VzJYe4(~@zgvAL7SaHZ{nIH5v* z=q%A#+XKXk-;LSl>RD25WBk!UoTUX=*|rNEXEz%zo^}=|#o@E70(@(a2}8&C+LC9w zsr`jOa7LlizIvvlPvLu98{VT~ZTa&|(OJ!F%9|N|&I_GPwa$f*emy8RKz5RqfQw!5 zEMR@EET~q%Zjy!|s;)9Bpk2!+lnBdNI4KthZ#%;KjGB}xbOWgm2=RM)>G{1$lEN7f z*tSa1_+{SVz017eSLwcy2`nJ_^64QCO#~7bC!hE?hwC5yCx;(a%o(FnV*@=KBC=TM zEjCoDkAI+40BFXeu_o3tT>(bm_mJXM_6k&h>zT@%MMp{G+b~y$C2pYB4UZ zB?7Zcc;|XUL#RzzU=c+@vqBsrr5|fz!$!p2x;yt1_}|?E!8%p+O;n$7Y<$ge@z{{j zXW~eoYcJ6ZC#5z!=@JnT1o%=g+Gc$JsOE_nrBZEUskQ#UtjQJK`gwbrHc(O>|nQtdBYX0;fF7280>b&m&?5gFSg6yOy|09 ztC;GHmn<+{^g^qzVlM@ug6a`E9`Fi&7(K?s8bM@APJI*Fup%{J9|Sv~Q%zgPsOM3q zZl`6zQ#mxkLhulVxv(BuS&Xq=-t<`T zY?cC;Afv(exQpc)Ssm5v{<_@KS)eCjLr4;3<8Kn>t7T&ppCJpTkfb2UELb8!#p@l^tExmuze+ToQENI=&HJtt ztOQ_J<#lJx#tyZby>n&{7&Ks-&CLz5ap*~vOaH8z08FiVEM!VR9V*jq;}dAuvx`Ig z7Y(=f=CWO)e%Dl^#Bfsen882eWl9XrewODg&gA^PL*2;OZ{~2j_Q*!`%LqxDgQ}X5 z@A#A;{TxK?m$`B42`vdlQ{}4fOd)(@P64z3hnJxmN?1N8UkNRl?{*UOK(m5H2{Fv zAx*>zN~Gk5$lTP@^Cu8dV*e8@X_(pqib!mC?$%>^{TgW08g2Yha7K|M8G2J7*!C*? m#FCl+yEG4z$*h`@zwy=5o$sm#?uTCjDaq`V#M;fT9QiLFCMDPa literal 2921 zcmeHJdrVVz6ut{vrZ5nNQd;PP7J1nRAZQgR4|$3_RUQhhfStGs2(kzkaF3V?h#jcy zrsy_>Fii$x-|4U7fHtKj?N5+kst`UQ}|;oV*S5&jTVFEr7nyaz!>Q1qrP zLB^&OV>7CW`N|K>9ZXj^nOZoTSvr|ng4M+gvuc?Y2%0&DZVpx~-Q1e7+?u%p=eiu{ zwgT^Jfp@dOuePxDu(Vx`A%N8rLs)|$dSZxcF(fZ6c^#I#9&6`iZMPmr^|q$?;3&TM zl_31^_Wm{wAOdV0HrO}@+B$5obqpjrZy-1Y5uAbvP9X%RP@)TnFrv#w(yDMW5)l+e zIGMJIOp74XBFXe93O(A65kq0dQd~DvUANl1#jSKtz{fx~u@E5vB5s4osgNBHqGmw$ zdm)Eh$f*FTt)SN(V_X!uUKF{to^o$JwYsB*-BIH!uk*jr7}VVu+|v}^)4cH}65+So zBm3K<`a2@~JEHDfi@tL$=5E*4k?y3CUy?@qIm&+S`0%dB!|4;Mk0w<7rz*bsw+zta z|3Ck&4jgYacLWtL-5Z*?4}#3vk?%Xr<@|AQ(K_rn7Hx8!lghX!hC@fg1tBZsedTq?#MYj^mn(rw+z9Y$uV$_ERi z-jn#g#MrSSzi@%~o!{fS3(quOxbVpPX&X#cIEs5{TuxhKL2gTvWOx3!x({xLVFh2b zmXRgh_eVK#3>D+bXH=g)RNRw~g&e3t#bx0w;j>Uwq?2k$=oDkU?98@>G)0ZLjy96e zR!Cx>l#BK=mN9dt&T8_mt8b3>xJCN1@w#VPumBB!$V2p?(*XcZ!hUOkBe33mh$K9rScwJVZz6%$_6N=3WAy#oXBZ)?B4rn7T(MVq^};#-%1oLmH5_7t@06GynnMbE|TgN6_-dt2owZ zb!)q%u0)i$$>o9+Z=mf|sk}m63`-SJVlGXzTydDE@-5|E6EU7BWJEeqP{NN#!7NgI zBOAS<2GBUQ!eeQ=h7s_=SJS+q0g$)Rk6Y`{rf zC4(kPgK958Ly$fgJdYS2>4V;Vh!sQPKpzZ_zbrg8u|Ls;#F@X;JSW;EuE7@1&Z~!H ztj65>BdiF}>@#q$R}Co9p9C|BI=ijapaDtRk>7a9XNE|ppaFia180<*jOBA2J zG+W^2nqqM8VrAe2DU}rg?nR)dZ_P;rvqS1*aC|8}c_-|pn6^?jOHLf5^`(W2g-lX2 zm|%?lsYQ5Y_IzEXnjpV`lNAH zUPNqLgU%msWv}J}zf1N^4u6{v45Zb7y@Qb@^F0$kn9SpWb4 diff --git a/src/main/resources/assets/actuallyadditions/textures/logo.png b/src/main/resources/assets/actuallyadditions/textures/logo.png index c80dfb8e9dd82ad9ec8994a44fd15e95791540d9..7da66346cda981fbc4b59976686c008f7fb7eb28 100644 GIT binary patch literal 115053 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≈|Wm-+g>g7yve^jSSa zdP!NFZB>}zzRkwL;%n1NFa@HoV=&WYHEPeqbp1>PuYUaLIyc6RYHzWwPrquDn*cFJ z9?VD3Gh}>(+k+bz6i9)05Vb!t&2St_@-M{$aiwEO~vF6(@_FQg^ zsb#|xb4BQ-``x#1-=eIkJS6S@`|ls-ndBJMow+sf!BQEuewjaFNoVz8O49W>=cWkJ zPsyG>O$j~VhgXm4IXt-`;>7H?#Tw2Hc$pS7@^O7EFS$mic%gM?_&~!zxrC9`Ne$M%vc5R3)>s{%YzMET~But8)1EVASgmuvF^ z4Q|bYMAGAWreHm5*fXZ_Okli&&ykxZ3QAY%qH3$a!lbZO!KZ|eUpTYdLj5A8{4l7 zq|1V5l=`lop)P4Y2i)dccwS4WEO@AIJhC@+g-K8*e&HT7kh%Y+GTQ+siAM76>96aD zq=7CY-+GR|w)DP|eRM1O9ZV-h$y<*%ye!>p134F6bkSiqj1Y8nbk)4zz{j##^;8}V z%qCAh2qoWcny?R`yKRt73s?zVIrXKeI2s$3b1^Nwftzl+X|P)4N#%q3GNp;Osg_L( zNQ7dw8Wu{6ybVa1n$3Ed$^btx1@Hm$ku*Sdf2tvI72HyM((bYPBG-jRlNIFMavhi$ zWAKe%b)80X3QI#H4)?4qN=pGfllSR+)2F)NTnk9meaM?{LDBPGaxMyPz)z2%PB03d z^PJ}l@133`Kd7)7yP4wP!GnWKhlNWA=&P}k?HXyIs~R2T8FH_Po`vY?s;;}uom=Hi zap|R(4)>y-A#^0^z3Qc?e~8{WuG7WXLj%4O-#vM~0J;XsVx1$tx>ihuXH+NL_ZPnK zg~1h9!8lrVZBcs$z%@o128|5h8^o`^wDMILVAVrXhG+ME0Y7M185k`CRpZD|bl<)M zlBa96*E|KQ-+hs#cfOnaRs{7uT6rpj0~>o_2s0j|zu?}hRqwc-t2#R+`>Ae$^O28S z$UeugAbB^WqEaT^A&T$8{8x#6l=_0TLX?)$_=pt2N{_eSe*4f}R!$lN6~Kc4rPRgr z(X4%84QZgv*6d&{P(b(N!M$Yvy>v*0QD(^B2b4#5%+_gqmhjL+4-Kvu`RWT)wsQz6 zq!h(>k17=+w3)Q$QIT1utO%{UXObV`I{0 ze8S4qqjdk?ljlk0k=Of`$NfL>zyrfl)^FdApuL?AyMW$@qw#*=r<5TVyxvFfk)94_&^mE>`j_v!n(o(W!_+q3B9yH4IauD~VA zqtl{|ymR{Q-m@;2@8(_CZwt{oWz%EJvG{)Pc*i@24Tb2r`VoSz-^jUo+=A~s)%$w= ls#jBxud-wKWRCy2`~PY9=>2J_zWe|H002ovPDHLkV1gXA0Sy2E literal 103313 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

    jIgFQ11G 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

    S zY&{m0L8-TcQpplACGaHBAX5>HEIc#5OISNk(CCe^xVqT zTaR1SGv?PbC^10W?xTlB+HviRkHVsL4}kPLvfnh`!+6d%U*z@Zc&(xOU z_c5iVXdBd8(pd_L0(|lPSpX*OA^{+s(gm@mJTy3-{e6wU+42h)&;{KWC~(e*~1UlwJ=^c4$8e4>4n_d}pM|yXyRMU(#j# zCVpElKkKiL;PbOKGGg5qUS3KXS!Bh=aFF-PuTKXD+n_k#32ECBRYa7LuZW7o!%4dS zbh$`1TIDAQaYCPO_j^`M=>2ylUjuqG*WbaC6!-?{jLln z@b`;n0BfIT(3a7%_r+Jl1WCkz6FF}$y{3L;mROp)hEgf)nT~U-{OCvVCAID?3eF1e zzF&X0!V5xlUeUTVK>!u0U+*mxvd_@(k~R{{tuq0VfZKwQh?-4@givphXaF}n=f%62 zmLd={_R1IPl5`tH-RScR`eK1t|Lwp1H?41r_V*(3LjV5#1TG^o5DiyA(Z|Gc+>#9O zNnLh`!hO#zVPf7flZ&AQIHFQ0tzR@OES}Oky!y(S@W$2G!+Ql#0!Ahe4dUy`f%nea zZ1Mt2lQnxI&9sOKfL_*(q&b zb1U+);LfyS>-~OK@KO8a7T!waj1_M!G8V*2(aVquU}<&$ffnuw#Q*Kuca|41X3+Kk z@hYXYX&I$wl{hNe*N2CDi^f;(*4Hv%Xk)Ipzpv2CWe|wRE}cW3`%cb{knB_`d{X&7 zGdr(dUVS)rlm$B=J&)|1iq1Ex{I{__H~Is)H+HYmj&v%JwD^u|GCz>rgL_DD43?LM ziOX^6dn6-M+roSjH*Rn}WP2K~7 z$iL}}Pe(+6QA{URii#yarr*Cv={PBShrQAWKJRYSchcQ!{x_FD@45v%R1#JumJU`D z5W(`qqUG5jk1FmuW}E2Vy<6_0t0Z#=ay&}j$Tlb;Tz3nn4pKNxAKjx&3MHx78wYm@ z&2?4b>g!jW1WNLQ=k7b%j_q?OiS=XulOPo!Au=)W*8{~v37{C1RIio;3Hg0rRrpiq+?%cU>`SK;zC4t#jzxY}B^0OEWff#cIkkAM3To13Ddns&uY_0yV+$e4yKRT%| z=FXWZq;Eaw0vO-|BOxuH(>z>h@yTdS^ut-IY)tb>E3U^|vfx|}U^02Y{YkSM{Mn!VS-y_eZgkm_futN}Bp}wYaq@flbtHNA1(y!XspNRB81v%` zpIJ{s⪻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 z zqw~y)iz*#cU5Wh9_vgQ1X?=7#mX5=D#o&EDn0000 Date: Sat, 18 Jun 2016 01:06:01 +0200 Subject: [PATCH 289/322] Update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e0c360ad9..f63b8d05a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -![](https://raw.githubusercontent.com/Ellpeck/ActuallyAdditions/master/pics/logoBig.png) +![](https://raw.githubusercontent.com/Ellpeck/ActuallyAdditions/master/pics/logo.png) ##It's a Minecraft Mod! -For more information, visit the main Minecraft Forum Thread at http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2551118 \ No newline at end of file +For more information, visit the main Minecraft Forum Thread by [clicking here](http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/2551118)! \ No newline at end of file From a90b980d57171917eb075e1e0c01ac474f4b506f Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 18 Jun 2016 12:45:47 +0200 Subject: [PATCH 290/322] Remove additional tesla capabilites as they don't make sense anyways --- .../mod/util/compat/TeslaUtil.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java index 96b2a607a..19982a1de 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java @@ -15,12 +15,11 @@ import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import net.darkhax.tesla.api.ITeslaConsumer; -import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaProducer; +import net.darkhax.tesla.capability.TeslaCapabilities; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityInject; import java.util.HashMap; import java.util.Map; @@ -28,17 +27,11 @@ import java.util.Map; public final class TeslaUtil{ private static final Map TESLA_MAP = new HashMap(); - @CapabilityInject(ITeslaConsumer.class) - public static Capability teslaConsumer = null; - @CapabilityInject(ITeslaProducer.class) - public static Capability teslaProducer = null; - @CapabilityInject(ITeslaHolder.class) - public static Capability teslaHolder = null; public static T getTeslaCapability(TileEntityBase tile, Capability capability, EnumFacing facing){ - boolean receive = tile instanceof IEnergyReceiver && capability == teslaConsumer; - boolean provide = tile instanceof IEnergyProvider && capability == teslaProducer; - boolean hold = tile instanceof IEnergyHandler && capability == teslaHolder; + boolean receive = tile instanceof IEnergyReceiver && capability == TeslaCapabilities.CAPABILITY_CONSUMER; + boolean provide = tile instanceof IEnergyProvider && capability == TeslaCapabilities.CAPABILITY_PRODUCER; + boolean hold = tile instanceof IEnergyHandler && capability == TeslaCapabilities.CAPABILITY_HOLDER; if(receive || provide || hold){ return (T)getHandler(tile, facing); } @@ -53,8 +46,8 @@ public final class TeslaUtil{ for(int i = 0; i < 2; i++){ if(handlerFrom == null && handlerTo == null){ - handlerFrom = (i == 0 ? tile : otherTile).getCapability(teslaProducer, i == 0 ? side : side.getOpposite()); - handlerTo = (i == 0 ? otherTile : tile).getCapability(teslaConsumer, i == 0 ? side.getOpposite() : side); + handlerFrom = (i == 0 ? tile : otherTile).getCapability(TeslaCapabilities.CAPABILITY_PRODUCER, i == 0 ? side : side.getOpposite()); + handlerTo = (i == 0 ? otherTile : tile).getCapability(TeslaCapabilities.CAPABILITY_CONSUMER, i == 0 ? side.getOpposite() : side); } } From 58b959c593cc25ab0ecc3336881f671bc6a047e3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 18 Jun 2016 12:48:19 +0200 Subject: [PATCH 291/322] no. no again. --- .../mod/util/compat/TeslaUtil.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java index 19982a1de..1ec8dce72 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java @@ -15,11 +15,12 @@ import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import net.darkhax.tesla.api.ITeslaConsumer; +import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaProducer; -import net.darkhax.tesla.capability.TeslaCapabilities; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.CapabilityInject; import java.util.HashMap; import java.util.Map; @@ -27,11 +28,17 @@ import java.util.Map; public final class TeslaUtil{ private static final Map TESLA_MAP = new HashMap(); + @CapabilityInject(ITeslaConsumer.class) + public static Capability teslaConsumer; + @CapabilityInject(ITeslaProducer.class) + public static Capability teslaProducer; + @CapabilityInject(ITeslaHolder.class) + public static Capability teslaHolder; public static T getTeslaCapability(TileEntityBase tile, Capability capability, EnumFacing facing){ - boolean receive = tile instanceof IEnergyReceiver && capability == TeslaCapabilities.CAPABILITY_CONSUMER; - boolean provide = tile instanceof IEnergyProvider && capability == TeslaCapabilities.CAPABILITY_PRODUCER; - boolean hold = tile instanceof IEnergyHandler && capability == TeslaCapabilities.CAPABILITY_HOLDER; + boolean receive = tile instanceof IEnergyReceiver && capability == teslaConsumer; + boolean provide = tile instanceof IEnergyProvider && capability == teslaProducer; + boolean hold = tile instanceof IEnergyHandler && capability == teslaHolder; if(receive || provide || hold){ return (T)getHandler(tile, facing); } @@ -46,8 +53,8 @@ public final class TeslaUtil{ for(int i = 0; i < 2; i++){ if(handlerFrom == null && handlerTo == null){ - handlerFrom = (i == 0 ? tile : otherTile).getCapability(TeslaCapabilities.CAPABILITY_PRODUCER, i == 0 ? side : side.getOpposite()); - handlerTo = (i == 0 ? otherTile : tile).getCapability(TeslaCapabilities.CAPABILITY_CONSUMER, i == 0 ? side.getOpposite() : side); + handlerFrom = (i == 0 ? tile : otherTile).getCapability(teslaProducer, i == 0 ? side : side.getOpposite()); + handlerTo = (i == 0 ? otherTile : tile).getCapability(teslaConsumer, i == 0 ? side.getOpposite() : side); } } From 1575a8aa62f93ac2339635dc78bca8e73ef49d86 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 18 Jun 2016 17:30:12 +0200 Subject: [PATCH 292/322] Fixed nullpointer caused by getting capabilities with null facing --- .../actuallyadditions/mod/tile/TileEntityInventoryBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 5832c1dfe..fc5e1bfff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -211,7 +211,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public T getCapability(Capability capability, EnumFacing facing){ if(this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ - return (T)this.invWrappers[facing.ordinal()]; + return (T)this.invWrappers[facing == null ? 0 : facing.ordinal()]; } else{ return super.getCapability(capability, facing); From e4da62e898e51255bc3f7c2df1959e0c320afc80 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 18 Jun 2016 23:18:19 +0200 Subject: [PATCH 293/322] Act like Vaskie --- .../ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 8d80fc380..097791f9e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -37,9 +37,9 @@ import java.util.List; public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyReceiver, IButtonReactor, IEnergySaver, IEnergyDisplay{ - public static final int ENERGY_USE_PER_BLOCK = 500; + public static final int ENERGY_USE_PER_BLOCK = 1000; public static final int DEFAULT_RANGE = 2; - public final EnergyStorage storage = new EnergyStorage(1000000); + public final EnergyStorage storage = new EnergyStorage(200000); public int layerAt = -1; public boolean onlyMineOres = true; private int oldLayerAt; From 9b575c57251cccf0f9a23e312e539c8d794d7673 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 19 Jun 2016 12:59:31 +0200 Subject: [PATCH 294/322] r45! --- build.gradle | 2 +- update/changelog.md | 13 +++++++++++++ update/updateVersions.properties | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index c1ad80592..d96ce9df7 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r44" +version = "1.9.4-r45" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index aaeba43a5..dd2d1f363 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,16 @@ +# 1.9.4-r45 +* Added Tesla Energy System support to all RF-using and generating blocks +* Added video introduction page to booklet +* Added Laser Wrench mode switch. Just right-click with one at some point. +* Fixed XP Solidifier values being off +* Made crafter on a stick not randomly create stacks with no items in them +* Changed the way fluids and RF are handled making them both pull AND push to other tiles +* Removed Rarmor integration (for now!) as the mod is in the process of being re-written +* Made Reconstructor and Display stand not keep their items on the client when having them removed +* Updated banner in the mods screen~ +* Fixed nullpointer caused by getting capabilities with a null facing sometimes +* Made the Miner less carry-around-y. + # 1.9.4-r44 * Fixed a weird crash with Item Laser Relays. * Fixed drills sometimes crashing when breaking certain blocks. diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 2d304e7ce..3fc925532 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,4 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=44 \ No newline at end of file +1.9.4=45 \ No newline at end of file From 9c16eef80e02a8bdf0e4f9fb81b8e833709728f3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 19 Jun 2016 19:28:48 +0200 Subject: [PATCH 295/322] Made booklet save its bookmarks. Were a bit useless without this... --- .../actuallyadditions/mod/booklet/BookletUtils.java | 8 ++++---- .../ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java | 6 +++--- .../mod/booklet/button/BookmarkButton.java | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 5f040b42b..5709c42d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -294,7 +294,7 @@ public final class BookletUtils{ } } - booklet.changedPageSinceOpen = true; + booklet.shouldSaveDataNextClose = true; } /** @@ -351,7 +351,7 @@ public final class BookletUtils{ chapterButton.visible = false; } - booklet.changedPageSinceOpen = true; + booklet.shouldSaveDataNextClose = true; } /** @@ -417,7 +417,7 @@ public final class BookletUtils{ } } - booklet.changedPageSinceOpen = true; + booklet.shouldSaveDataNextClose = true; } /** @@ -443,7 +443,7 @@ public final class BookletUtils{ } } - booklet.changedPageSinceOpen = true; + booklet.shouldSaveDataNextClose = true; } public static BookletPage getFirstPageForStack(ItemStack stack){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 70b5c63bc..5f47512db 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -88,7 +88,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ public GuiButton buttonPatreon; public GuiButton buttonViewOnline; public GuiTextField searchField; - public boolean changedPageSinceOpen; + public boolean shouldSaveDataNextClose; private int ticksElapsed; private boolean mousePressed; private int hisNameIsAt; @@ -404,7 +404,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ ItemBooklet.forcedEntry = null; } - this.changedPageSinceOpen = false; + this.shouldSaveDataNextClose = false; } @Override @@ -445,7 +445,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void onGuiClosed(){ - if(this.saveOnClose && this.changedPageSinceOpen){ + if(this.saveOnClose && this.shouldSaveDataNextClose){ NBTTagCompound bookletData = new NBTTagCompound(); BookletUtils.saveBookPage(this, bookletData); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java index 9bc03fc12..9bee05685 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/BookmarkButton.java @@ -41,6 +41,7 @@ public class BookmarkButton extends GuiButton{ if(this.assignedEntry.entry != null){ if(GuiScreen.isShiftKeyDown()){ this.assignedEntry.removeEntry(); + this.booklet.shouldSaveDataNextClose = true; } else{ BookletUtils.openIndexEntry(this.booklet, this.assignedEntry.entry, this.assignedEntry.pageInIndex, true); @@ -50,6 +51,7 @@ public class BookmarkButton extends GuiButton{ else{ if(this.booklet.currentEntrySet.getCurrentEntry() != null){ this.assignedEntry.setEntry(this.booklet.currentEntrySet.getCurrentPage(), this.booklet.currentEntrySet.getCurrentChapter(), this.booklet.currentEntrySet.getCurrentEntry(), this.booklet.currentEntrySet.getPageInIndex()); + this.booklet.shouldSaveDataNextClose = true; } } } From 144e8e4d0a602d0464cde8cc8d9e8b7c59bab2cd Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 19 Jun 2016 20:24:13 +0200 Subject: [PATCH 296/322] Remove custom fake player in favor of vanilla one, stopped using fake player for worldgen. --- .../mod/ActuallyAdditions.java | 2 - .../mod/event/WorldLoadingEvents.java | 2 - .../mod/gen/WorldGenLushCaves.java | 5 +- .../mod/util/FakePlayerUtil.java | 46 ------------------- .../actuallyadditions/mod/util/WorldUtil.java | 11 +++-- 5 files changed, 10 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 044c33ecb..aa8ad0a38 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -42,7 +42,6 @@ import de.ellpeck.actuallyadditions.mod.recipe.HairyBallHandler; import de.ellpeck.actuallyadditions.mod.recipe.TreasureChestHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; -import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.Mod; @@ -130,7 +129,6 @@ public class ActuallyAdditions{ proxy.postInit(event); ModUtil.LOGGER.info("PostInitialization Finished."); - FakePlayerUtil.info(); } @EventHandler diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java index eb4e353db..0e87db050 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.data.WorldData; -import de.ellpeck.actuallyadditions.mod.util.FakePlayerUtil; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -25,7 +24,6 @@ public class WorldLoadingEvents{ @SubscribeEvent public void onUnload(WorldEvent.Unload event){ WorldData.unload(event.getWorld()); - FakePlayerUtil.unloadFakePlayer(); } @SubscribeEvent diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java index a92fed062..4b1dba16c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/WorldGenLushCaves.java @@ -60,12 +60,13 @@ public class WorldGenLushCaves extends WorldGenerator{ if(!possiblePoses.isEmpty()){ for(int i = 0; i <= amount; i++){ Collections.shuffle(possiblePoses); + BlockPos pos = possiblePoses.get(0); if(rand.nextBoolean()){ WorldGenAbstractTree trees = rand.nextBoolean() ? (rand.nextBoolean() ? new WorldGenBigTree(false) : new WorldGenShrub(Blocks.LOG.getDefaultState(), Blocks.LEAVES.getDefaultState())) : new WorldGenTrees(false); - trees.generate(world, rand, possiblePoses.get(0).up()); + trees.generate(world, rand, pos.up()); } else{ - ItemDye.applyBonemeal(new ItemStack(Items.DYE, 1, EnumDyeColor.WHITE.getDyeDamage()), world, possiblePoses.get(0)); + Blocks.GRASS.grow(world, rand, pos, world.getBlockState(pos)); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java deleted file mode 100644 index 22d61c54f..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/FakePlayerUtil.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * This file ("FakePlayerUtil.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.util; - -import com.mojang.authlib.GameProfile; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.FakePlayerFactory; - -import java.util.UUID; - -public final class FakePlayerUtil{ - - private static final String FAKE_NAME = ModUtil.MOD_ID+"fakeplayer"; - private static final GameProfile FAKE_PROFILE = new GameProfile(UUID.nameUUIDFromBytes(FAKE_NAME.getBytes()), FAKE_NAME); - private static FakePlayer theFakePlayer; - - public static void info(){ - ModUtil.LOGGER.info(ModUtil.NAME+"' Fake Player: '"+FAKE_PROFILE.getName()+"', UUID: "+FAKE_PROFILE.getId()); - } - - public static FakePlayer getFakePlayer(World world){ - if(world instanceof WorldServer){ - if(theFakePlayer == null){ - theFakePlayer = FakePlayerFactory.get((WorldServer)world, FAKE_PROFILE); - } - return theFakePlayer; - } - else{ - return null; - } - } - - public static void unloadFakePlayer(){ - theFakePlayer = null; - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 809170d5e..50f1494df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -41,6 +41,8 @@ import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidBlock; @@ -167,7 +169,6 @@ public final class WorldUtil{ //Fluids if(replaceable && !(block instanceof IFluidBlock) && !(block instanceof BlockLiquid)){ FluidStack fluid = null; - //TODO Remove when FluidContainerRegistry is gone if(FluidContainerRegistry.isFilledContainer(stack)){ fluid = FluidContainerRegistry.getFluidForFilledItem(stack); } @@ -201,9 +202,11 @@ public final class WorldUtil{ //Everything else try{ - EntityPlayer fake = FakePlayerUtil.getFakePlayer(world); - stack.onItemUse(fake, world, offsetPos, fake.getActiveHand(), side.getOpposite(), 0.5F, 0.5F, 0.5F); - return stack; + if(world instanceof WorldServer){ + FakePlayer fake = FakePlayerFactory.getMinecraft((WorldServer)world); + stack.onItemUse(fake, world, offsetPos, fake.getActiveHand(), side.getOpposite(), 0.5F, 0.5F, 0.5F); + return stack; + } } catch(Exception e){ ModUtil.LOGGER.error("Something that places Blocks at "+offsetPos.getX()+", "+offsetPos.getY()+", "+offsetPos.getZ()+" in World "+world.provider.getDimension()+" threw an Exception! Don't let that happen again!", e); From c1eb3fb644dd04f069c6ccdf2b5f8f1a71e182cb Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 19 Jun 2016 22:30:18 +0200 Subject: [PATCH 297/322] Made fluid collector not output and input wrong stuff --- .../mod/tile/TileEntityFluidCollector.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 42eb5e093..a4290361f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -28,7 +28,17 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class TileEntityFluidCollector extends TileEntityBase implements IFluidSaver, IRedstoneToggle, net.minecraftforge.fluids.IFluidHandler{ - public final FluidTank tank = new FluidTank(8*Util.BUCKET); + public final FluidTank tank = new FluidTank(8*Util.BUCKET){ + @Override + public boolean canFill(){ + return TileEntityFluidCollector.this.isPlacer; + } + + @Override + public boolean canDrain(){ + return !TileEntityFluidCollector.this.isPlacer; + } + }; public boolean isPlacer; private int lastTankAmount; private int currentTime; From c297df9cc4ab0b9107c7065638d62a0182f86898 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 23 Jun 2016 19:27:42 +0200 Subject: [PATCH 298/322] Made fluid collector not output and input wrong stuff --- build.gradle | 2 +- .../mod/misc/DispenserHandlerFertilize.java | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index d96ce9df7..b864efff6 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.9.4-12.17.0.1957" + version = "1.10-12.18.0.1983-1.10.0" runDir = "idea" mappings = "snapshot_20160519" diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java index 80e18b975..9ea76f1a1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/DispenserHandlerFertilize.java @@ -21,18 +21,15 @@ import net.minecraft.util.math.BlockPos; public class DispenserHandlerFertilize extends BehaviorDefaultDispenseItem{ - @Override public ItemStack dispenseStack(IBlockSource source, ItemStack stack){ - EnumFacing facing = BlockDispenser.getFacing(source.getBlockMetadata()); - int x = source.getBlockTileEntity().getPos().getX()+facing.getFrontOffsetX(); - int y = source.getBlockTileEntity().getPos().getY()+facing.getFrontOffsetY(); - int z = source.getBlockTileEntity().getPos().getZ()+facing.getFrontOffsetZ(); - BlockPos pos = new BlockPos(x, y, z); + EnumFacing facing = source.func_189992_e().getValue(BlockDispenser.FACING); + BlockPos pos = source.getBlockPos().offset(facing); if(ItemDye.applyBonemeal(stack, source.getWorld(), pos)){ source.getWorld().playEvent(2005, pos, 0); } + return stack; } From 7274eb5599ef852a09dec5dac9a98a62c274b030 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 23 Jun 2016 19:33:23 +0200 Subject: [PATCH 299/322] r46! --- build.gradle | 2 +- update/changelog.md | 6 ++++++ update/updateVersions.properties | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index b864efff6..adf20d56a 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.9.4-r45" +version = "1.10-r46" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" diff --git a/update/changelog.md b/update/changelog.md index dd2d1f363..61cab6d44 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,9 @@ +# 1.10-r46 +* Updated to 1.10. Obviously. +* Made booklet actually save its bookmarks +* Remove custom fake player in favor of vanilla one +* Made fluid collector not input and output fluids all the time causing infinite loops + # 1.9.4-r45 * Added Tesla Energy System support to all RF-using and generating blocks * Added video introduction page to booklet diff --git a/update/updateVersions.properties b/update/updateVersions.properties index 3fc925532..a8ff10a10 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -1,4 +1,5 @@ 1.7.10=21 1.8.9=26 1.9=33 -1.9.4=45 \ No newline at end of file +1.9.4=45 +1.10=46 \ No newline at end of file From 1627dace8324afc0180b2c7220cfa519ff991339 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 27 Jun 2016 18:36:59 +0200 Subject: [PATCH 300/322] Fixed a crash when searching in the booklet Closes #133 --- .../de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 5709c42d7..02bd16056 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -233,7 +233,7 @@ public final class BookletUtils{ ItemStack[] pageStacks = page.getItemStacksForPage(); if(pageStacks != null){ for(ItemStack stack : pageStacks){ - if(stack.getDisplayName().toLowerCase(Locale.ROOT).contains(text)){ + if(stack != null && stack.getDisplayName().toLowerCase(Locale.ROOT).contains(text)){ return true; } } From 28c6e551d8bc666a521ecb54a246eac88628c525 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 27 Jun 2016 18:40:53 +0200 Subject: [PATCH 301/322] Made empty buckets be able to get pulled out of the coal generator Closes #132 --- .../actuallyadditions/mod/tile/TileEntityCoalGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index 3dba7652c..a9aa91d9f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -105,7 +105,7 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements @Override public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ - return false; + return TileEntityFurnace.getItemBurnTime(this.slots[0]) <= 0; } @Override From ee9c94da7433d66cb0d28c23d48e1465cb2c4991 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 27 Jun 2016 19:25:46 +0200 Subject: [PATCH 302/322] Added biomass and biocoal made from canola seeds and also made canola seeds edible Closes #130 --- .../mod/blocks/base/BlockPlant.java | 14 +-- .../mod/crafting/InitCrafting.java | 1 + .../mod/crafting/MiscCrafting.java | 4 + .../mod/items/InitItems.java | 17 ++-- .../mod/items/ItemFoods.java | 1 - .../mod/items/base/ItemFoodSeed.java | 81 ++++++++++++++++++ .../mod/items/base/ItemSeed.java | 6 +- .../mod/items/metalists/TheMiscItems.java | 2 + .../mod/recipe/FuelHandler.java | 1 + .../mod/util/compat/CompatUtil.java | 5 +- .../assets/actuallyadditions/lang/en_US.lang | 2 + .../models/item/itemMiscBiocoal.json | 6 ++ .../models/item/itemMiscBiomass.json | 6 ++ .../textures/items/itemMiscBiocoal.png | Bin 0 -> 413 bytes .../textures/items/itemMiscBiomass.png | Bin 0 -> 439 bytes 15 files changed, 122 insertions(+), 24 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMiscBiocoal.json create mode 100644 src/main/resources/assets/actuallyadditions/models/item/itemMiscBiomass.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiocoal.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiomass.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index 548693e37..e212c1bb3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -35,8 +35,8 @@ public class BlockPlant extends BlockCrops{ private final int minDropAmount; private final int addDropAmount; public Item seedItem; - public Item returnItem; - public int returnMeta; + private Item returnItem; + private int returnMeta; public BlockPlant(String name, int minDropAmount, int addDropAmount){ this.name = name; @@ -45,6 +45,12 @@ public class BlockPlant extends BlockCrops{ this.register(); } + public void doStuff(Item seedItem, Item returnItem, int returnMeta){ + this.seedItem = seedItem; + this.returnItem = returnItem; + this.returnMeta = returnMeta; + } + private void register(){ ItemUtil.registerBlock(this, this.getItemBlock(), this.getBaseName(), this.shouldAddCreative()); @@ -71,7 +77,6 @@ public class BlockPlant extends BlockCrops{ return EnumRarity.RARE; } - @Override public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos){ return EnumPlantType.Crop; @@ -110,7 +115,6 @@ public class BlockPlant extends BlockCrops{ return false; } - @Override public Item getSeed(){ return this.seedItem; @@ -121,13 +125,11 @@ public class BlockPlant extends BlockCrops{ return this.getMetaFromState(state) >= 7 ? random.nextInt(this.addDropAmount)+this.minDropAmount : super.quantityDropped(state, fortune, random); } - @Override public Item getCrop(){ return this.returnItem; } - @Override public Item getItemDropped(IBlockState state, Random rand, int par3){ return this.getMetaFromState(state) >= 7 ? this.getCrop() : this.getSeed(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java index b1146d5fd..557820a78 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/InitCrafting.java @@ -29,6 +29,7 @@ public final class InitCrafting{ ToolCrafting.init(); ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemMisc, 10, TheMiscItems.MASHED_FOOD.ordinal()), Blocks.LEAVES, new ItemStack(InitItems.itemFertilizer, 10), Blocks.DIRT); + ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemCanolaSeed, 20), Blocks.DIRT, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), Blocks.SOUL_SAND); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java index d0f545007..6e93843d7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/MiscCrafting.java @@ -31,6 +31,10 @@ public final class MiscCrafting{ public static void init(){ + //Bio Coal + GameRegistry.addSmelting(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), + new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOCOAL.ordinal()), 1.0F); + //Crystals for(int i = 0; i < TheCrystals.values().length; i++){ GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockCrystal, 1, i), diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index 4be4f5e4a..d038ba384 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -12,10 +12,7 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; -import de.ellpeck.actuallyadditions.mod.items.base.ItemHoeAA; -import de.ellpeck.actuallyadditions.mod.items.base.ItemSeed; -import de.ellpeck.actuallyadditions.mod.items.base.ItemSwordAA; +import de.ellpeck.actuallyadditions.mod.items.base.*; import de.ellpeck.actuallyadditions.mod.items.lens.ItemLens; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; @@ -27,9 +24,11 @@ import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.compat.CompatUtil; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.init.MobEffects; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; public final class InitItems{ @@ -273,13 +272,13 @@ public final class InitItems{ itemHairyBall = new ItemHairyBall("itemHairyBall"); itemCoffeeBean = new ItemCoffeeBean("itemCoffeeBeans"); itemRiceSeed = new ItemSeed("itemRiceSeed", "seedRice", InitBlocks.blockRice, itemFoods, TheFoods.RICE.ordinal()); - CompatUtil.registerMFRSeed(itemRiceSeed); - itemCanolaSeed = new ItemSeed("itemCanolaSeed", "seedCanola", InitBlocks.blockCanola, itemMisc, TheMiscItems.CANOLA.ordinal()); - CompatUtil.registerMFRSeed(itemCanolaSeed); + CompatUtil.registerMFRSeed(itemRiceSeed, InitBlocks.blockRice); + itemCanolaSeed = new ItemFoodSeed("itemCanolaSeed", "seedCanola", InitBlocks.blockCanola, itemMisc, TheMiscItems.CANOLA.ordinal(), 1, 0.01F, 10).setPotionEffect(new PotionEffect(MobEffects.NAUSEA, 1000, 0), 0.2F); + CompatUtil.registerMFRSeed(itemCanolaSeed, InitBlocks.blockCanola); itemFlaxSeed = new ItemSeed("itemFlaxSeed", "seedFlax", InitBlocks.blockFlax, Items.STRING, 0); - CompatUtil.registerMFRSeed(itemFlaxSeed); + CompatUtil.registerMFRSeed(itemFlaxSeed, InitBlocks.blockFlax); itemCoffeeSeed = new ItemSeed("itemCoffeeSeed", "seedCoffeeBeans", InitBlocks.blockCoffee, itemCoffeeBean, 0); - CompatUtil.registerMFRSeed(itemCoffeeSeed); + CompatUtil.registerMFRSeed(itemCoffeeSeed, InitBlocks.blockCoffee); itemPickaxeEmerald = new ItemPickaxeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemPickaxeEmerald", EnumRarity.EPIC); itemAxeEmerald = new ItemAxeAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemAxeEmerald", EnumRarity.EPIC); itemShovelEmerald = new ItemShovelAA(InitToolMaterials.toolMaterialEmerald, new ItemStack(Items.EMERALD), "itemShovelEmerald", EnumRarity.EPIC); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java index 4030dcc96..a6542daa1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemFoods.java @@ -61,7 +61,6 @@ public class ItemFoods extends ItemFoodBase{ return stack.getItemDamage() >= ALL_FOODS.length ? 0 : ALL_FOODS[stack.getItemDamage()].useDuration; } - @Override public EnumAction getItemUseAction(ItemStack stack){ return stack.getItemDamage() >= ALL_FOODS.length ? EnumAction.EAT : (ALL_FOODS[stack.getItemDamage()].getsDrunken ? EnumAction.DRINK : EnumAction.EAT); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java new file mode 100644 index 000000000..f6a279443 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemFoodSeed.java @@ -0,0 +1,81 @@ +/* + * This file ("ItemFoodSeed.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items.base; + +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; +import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemSeedFood; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class ItemFoodSeed extends ItemSeedFood{ + + public final Block plant; + public final String name; + public final String oredictName; + private final int maxUseDuration; + + public ItemFoodSeed(String name, String oredictName, Block plant, Item returnItem, int returnMeta, int healAmount, float saturation, int maxUseDuration){ + super(healAmount, saturation, plant, Blocks.FARMLAND); + this.name = name; + this.oredictName = oredictName; + this.plant = plant; + this.maxUseDuration = maxUseDuration; + + if(plant instanceof BlockPlant){ + ((BlockPlant)plant).doStuff(this, returnItem, returnMeta); + } + + this.register(); + } + + private void register(){ + ItemUtil.registerItem(this, this.getBaseName(), this.shouldAddCreative()); + + this.registerRendering(); + } + + @Override + public int getMaxItemUseDuration(ItemStack stack){ + return this.maxUseDuration; + } + + protected String getBaseName(){ + return this.name; + } + + public boolean shouldAddCreative(){ + return true; + } + + protected void registerRendering(){ + ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } + + @Override + public IBlockState getPlant(IBlockAccess world, BlockPos pos){ + return this.plant.getDefaultState(); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java index 2dbf31f82..d67a9a8e1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSeed.java @@ -36,9 +36,7 @@ public class ItemSeed extends ItemSeeds{ this.plant = plant; if(plant instanceof BlockPlant){ - ((BlockPlant)this.plant).seedItem = this; - ((BlockPlant)this.plant).returnItem = returnItem; - ((BlockPlant)this.plant).returnMeta = returnMeta; + ((BlockPlant)plant).doStuff(this, returnItem, returnMeta); } this.register(); @@ -62,13 +60,11 @@ public class ItemSeed extends ItemSeeds{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } - @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; } - @Override public IBlockState getPlant(IBlockAccess world, BlockPos pos){ return this.plant.getDefaultState(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java index 0ad74b899..944806dae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/metalists/TheMiscItems.java @@ -36,6 +36,8 @@ public enum TheMiscItems{ LENS("Lens", EnumRarity.UNCOMMON), ENDER_STAR("EnderStar", EnumRarity.EPIC), SPAWNER_SHARD("SpawnerShard", EnumRarity.EPIC), + BIOMASS("Biomass", EnumRarity.UNCOMMON), + BIOCOAL("Biocoal", EnumRarity.RARE), YOUTUBE_ICON("YoutubeIcon", Util.FALLBACK_RARITY); public final String name; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index ad8235be2..dc0c3973e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -39,6 +39,7 @@ public class FuelHandler implements IFuelHandler{ addFuel(InitItems.itemMisc, TheMiscItems.TINY_CHAR.ordinal(), 200); addFuel(InitItems.itemMisc, TheMiscItems.TINY_COAL.ordinal(), 200); addFuel(InitBlocks.blockMisc, TheMiscBlocks.CHARCOAL_BLOCK.ordinal(), 16000); + addFuel(InitItems.itemMisc, TheMiscItems.BIOCOAL.ordinal(), 180); } private static void addFuel(Item item, int metadata, int value){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java index e255ff944..c53476593 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/CompatUtil.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.util.compat; -import de.ellpeck.actuallyadditions.mod.items.base.ItemSeed; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -27,10 +26,10 @@ public final class CompatUtil{ FMLInterModComms.sendMessage("MineFactoryReloaded", "registerFertilizable_Crop", compound); } - public static void registerMFRSeed(Item item){ + public static void registerMFRSeed(Item item, Block plant){ NBTTagCompound compound = new NBTTagCompound(); compound.setString("seed", item.getRegistryName().toString()); - compound.setString("crop", ((ItemSeed)item).plant.getRegistryName().toString()); + compound.setString("crop", plant.getRegistryName().toString()); FMLInterModComms.sendMessage("MineFactoryReloaded", "registerPlantable_Crop", compound); } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index a034c7eb8..65123eba0 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -491,6 +491,8 @@ item.actuallyadditions.itemMiscSpawnerShard.name=Spawner Shards item.actuallyadditions.itemMinecartFireworkBox.name=Firework Box Cart item.actuallyadditions.itemWaterBowl.name=Bowl of Water item.actuallyadditions.itemFilter.name=Item Filter +item.actuallyadditions.itemMiscBiomass.name=Biomass +item.actuallyadditions.itemMiscBiocoal.name=Bio Coal #Tooltips tooltip.actuallyadditions.onSuffix.desc=On diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMiscBiocoal.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBiocoal.json new file mode 100644 index 000000000..9b517f39a --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBiocoal.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemMiscBiocoal" + } +} diff --git a/src/main/resources/assets/actuallyadditions/models/item/itemMiscBiomass.json b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBiomass.json new file mode 100644 index 000000000..14bf007f0 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/itemMiscBiomass.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standardItem", + "textures": { + "layer0": "actuallyadditions:items/itemMiscBiomass" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiocoal.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiocoal.png new file mode 100644 index 0000000000000000000000000000000000000000..e607c25141b35044548aa1d8cbc62b607c22527e GIT binary patch literal 413 zcmV;O0b>4%P)N2bZe?^J zG%heMIczh2P5=M_8%ab#R5(wyl1ppCP!NSL-biACFA%RH#EPY@ZUij|)s6UC=|-wc zv9#NE<Z(*y<@YvJ4?~~E+zy3-}f1S;h*0ejXxdgOg#qSlt_rg$53}+ z^XA#NOM|t?5S*1QCaCn3IERRN@|EI2+1eV~WdMl69 z0DukvwqFF`0Yd=Dtw?~5t$++S=^*}}fcf@dLIQLcdX6W`&AG>fh_+%Bc|iBh3){luD700000NkvXX Hu0mjf&LOIo literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiomass.png b/src/main/resources/assets/actuallyadditions/textures/items/itemMiscBiomass.png new file mode 100644 index 0000000000000000000000000000000000000000..e3519d42830c0abeb1fa5e2e4f1c271a031b744b GIT binary patch literal 439 zcmV;o0Z9IdP)N2bZe?^J zG%heMIczh2P5=M_HAzH4R5(w)kFDg{(1stHa)&9}$YCyMU%@@ZLk6^$j?JAE5C}d_} zYyiq0T&3x4GNPNnq1X2wL#QUBFAXkKjT5CZPP5XmkdX(#ec`bA~XkGMv1sd8iqFm{1t}KptNI9%G~C|(y+DQvIG+A hWra{!PybR%eE`PhxbvC~BbNXG002ovPDHLkV1gQBw9x Date: Mon, 27 Jun 2016 19:32:28 +0200 Subject: [PATCH 303/322] Biomass and biocoal doc --- .../mod/booklet/InitBooklet.java | 24 +++++++++---------- .../mod/booklet/page/PageTextOnly.java | 8 +++---- .../assets/actuallyadditions/lang/en_US.lang | 1 + 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 11f83c78e..e06041d6b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -71,7 +71,7 @@ public final class InitBooklet{ new BookletChapter("banners", ActuallyAdditionsAPI.entryMisc, new ItemStack(Items.BANNER, 1, 15), new PageTextOnly(1)); new BookletChapter("bookStand", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBookletStand), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeBookStand).setNoText().setPageStacksWildcard()); new BookletChapter("miscDecorStuffsAndThings", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTestifiBucksGreenWall), new PageTextOnly(1), new PageReconstructor(2, LensRecipeHandler.recipeWhiteWall).setNoText(), new PageReconstructor(3, LensRecipeHandler.recipeGreenWall).setNoText()); - new BookletChapter("quartz", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal())).addTextReplacement("", OreGen.QUARTZ_MIN).addTextReplacement("", OreGen.QUARTZ_MAX), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())), new PageCrafting(3, BlockCrafting.recipeQuartzBlock).setNoText(), new PageCrafting(4, BlockCrafting.recipeQuartzPillar).setNoText(), new PageCrafting(5, BlockCrafting.recipeQuartzChiseled).setNoText()); + new BookletChapter("quartz", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal()), new PageTextOnly(1).setStacks(new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.ORE_QUARTZ.ordinal())).addTextReplacement("", OreGen.QUARTZ_MIN).addTextReplacement("", OreGen.QUARTZ_MAX), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.QUARTZ.ordinal())), new PageCrafting(3, BlockCrafting.recipeQuartzBlock).setNoText(), new PageCrafting(4, BlockCrafting.recipeQuartzPillar).setNoText(), new PageCrafting(5, BlockCrafting.recipeQuartzChiseled).setNoText()); new BookletChapter("cloud", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockSmileyCloud), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeSmileyCloud).setNoText().setPageStacksWildcard()).setSpecial(); new BookletChapter("coalStuff", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.TINY_COAL.ordinal()), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeTinyCoal).setNoText(), new PageCrafting(3, ItemCrafting.recipeTinyChar).setNoText(), new PageCrafting(4, BlockCrafting.recipeBlockChar).setNoText()); ArrayList lampPages = new ArrayList(); @@ -82,13 +82,13 @@ public final class InitBooklet{ } new BookletChapter("lamps", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockColoredLampOn, 1, TheColoredLampColors.GREEN.ordinal()), lampPages.toArray(new BookletPage[lampPages.size()])); new BookletChapter("enderStar", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.ENDER_STAR.ordinal()), new PageCrafting(1, ItemCrafting.recipeEnderStar)); - new BookletChapter("spawnerShard", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()))); + new BookletChapter("spawnerShard", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal()))); - new BookletChapter("treasureChest", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTreasureChest), new PagePicture(1, "pageTreasureChest", 150).setStack(new ItemStack(InitBlocks.blockTreasureChest)), new PageTextOnly(2)).setSpecial(); + new BookletChapter("treasureChest", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockTreasureChest), new PagePicture(1, "pageTreasureChest", 150).setStacks(new ItemStack(InitBlocks.blockTreasureChest)), new PageTextOnly(2)).setSpecial(); new BookletChapter("lushCaves", ActuallyAdditionsAPI.entryMisc, new ItemStack(Blocks.STONE), new PageTextOnly(1), new PagePicture(2, "pageLushCaves", 0).setNoText()); - new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStack(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); - new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStack(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye)); - new BookletChapter("waterBowl", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemWaterBowl), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemWaterBowl))); + new BookletChapter("hairBalls", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemHairyBall), new PagePicture(1, "pageFurBalls", 110).setStacks(new ItemStack(InitItems.itemHairyBall)), new PageTextOnly(2)).setSpecial(); + new BookletChapter("blackLotus", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitBlocks.blockBlackLotus), new PageTextOnly(1).setStacks(new ItemStack(InitBlocks.blockBlackLotus)), new PageCrafting(2, ItemCrafting.recipeBlackDye)); + new BookletChapter("waterBowl", ActuallyAdditionsAPI.entryMisc, new ItemStack(InitItems.itemWaterBowl), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemWaterBowl))); //No RF Using Blocks new BookletChapter("itemStorage", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockLaserRelayItemWhitelist), new PageTextOnly(1), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeLaserRelayItem).setNoText().setPageStacksWildcard(), new PageCrafting(4, BlockCrafting.recipeLaserRelayItemWhitelist).setNoText().setPageStacksWildcard(), new PageCrafting(5, BlockCrafting.recipeItemInterface).setNoText()).setImportant(); @@ -98,11 +98,11 @@ public final class InitBooklet{ new BookletChapter("phantomRedstoneface", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomRedstoneface), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipePhantomRedstoneface).setNoText()); new BookletChapter("phantomBreaker", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockPhantomBreaker), new PageTextOnly(1).addTextReplacement("", TileEntityPhantomPlacer.RANGE), new PageCrafting(2, BlockCrafting.recipePhantomPlacer).setNoText(), new PageCrafting(3, BlockCrafting.recipePhantomBreaker).setNoText()); new BookletChapter("esd", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockInputterAdvanced), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeESD).setNoText(), new PageCrafting(3, BlockCrafting.recipeAdvancedESD).setNoText()).setSpecial(); - new BookletChapter("xpSolidifier", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockXPSolidifier), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemSolidifiedExperience)), new PageCrafting(2, BlockCrafting.recipeSolidifier).setNoText()).setSpecial(); + new BookletChapter("xpSolidifier", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockXPSolidifier), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemSolidifiedExperience)), new PageCrafting(2, BlockCrafting.recipeSolidifier).setNoText()).setSpecial(); new BookletChapter("greenhouseGlass", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGreenhouseGlass), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeGlass)); new BookletChapter("fishingNet", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFishingNet), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFisher).setNoText()); new BookletChapter("feeder", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFeeder), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFeeder).setNoText()); - new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemFertilizer)), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.RECIPES_MASHED_FOOD)); + new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemFertilizer)), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.RECIPES_MASHED_FOOD)); new BookletChapter("crate", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGiantChest), new PageCrafting(1, BlockCrafting.recipeCrate), new PageCrafting(2, ItemCrafting.recipeCrateKeeper), new PageCrafting(3, ItemCrafting.recipeChestToCrateUpgrade)); new BookletChapter("rangedCollector", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockRangedCollector), new PageTextOnly(1).addTextReplacement("", TileEntityRangedCollector.RANGE), new PageCrafting(2, BlockCrafting.recipeRangedCollector).setNoText()); @@ -110,7 +110,7 @@ public final class InitBooklet{ new BookletChapter("fireworkBox", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFireworkBox), new PageTextOnly(1).addTextReplacement("", TileEntityFireworkBox.USE_PER_SHOT), new PageCrafting(2, BlockCrafting.recipeFireworkBox)).setSpecial(); new BookletChapter("laserRelays", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLaserRelay), new PageTextOnly(1).addTextReplacement("", TileEntityLaserRelay.MAX_DISTANCE).addTextReplacement("", ConfigIntValues.LASER_RELAY_LOSS.getValue()), new PagePicture(2, "pageLaserRelay", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLaserRelay).setNoText().setPageStacksWildcard(), new PageCrafting(4, ItemCrafting.recipeLaserWrench)).setImportant(); new BookletChapter("miner", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockMiner), new PageTextOnly(1).addTextReplacement("", TileEntityMiner.ENERGY_USE_PER_BLOCK).addTextReplacement("", TileEntityMiner.DEFAULT_RANGE), new PageCrafting(2, BlockCrafting.recipeMiner)).setSpecial(); - new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStack(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); + new BookletChapterCoffee("coffeeMachine", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockCoffeeMachine), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemCoffeeBean)).addTextReplacement("", TileEntityCoffeeMachine.ENERGY_USED).addTextReplacement("", TileEntityCoffeeMachine.CACHE_USE).addTextReplacement("", TileEntityCoffeeMachine.WATER_USE), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemCoffee)), new PagePicture(3, "pageCoffeeMachine", 115), new PageCrafting(4, BlockCrafting.recipeCoffeeMachine).setNoText().setPageStacksWildcard(), new PageCrafting(5, ItemCrafting.recipeCup).setNoText()).setImportant(); new BookletChapterCrusher("crusher", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockGrinderDouble), new PageTextOnly(1).addTextReplacement("", TileEntityGrinder.ENERGY_USE), new PageCrafting(2, BlockCrafting.recipeCrusher).setNoText().setPageStacksWildcard(), new PageCrafting(3, BlockCrafting.recipeDoubleCrusher).setNoText().setPageStacksWildcard(), new PageCrusherRecipe(4, CrusherCrafting.recipeIronHorseArmor).setNoText(), new PageCrusherRecipe(5, CrusherCrafting.recipeGoldHorseArmor).setNoText(), new PageCrusherRecipe(6, CrusherCrafting.recipeDiamondHorseArmor).setNoText()); new BookletChapter("furnaceDouble", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockFurnaceDouble), new PageCrafting(1, BlockCrafting.recipeFurnace).addTextReplacement("", TileEntityFurnaceDouble.ENERGY_USE).setPageStacksWildcard()); new BookletChapter("lavaFactory", ActuallyAdditionsAPI.entryFunctionalRF, new ItemStack(InitBlocks.blockLavaFactoryController), new PageTextOnly(1).addTextReplacement("", TileEntityLavaFactoryController.ENERGY_USE), new PagePicture(2, "pageLavaFactory", 0).setNoText(), new PageCrafting(3, BlockCrafting.recipeLavaFactory).setNoText(), new PageCrafting(4, BlockCrafting.recipeCasing).setNoText()); @@ -123,11 +123,11 @@ public final class InitBooklet{ //RF Generating Blocks new BookletChapter("solarPanel", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFurnaceSolar), new PageTextOnly(1).addTextReplacement("", TileEntityFurnaceSolar.PRODUCE), new PageCrafting(2, BlockCrafting.recipeSolar).setNoText()); new BookletChapter("heatCollector", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockHeatCollector), new PageTextOnly(1).addTextReplacement("", TileEntityHeatCollector.ENERGY_PRODUCE).addTextReplacement("", TileEntityHeatCollector.BLOCKS_NEEDED), new PageCrafting(2, BlockCrafting.recipeHeatCollector).setNoText()); - new BookletChapter("canola", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFermentingBarrel), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal())).addTextReplacement("", TileEntityCanolaPress.ENERGY_USE).addTextReplacement("", TileEntityCanolaPress.PRODUCE).addTextReplacement("", TileEntityOilGenerator.ENERGY_PRODUCED), new PageCrafting(2, BlockCrafting.recipeCanolaPress).setNoText(), new PageCrafting(3, BlockCrafting.recipeFermentingBarrel).setNoText(), new PageCrafting(4, BlockCrafting.recipeOilGen).setNoText().setPageStacksWildcard()); + new BookletChapter("canola", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFermentingBarrel), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal())).addTextReplacement("", TileEntityCanolaPress.ENERGY_USE).addTextReplacement("", TileEntityCanolaPress.PRODUCE).addTextReplacement("", TileEntityOilGenerator.ENERGY_PRODUCED), new PageTextOnly(2).setStacks(new ItemStack(InitItems.itemCanolaSeed), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOCOAL.ordinal())), new PageCrafting(3, BlockCrafting.recipeCanolaPress).setNoText(), new PageCrafting(4, BlockCrafting.recipeFermentingBarrel).setNoText(), new PageCrafting(4, BlockCrafting.recipeOilGen).setNoText().setPageStacksWildcard()); new BookletChapter("leafGen", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockLeafGenerator), new PageTextOnly(1).addTextReplacement("", TileEntityLeafGenerator.ENERGY_PRODUCED).addTextReplacement("", TileEntityLeafGenerator.RANGE), new PageCrafting(2, BlockCrafting.recipeLeafGen)).setImportant(); //No RF Using Items - new BookletChapter("wings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemWingsOfTheBats), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal())), new PageCrafting(2, ItemCrafting.recipeWings).setNoText()).setSpecial(); + new BookletChapter("wings", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemWingsOfTheBats), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BAT_WING.ordinal())), new PageCrafting(2, ItemCrafting.recipeWings).setNoText()).setSpecial(); new BookletChapter("foods", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemFoods, 1, TheFoods.HAMBURGER.ordinal()), new PageCrafting(1, FoodCrafting.recipeBacon), new PageFurnace(2, new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE_BREAD.ordinal())).setNoText(), new PageCrafting(3, FoodCrafting.recipeHamburger).setNoText(), new PageCrafting(4, FoodCrafting.recipeBigCookie).setNoText(), new PageCrafting(5, FoodCrafting.recipeSubSandwich).setNoText(), new PageCrafting(6, FoodCrafting.recipeFrenchFry).setNoText(), new PageCrafting(7, FoodCrafting.recipeFrenchFries).setNoText(), new PageCrafting(8, FoodCrafting.recipeFishNChips).setNoText(), new PageCrafting(9, FoodCrafting.recipeCheese).setNoText(), new PageCrafting(10, FoodCrafting.recipePumpkinStew).setNoText(), new PageCrafting(11, FoodCrafting.recipeCarrotJuice).setNoText(), new PageCrafting(12, FoodCrafting.recipeSpaghetti).setNoText(), new PageCrafting(13, FoodCrafting.recipeNoodle).setNoText(), new PageCrafting(14, FoodCrafting.recipeChocolate).setNoText(), new PageCrafting(15, FoodCrafting.recipeChocolateCake).setNoText(), new PageCrafting(16, FoodCrafting.recipeToast).setNoText(), new PageFurnace(17, new ItemStack(InitItems.itemFoods, 1, TheFoods.BAGUETTE.ordinal())).setNoText(), new PageCrafting(18, FoodCrafting.recipeChocolateToast).setNoText(), new PageCrafting(1, FoodCrafting.recipePizza).setNoText()); new BookletChapter("leafBlower", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemLeafBlowerAdvanced), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeLeafBlower).setNoText(), new PageCrafting(3, ItemCrafting.recipeLeafBlowerAdvanced).setNoText()).setImportant(); ArrayList aiotPages = new ArrayList(); @@ -137,7 +137,7 @@ public final class InitBooklet{ } new BookletChapter("aiots", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.emeraldPaxel), aiotPages.toArray(new BookletPage[aiotPages.size()])).setImportant(); - new BookletChapter("jams", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemJams), new PageTextOnly(1).setStack(new ItemStack(InitItems.itemJams, 1, Util.WILDCARD)), new PagePicture(2, "pageJamHouse", 150), new PageTextOnly(3)); + new BookletChapter("jams", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemJams), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemJams, 1, Util.WILDCARD)), new PagePicture(2, "pageJamHouse", 150), new PageTextOnly(3)); ArrayList potionRingPages = new ArrayList(); potionRingPages.add(new PageTextOnly(potionRingPages.size()+1)); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java index c13bcf77b..05133f9f6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java @@ -19,14 +19,14 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class PageTextOnly extends BookletPageAA{ - private ItemStack stack; + private ItemStack[] stacks; public PageTextOnly(int id){ super(id); } - public PageTextOnly setStack(ItemStack stack){ - this.stack = stack; + public PageTextOnly setStacks(ItemStack... stacks){ + this.stacks = stacks; this.addToPagesWithItemStackData(); return this; } @@ -42,6 +42,6 @@ public class PageTextOnly extends BookletPageAA{ @Override public ItemStack[] getItemStacksForPage(){ - return this.stack == null ? new ItemStack[0] : new ItemStack[]{this.stack}; + return this.stacks == null ? new ItemStack[0] : this.stacks; } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 65123eba0..747a0aed5 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -770,6 +770,7 @@ booklet.actuallyadditions.chapter.heatCollector.text.1=The Heat Collector< booklet.actuallyadditions.chapter.canola.name=Everything Canola booklet.actuallyadditions.chapter.canola.text.1=There is lots of stuff that can be produced from Canola (which can be found in the wild and then planted and harvested!): You can make Canola Oil, Oil and produce RF from it. The way to do that is to take some Canola, put it into a Canola Press which uses RF/t. That creates mB of Canola Oil. Put that into a Fermenting Barrel, let it sit there for a while before it converts into Oil. That oil can then be used in a Oil Generator to create RF/t. +booklet.actuallyadditions.chapter.canola.text.2=Additionally, if you have a lot of Canola Seeds left over from all of the farming you have been doing, you can put 20 at at time into a Compost, which will turn them into Biomass. The Biomass can then be put into a furnace, causing it to be smelted into Bio Coal which can be used for smelting almost as much items as a regular piece of coal. booklet.actuallyadditions.chapter.wings.name=Wings Of The Bats booklet.actuallyadditions.chapter.wings.text.1=Sometimes, bats will drop Wings. These wings can't really be used to fly, but that's just because they're not powerful enough. To make them more powerful, you can craft Wings Of The Bats. When you have these in your inventory, they will allow you to fly like in creative mode. From 925b259d8fd5f5f3d5f50ab45744bb7ce1066eaf Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 27 Jun 2016 20:19:04 +0200 Subject: [PATCH 304/322] Added medium and large storage crate --- .../mod/blocks/BlockGiantChest.java | 43 ++++++++++++++++-- .../mod/blocks/InitBlocks.java | 6 ++- .../mod/blocks/base/ItemBlockBase.java | 2 - .../mod/creative/CreativeTab.java | 2 + .../mod/inventory/ContainerGiantChest.java | 4 +- .../mod/inventory/GuiHandler.java | 14 +++++- .../mod/inventory/gui/GuiGiantChest.java | 42 +++++++++++++++-- .../mod/tile/TileEntityBase.java | 2 + .../mod/tile/TileEntityGiantChest.java | 29 +++++++++++- .../mod/tile/TileEntityGiantChestLarge.java | 18 ++++++++ .../mod/tile/TileEntityGiantChestMedium.java | 18 ++++++++ .../blockstates/blockGiantChestLarge.json | 16 +++++++ .../blockstates/blockGiantChestMedium.json | 16 +++++++ .../assets/actuallyadditions/lang/en_US.lang | 4 +- .../textures/blocks/blockGiantChestLarge.png | Bin 0 -> 737 bytes .../textures/blocks/blockGiantChestMedium.png | Bin 0 -> 756 bytes 16 files changed, 200 insertions(+), 16 deletions(-) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestLarge.json create mode 100644 src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestMedium.json create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockGiantChestLarge.png create mode 100644 src/main/resources/assets/actuallyadditions/textures/blocks/blockGiantChestMedium.png diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 1db83d73d..7541fe4d2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -12,10 +12,14 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChestLarge; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChestMedium; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -29,25 +33,35 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextFormatting; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import java.util.ArrayList; +import java.util.List; public class BlockGiantChest extends BlockContainerBase{ - public BlockGiantChest(String name){ + public final int type; + + public BlockGiantChest(String name, int type){ super(Material.WOOD, name); + this.type = type; + this.setHarvestLevel("axe", 0); this.setHardness(0.5F); this.setResistance(15.0F); this.setSoundType(SoundType.WOOD); - } + } @Override public TileEntity createNewTileEntity(World world, int par2){ - return new TileEntityGiantChest(); + switch(this.type){ + case 1: return new TileEntityGiantChestMedium(); + case 2: return new TileEntityGiantChestLarge(); + default: return new TileEntityGiantChest(); + } } @Override @@ -133,4 +147,27 @@ public class BlockGiantChest extends BlockContainerBase{ super.breakBlock(world, pos, state); } + + @Override + protected ItemBlockBase getItemBlock(){ + return new TheItemBlock(this); + } + + public static class TheItemBlock extends ItemBlockBase{ + + public TheItemBlock(Block block){ + super(block); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced){ + int type = this.block instanceof BlockGiantChest ? ((BlockGiantChest)this.block).type : -1; + if(type == 2){ + tooltip.add(TextFormatting.ITALIC+"Supersolid"); + } + else if(type == 0){ + tooltip.add(TextFormatting.ITALIC+"'Small'"); + } + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index d46856e69..cf839fe1d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -24,6 +24,8 @@ public final class InitBlocks{ public static Block blockWildPlant; public static Block blockFeeder; public static Block blockGiantChest; + public static Block blockGiantChestMedium; + public static Block blockGiantChestLarge; public static Block blockGrinder; public static Block blockGrinderDouble; @@ -174,7 +176,9 @@ public final class InitBlocks{ blockCompost = new BlockCompost("blockCompost"); blockMisc = new BlockMisc("blockMisc"); blockFeeder = new BlockFeeder("blockFeeder"); - blockGiantChest = new BlockGiantChest("blockGiantChest"); + blockGiantChest = new BlockGiantChest("blockGiantChest", 0); + blockGiantChestMedium = new BlockGiantChest("blockGiantChestMedium", 1); + blockGiantChestLarge = new BlockGiantChest("blockGiantChestLarge", 2); blockGrinder = new BlockGrinder(false, "blockGrinder"); blockGrinderDouble = new BlockGrinder(true, "blockGrinderDouble"); blockFurnaceDouble = new BlockFurnaceDouble("blockFurnaceDouble"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index a3f7137cf..3316ae28f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -24,7 +24,6 @@ public class ItemBlockBase extends ItemBlock{ this.setMaxDamage(0); } - @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -35,7 +34,6 @@ public class ItemBlockBase extends ItemBlock{ return damage; } - @Override public EnumRarity getRarity(ItemStack stack){ if(this.block instanceof BlockBase){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index a8b23940a..7af74e59b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -105,6 +105,8 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockFeeder); this.add(InitBlocks.blockCompost); this.add(InitBlocks.blockGiantChest); + this.add(InitBlocks.blockGiantChestMedium); + this.add(InitBlocks.blockGiantChestLarge); this.add(InitBlocks.blockCanolaPress); this.add(InitBlocks.blockFermentingBarrel); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java index 5a1da714f..c66995247 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerGiantChest.java @@ -24,12 +24,12 @@ public class ContainerGiantChest extends Container{ public final TileEntityGiantChest tileChest; - public ContainerGiantChest(InventoryPlayer inventory, TileEntityBase tile){ + public ContainerGiantChest(InventoryPlayer inventory, TileEntityBase tile, int page){ this.tileChest = (TileEntityGiantChest)tile; for(int i = 0; i < 9; i++){ for(int j = 0; j < 13; j++){ - this.addSlotToContainer(new Slot(this.tileChest, j+(i*13), 5+j*18, 5+i*18)); + this.addSlotToContainer(new Slot(this.tileChest, (9*13*page)+j+(i*13), 5+j*18, 5+i*18)); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java index fe80795ca..600f10cfc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/GuiHandler.java @@ -39,7 +39,11 @@ public class GuiHandler implements IGuiHandler{ case FEEDER: return new ContainerFeeder(entityPlayer.inventory, tile); case GIANT_CHEST: - return new ContainerGiantChest(entityPlayer.inventory, tile); + return new ContainerGiantChest(entityPlayer.inventory, tile, 0); + case GIANT_CHEST_PAGE_2: + return new ContainerGiantChest(entityPlayer.inventory, tile, 1); + case GIANT_CHEST_PAGE_3: + return new ContainerGiantChest(entityPlayer.inventory, tile, 2); case CRAFTER: return new ContainerCrafter(entityPlayer); case GRINDER: @@ -107,7 +111,11 @@ public class GuiHandler implements IGuiHandler{ case FEEDER: return new GuiFeeder(entityPlayer.inventory, tile); case GIANT_CHEST: - return new GuiGiantChest(entityPlayer.inventory, tile); + return new GuiGiantChest(entityPlayer.inventory, tile, 0); + case GIANT_CHEST_PAGE_2: + return new GuiGiantChest(entityPlayer.inventory, tile, 1); + case GIANT_CHEST_PAGE_3: + return new GuiGiantChest(entityPlayer.inventory, tile, 2); case CRAFTER: return new GuiCrafter(entityPlayer); case GRINDER: @@ -172,6 +180,8 @@ public class GuiHandler implements IGuiHandler{ public enum GuiTypes{ FEEDER, GIANT_CHEST, + GIANT_CHEST_PAGE_2, + GIANT_CHEST_PAGE_3, CRAFTER(false), GRINDER, GRINDER_DOUBLE, diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index f3dfb19b0..07d484697 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -11,31 +11,67 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import de.ellpeck.actuallyadditions.mod.inventory.ContainerGiantChest; +import de.ellpeck.actuallyadditions.mod.network.PacketClientToServer; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChestLarge; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChestMedium; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import java.io.IOException; + @SideOnly(Side.CLIENT) public class GuiGiantChest extends GuiContainer{ private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("guiGiantChest"); - final TileEntityGiantChest chest; + private final TileEntityGiantChest chest; + private final int page; - public GuiGiantChest(InventoryPlayer inventory, TileEntityBase tile){ - super(new ContainerGiantChest(inventory, tile)); + public GuiGiantChest(InventoryPlayer inventory, TileEntityBase tile, int page){ + super(new ContainerGiantChest(inventory, tile, page)); this.chest = (TileEntityGiantChest)tile; + this.page = page; this.xSize = 242; this.ySize = 172+86; } + @Override + public void initGui(){ + super.initGui(); + + if(this.page > 0){ + this.buttonList.add(new GuiButton(this.page-1, this.guiLeft+13, this.guiTop+172, 20, 20, "<")); + } + + if((this.page == 0 && this.chest instanceof TileEntityGiantChestMedium) || (this.page <= 1 && this.chest instanceof TileEntityGiantChestLarge)){ + this.buttonList.add(new GuiButton(this.page+1, this.guiLeft+209, this.guiTop+172, 20, 20, ">")); + } + } + + @Override + protected void actionPerformed(GuiButton button) throws IOException{ + NBTTagCompound compound = new NBTTagCompound(); + compound.setInteger("X", this.chest.getPos().getX()); + compound.setInteger("Y", this.chest.getPos().getY()); + compound.setInteger("Z", this.chest.getPos().getZ()); + compound.setInteger("PlayerID", Minecraft.getMinecraft().thePlayer.getEntityId()); + compound.setInteger("WorldID", this.chest.getWorld().provider.getDimension()); + compound.setInteger("ButtonID", button.id); + PacketHandler.theNetwork.sendToServer(new PacketClientToServer(compound, PacketHandler.GUI_BUTTON_TO_TILE_HANDLER)); + } + @Override public void drawGuiContainerForegroundLayer(int x, int y){ AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.chest.getName()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index ebdd0c15b..84ebc3ed8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -53,6 +53,8 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ GameRegistry.registerTileEntity(TileEntityCompost.class, ModUtil.MOD_ID+":tileEntityCompost"); GameRegistry.registerTileEntity(TileEntityFeeder.class, ModUtil.MOD_ID+":tileEntityFeeder"); GameRegistry.registerTileEntity(TileEntityGiantChest.class, ModUtil.MOD_ID+":tileEntityGiantChest"); + GameRegistry.registerTileEntity(TileEntityGiantChestMedium.class, ModUtil.MOD_ID+":tileEntityGiantChestMedium"); + GameRegistry.registerTileEntity(TileEntityGiantChestLarge.class, ModUtil.MOD_ID+":tileEntityGiantChestLarge"); GameRegistry.registerTileEntity(TileEntityGrinder.class, ModUtil.MOD_ID+":tileEntityGrinder"); GameRegistry.registerTileEntity(TileEntityFurnaceDouble.class, ModUtil.MOD_ID+":tileEntityFurnaceDouble"); GameRegistry.registerTileEntity(TileEntityInputter.class, ModUtil.MOD_ID+":tileEntityInputter"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index dc259ff9f..1aa15f62c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -11,13 +11,21 @@ package de.ellpeck.actuallyadditions.mod.tile; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; +import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; -public class TileEntityGiantChest extends TileEntityInventoryBase{ +public class TileEntityGiantChest extends TileEntityInventoryBase implements IButtonReactor{ + + public TileEntityGiantChest(int slotAmount){ + super(slotAmount, "giantChest"); + } public TileEntityGiantChest(){ - super(9*13, "giantChest"); + this(9*13); } @Override @@ -34,4 +42,21 @@ public class TileEntityGiantChest extends TileEntityInventoryBase{ public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return true; } + + @Override + public void onButtonPressed(int buttonID, EntityPlayer player){ + GuiHandler.GuiTypes type; + + if(buttonID == 0){ + type = GuiHandler.GuiTypes.GIANT_CHEST; + } + else if(buttonID == 1){ + type = GuiHandler.GuiTypes.GIANT_CHEST_PAGE_2; + } + else{ + type = GuiHandler.GuiTypes.GIANT_CHEST_PAGE_3; + } + + player.openGui(ActuallyAdditions.instance, type.ordinal(), this.worldObj, this.pos.getX(), this.pos.getY(), this.pos.getZ()); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java new file mode 100644 index 000000000..c87183508 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java @@ -0,0 +1,18 @@ +/* + * This file ("TileEntityGiantChestLarge.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityGiantChestLarge extends TileEntityGiantChest{ + + public TileEntityGiantChestLarge(){ + super(9*13*3); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java new file mode 100644 index 000000000..02f5ab3f7 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java @@ -0,0 +1,18 @@ +/* + * This file ("TileEntityGiantChestMedium.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +public class TileEntityGiantChestMedium extends TileEntityGiantChest{ + + public TileEntityGiantChestMedium(){ + super(9*13*2); + } +} diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestLarge.json b/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestLarge.json new file mode 100644 index 000000000..063263e5a --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestLarge.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockGiantChestLarge", + "bottom": "actuallyadditions:blocks/blockGiantChestBottom", + "top": "actuallyadditions:blocks/blockGiantChestTop" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestMedium.json b/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestMedium.json new file mode 100644 index 000000000..4006a6906 --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/blockstates/blockGiantChestMedium.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "minecraft:cube_bottom_top", + "textures": { + "side": "actuallyadditions:blocks/blockGiantChestMedium", + "bottom": "actuallyadditions:blocks/blockGiantChestBottom", + "top": "actuallyadditions:blocks/blockGiantChestTop" + }, + "transform": "forge:default-block" + }, + "variants": { + "normal": [{}], + "inventory": [{}] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 747a0aed5..9bc36f4a6 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -108,7 +108,9 @@ tile.actuallyadditions.blockMiscBlackQuartz.name=Block of Black Quartz tile.actuallyadditions.blockMiscBlackQuartzChiseled.name=Chiseled Block of Black Quartz tile.actuallyadditions.blockMiscBlackQuartzPillar.name=Pillar of Black Quartz tile.actuallyadditions.blockFeeder.name=Automatic Feeder -tile.actuallyadditions.blockGiantChest.name=Storage Crate +tile.actuallyadditions.blockGiantChest.name=Small Storage Crate +tile.actuallyadditions.blockGiantChestMedium.name=Medium Storage Crate +tile.actuallyadditions.blockGiantChestLarge.name=Large Storage Crate tile.actuallyadditions.blockGrinder.name=Crusher tile.actuallyadditions.blockGrinderDouble.name=Double Crusher tile.actuallyadditions.blockFurnaceDouble.name=Double Furnace diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockGiantChestLarge.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockGiantChestLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..49370b6cb1fdfc8d5289f4e52ee706d06e09522a GIT binary patch literal 737 zcmV<70v`Q|P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Ra1OxyT zC|6#4BLDyZ7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M`KS@MER5(vf zlWR{JQ4oetn_g1WU(#w}S>$G7s;aqT_b6-3E}LbewR!#r$A(Um$;51Mui1F?lKiZFX=dVpBD>`c9!KJrNR31CE8Grg-zzIdO~m1 zQ_*(}bW1&=*PL5t-Q?VcdSJc*4q|)h8AZ4#&P2HgYk)Okz+n9Rykp^44{0`=k%Ad8 z_p2k5YaZeCXD{6_x0yA%%dLstW_)y)wbof5l@ng`5b+%_#uaZ|G_e}oWK4xGkQa}n z-E_$wDeb#yFc_FdLW6TQ5sU-_U2+lDFw)#$@|<+hA2wDs$v)U~nGIm$bigvwAtza@ ztT2_#oo8NIn8^gOLc}r>PBI-}2eQ*n85jyP2PG(cVJZA@8rQf+qpxAzoWgiKmYbLj z*zaNcPtZ=epho$SUC7}%q{(J{zM5Z8d*6fY-&TW8*wF8ja{5+JZ2N TWg=KE00000NkvXXu0mjf!NxlN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/actuallyadditions/textures/blocks/blockGiantChestMedium.png b/src/main/resources/assets/actuallyadditions/textures/blocks/blockGiantChestMedium.png new file mode 100644 index 0000000000000000000000000000000000000000..66772d667f9aad5146af2107c3c9d7c630fd2f89 GIT binary patch literal 756 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^Ra1OxyT zC|6#4BLDyZ7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M`Qb|NXR5(vf zlUYv_VHAdY&ypCpF(wKwF(}ZPPIsaqQR9_MnwAy{$RZWH7-^`f7OPZ1An+fcETvGI zrhoADyl1ABi>K$Cvvua2_j8?}pQBo>g0@zxpuQhmj*13u!Df6;LiNF3@N+;9}Qw)Q_!?er&J!@%K|u z*{TR0TaL?$$U3ZV<^x}~$gni*4J%PjQgxZ627>60>oC%|}5VD8J z@1QVtrLfz?X|SKREp@@TY9tlFj%cJfAHe11r7a{j*b)&@NEFbHB=Jlkbp)o*%YOV3 zVO5qz2eW>=0cD(uI6_*IpxBC7ic0q`J1=*|WJ6zm+7S{bnTm)4MQIxX1;w3{A}w{{ zSn6S8&XgPzU*nd&h3o5Uy@{EKaRc{%q6V^26SReBL3a>GT%BI{7 mRZ2hM>vHNW?D!gu2L1sPfixxW8}<_b0000 Date: Mon, 27 Jun 2016 20:24:45 +0200 Subject: [PATCH 305/322] Made this system less stupid --- .../mod/blocks/base/BlockBase.java | 3 +- .../mod/blocks/base/BlockBushBase.java | 3 +- .../mod/blocks/base/BlockContainerBase.java | 3 +- .../mod/blocks/base/BlockFluidFlowing.java | 3 +- .../mod/blocks/base/BlockPlant.java | 3 +- .../mod/blocks/base/BlockStair.java | 3 +- .../mod/blocks/base/ItemBlockBase.java | 29 +++++++------------ 7 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java index 450cb05db..36a4dbf66 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBase.java @@ -20,7 +20,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -public class BlockBase extends Block{ +public class BlockBase extends Block implements ItemBlockBase.ICustomRarity{ private final String name; @@ -53,6 +53,7 @@ public class BlockBase extends Block{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.COMMON; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java index fbdc95ce8..5cbbb7cac 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockBushBase.java @@ -20,7 +20,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -public class BlockBushBase extends BlockBush{ +public class BlockBushBase extends BlockBush implements ItemBlockBase.ICustomRarity{ private final String name; @@ -53,6 +53,7 @@ public class BlockBushBase extends BlockBush{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.COMMON; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index 641941389..c6fc11f5a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -41,7 +41,7 @@ import net.minecraftforge.fluids.FluidUtil; import java.util.ArrayList; import java.util.Random; -public abstract class BlockContainerBase extends BlockContainer{ +public abstract class BlockContainerBase extends BlockContainer implements ItemBlockBase.ICustomRarity{ private final String name; @@ -74,6 +74,7 @@ public abstract class BlockContainerBase extends BlockContainer{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.COMMON; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index 88c09b438..5e1b4cf57 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -22,7 +22,7 @@ import net.minecraft.world.World; import net.minecraftforge.fluids.BlockFluidClassic; import net.minecraftforge.fluids.Fluid; -public class BlockFluidFlowing extends BlockFluidClassic{ +public class BlockFluidFlowing extends BlockFluidClassic implements ItemBlockBase.ICustomRarity{ private final String name; @@ -60,6 +60,7 @@ public class BlockFluidFlowing extends BlockFluidClassic{ return !PosUtil.getMaterial(pos, world).isLiquid() && super.displaceIfPossible(world, pos); } + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.EPIC; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java index e212c1bb3..e3597c096 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockPlant.java @@ -29,7 +29,7 @@ import net.minecraftforge.common.EnumPlantType; import java.util.List; import java.util.Random; -public class BlockPlant extends BlockCrops{ +public class BlockPlant extends BlockCrops implements ItemBlockBase.ICustomRarity{ private final String name; private final int minDropAmount; @@ -73,6 +73,7 @@ public class BlockPlant extends BlockCrops{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java index d2c60f4e0..c8189a04d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockStair.java @@ -18,7 +18,7 @@ import net.minecraft.block.BlockStairs; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; -public class BlockStair extends BlockStairs{ +public class BlockStair extends BlockStairs implements ItemBlockBase.ICustomRarity{ private final String name; @@ -56,6 +56,7 @@ public class BlockStair extends BlockStairs{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } + @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.COMMON; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java index 3316ae28f..c4e3eea7f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/ItemBlockBase.java @@ -24,6 +24,7 @@ public class ItemBlockBase extends ItemBlock{ this.setMaxDamage(0); } + @Override public String getUnlocalizedName(ItemStack stack){ return this.getUnlocalizedName(); @@ -34,28 +35,20 @@ public class ItemBlockBase extends ItemBlock{ return damage; } + @Override public EnumRarity getRarity(ItemStack stack){ - if(this.block instanceof BlockBase){ - return ((BlockBase)this.block).getRarity(stack); - } - else if(this.block instanceof BlockContainerBase){ - return ((BlockContainerBase)this.block).getRarity(stack); - } - else if(this.block instanceof BlockFluidFlowing){ - return ((BlockFluidFlowing)this.block).getRarity(stack); - } - else if(this.block instanceof BlockPlant){ - return ((BlockPlant)this.block).getRarity(stack); - } - else if(this.block instanceof BlockStair){ - return ((BlockStair)this.block).getRarity(stack); - } - else if(this.block instanceof BlockBushBase){ - return ((BlockBushBase)this.block).getRarity(stack); + if(this.block instanceof ICustomRarity){ + return ((ICustomRarity)this.block).getRarity(stack); } else{ return Util.FALLBACK_RARITY; } } -} + + public interface ICustomRarity{ + + EnumRarity getRarity(ItemStack stack); + + } +} \ No newline at end of file From 2c4bb5adca486380ef802a97c32794d2561c0ed3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 27 Jun 2016 20:34:58 +0200 Subject: [PATCH 306/322] Larger crates recipe and doc --- .../mod/booklet/InitBooklet.java | 2 +- .../mod/crafting/BlockCrafting.java | 16 ++++++++++++++++ .../assets/actuallyadditions/lang/en_US.lang | 6 +++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index e06041d6b..c4f02ba6e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -103,7 +103,7 @@ public final class InitBooklet{ new BookletChapter("fishingNet", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFishingNet), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFisher).setNoText()); new BookletChapter("feeder", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockFeeder), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeFeeder).setNoText()); new BookletChapter("compost", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockCompost), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemFertilizer)), new PageCrafting(2, BlockCrafting.recipeCompost).setNoText(), new PageCrafting(3, ItemCrafting.RECIPES_MASHED_FOOD)); - new BookletChapter("crate", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGiantChest), new PageCrafting(1, BlockCrafting.recipeCrate), new PageCrafting(2, ItemCrafting.recipeCrateKeeper), new PageCrafting(3, ItemCrafting.recipeChestToCrateUpgrade)); + new BookletChapter("crate", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockGiantChest), new PageCrafting(1, BlockCrafting.recipeCrate), new PageCrafting(2, BlockCrafting.recipeCrateMedium).setNoText(), new PageCrafting(3, BlockCrafting.recipeCrateLarge).setNoText(), new PageCrafting(4, ItemCrafting.recipeCrateKeeper), new PageCrafting(5, ItemCrafting.recipeChestToCrateUpgrade)); new BookletChapter("rangedCollector", ActuallyAdditionsAPI.entryFunctionalNonRF, new ItemStack(InitBlocks.blockRangedCollector), new PageTextOnly(1).addTextReplacement("", TileEntityRangedCollector.RANGE), new PageCrafting(2, BlockCrafting.recipeRangedCollector).setNoText()); //RF Using Blocks diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java index bc7436b75..8b918ca82 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/crafting/BlockCrafting.java @@ -70,6 +70,8 @@ public final class BlockCrafting{ public static IRecipe recipeFeeder; public static IRecipe recipeCompost; public static IRecipe recipeCrate; + public static IRecipe recipeCrateMedium; + public static IRecipe recipeCrateLarge; public static IRecipe recipeFermentingBarrel; public static IRecipe recipeCanolaPress; public static IRecipe recipePowerer; @@ -660,6 +662,20 @@ public final class BlockCrafting{ 'D', new ItemStack(InitBlocks.blockMisc, 1, TheMiscBlocks.WOOD_CASING.ordinal()), 'W', "plankWood")); recipeCrate = RecipeUtil.lastIRecipe(); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockGiantChestMedium), + "CWC", "WDW", "CWC", + 'C', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), + 'D', new ItemStack(InitBlocks.blockGiantChest), + 'W', "plankWood")); + recipeCrateMedium = RecipeUtil.lastIRecipe(); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(InitBlocks.blockGiantChestLarge), + "CWC", "WDW", "CWC", + 'C', new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.COAL.ordinal()), + 'D', new ItemStack(InitBlocks.blockGiantChestMedium), + 'W', "plankWood")); + recipeCrateLarge = RecipeUtil.lastIRecipe(); } //Greenhouse Glass diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 9bc36f4a6..2f60c3187 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -734,9 +734,9 @@ booklet.actuallyadditions.chapter.compost.text.1=The Compost is used to booklet.actuallyadditions.chapter.compost.text.3=Mashed Food can be crafted from any type of food or plantable item. booklet.actuallyadditions.chapter.crate.name=Storage Crates -booklet.actuallyadditions.chapter.crate.text.1=Storage Crates are big. Really big. They hold tons of items, more than 4 chests worth of them. -booklet.actuallyadditions.chapter.crate.text.2=Placing a Storage Crate Keeper inside the Storage Crate before breaking it will cause it to keep all of its items, however the Keeper will be destroyed upon placing the Crate back down. -booklet.actuallyadditions.chapter.crate.text.3=The Chest To Storage Crate Upgrade allows you to convert any chest into a Storage Crate, retaining its items! Just shift-right-click onto the chest to apply it. +booklet.actuallyadditions.chapter.crate.text.1=Storage Crates are big. Really big. They hold tons of items, more than 4 chests worth of them. Not only that, but they can be upgraded in size! View the following pages to get information on that and some other items regarding crates! +booklet.actuallyadditions.chapter.crate.text.4=Placing a Storage Crate Keeper inside the Storage Crate before breaking it will cause it to keep all of its items, however the Keeper will be destroyed upon placing the Crate back down. +booklet.actuallyadditions.chapter.crate.text.5=The Chest To Storage Crate Upgrade allows you to convert any chest into a Storage Crate, retaining its items! Just shift-right-click onto the chest to apply it. booklet.actuallyadditions.chapter.coffeeMachine.name=Coffee Machine booklet.actuallyadditions.chapter.coffeeMachine.text.1=The Coffee Machine is a block used to make Coffee, a potion-like item that gives the user several buffs. To use the coffee machine, you need a Empty Cup, Coffee Beans, which can be found in the wild, harvested and planted on farmland again, RF/t and mB of Water per cup brewed. On the coffee machine recipe pages at the back, to see what the item does, just hover over the Cup of Coffee. From 26a7d7424768dcc3c7b7d2dd28f57282edf6bb2b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 27 Jun 2016 20:49:26 +0200 Subject: [PATCH 307/322] Updated forge, fixed some storage crate related stuff --- build.gradle | 4 ++-- .../actuallyadditions/mod/blocks/BlockGiantChest.java | 4 +++- .../de/ellpeck/actuallyadditions/mod/items/InitItems.java | 2 +- .../mod/jei/booklet/BookletRecipeHandler.java | 5 +++++ .../mod/jei/coffee/CoffeeMachineRecipeHandler.java | 5 +++++ .../mod/jei/crusher/CrusherRecipeHandler.java | 6 ++++++ .../mod/jei/reconstructor/ReconstructorRecipeHandler.java | 8 ++++++-- 7 files changed, 28 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index adf20d56a..7e5fd36e5 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.10-12.18.0.1983-1.10.0" + version = "1.10-12.18.0.2000-1.10.0" runDir = "idea" mappings = "snapshot_20160519" @@ -48,7 +48,7 @@ dependencies { //compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev" compile "net.darkhax.tesla:Tesla:1.9.4-1.1.0.24" - deobfCompile "mezz.jei:jei_1.9.4:3.4.0.202" + deobfCompile "mezz.jei:jei_1.10:3.7.1.219" } processResources { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java index 7541fe4d2..a2f76b152 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGiantChest.java @@ -115,9 +115,11 @@ public class BlockGiantChest extends BlockContainerBase{ for(int i = 0; i < slots.length; i++){ //Destroy the keeper if(i != place){ + NBTTagCompound compound = new NBTTagCompound(); if(slots[i] != null){ - list.appendTag(slots[i].writeToNBT(new NBTTagCompound())); + slots[i].writeToNBT(compound); } + list.appendTag(compound); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java index d038ba384..6ed36ad59 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -215,7 +215,7 @@ public final class InitItems{ itemWaterBowl = new ItemWaterBowl("itemWaterBowl"); itemSpawnerChanger = new ItemSpawnerChanger("itemSpawnerChanger"); itemMisc = new ItemMisc("itemMisc"); - itemCrateKeeper = new ItemGeneric("itemCrateKeeper"); + itemCrateKeeper = new ItemGeneric("itemCrateKeeper").setMaxStackSize(1); itemColorLens = new ItemLens("itemColorLens", ActuallyAdditionsAPI.lensColor); itemExplosionLens = new ItemLens("itemExplosionLens", ActuallyAdditionsAPI.lensDetonation); itemDamageLens = new ItemLens("itemDamageLens", ActuallyAdditionsAPI.lensDeath); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java index 02707e27f..63066054c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.jei.booklet; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; @@ -23,6 +24,10 @@ public class BookletRecipeHandler implements IRecipeHandler{ return BookletPage.class; } + @Override + public String getRecipeCategoryUid(BookletPage recipe){ + return this.getRecipeCategoryUid(); + } @Override public String getRecipeCategoryUid(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java index 564afd5b5..39615477e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.jei.coffee; +import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe; import mezz.jei.api.recipe.IRecipeHandler; @@ -23,6 +24,10 @@ public class CoffeeMachineRecipeHandler implements IRecipeHandler{ return CrusherRecipeCategory.NAME; } + @Override + public String getRecipeCategoryUid(CrusherRecipe recipe){ + return this.getRecipeCategoryUid(); + } + @Override public IRecipeWrapper getRecipeWrapper(CrusherRecipe recipe){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java index 7082944b4..d25c5e39f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/reconstructor/ReconstructorRecipeHandler.java @@ -15,20 +15,24 @@ import de.ellpeck.actuallyadditions.mod.nei.NEIReconstructorRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; -public class ReconstructorRecipeHandler implements IRecipeHandler{ +import javax.annotation.Nonnull; +public class ReconstructorRecipeHandler implements IRecipeHandler{ @Override public Class getRecipeClass(){ return LensConversionRecipe.class; } - @Override public String getRecipeCategoryUid(){ return NEIReconstructorRecipe.NAME; } + @Override + public String getRecipeCategoryUid(LensConversionRecipe recipe){ + return this.getRecipeCategoryUid(); + } @Override public IRecipeWrapper getRecipeWrapper(LensConversionRecipe recipe){ From b55c63538fcc58c9705c402476716e8d6a40adc3 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 29 Jun 2016 14:03:14 +0200 Subject: [PATCH 308/322] 1.10.2 and with that, r47! --- build.gradle | 4 ++-- update/changelog.md | 7 +++++++ update/updateVersions.properties | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 7e5fd36e5..3d26e29f4 100644 --- a/build.gradle +++ b/build.gradle @@ -14,12 +14,12 @@ buildscript { apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'idea' -version = "1.10-r46" +version = "1.10.2-r47" group = "de.ellpeck.actuallyadditions" archivesBaseName = "ActuallyAdditions" minecraft { - version = "1.10-12.18.0.2000-1.10.0" + version = "1.10.2-12.18.0.2002-1.10.0" runDir = "idea" mappings = "snapshot_20160519" diff --git a/update/changelog.md b/update/changelog.md index 61cab6d44..b50d5e3e8 100644 --- a/update/changelog.md +++ b/update/changelog.md @@ -1,3 +1,10 @@ +#1.10.2-r47 +* Updated to 1.10.2. Could've guessed that by the name. +* Fixed a crash when searching the booklet +* Made empty buckets be able to get pulled out of the coal generator +* Added biomass and biocoal made from canola seeds and made canola edible +* Added medium and large storage crates + # 1.10-r46 * Updated to 1.10. Obviously. * Made booklet actually save its bookmarks diff --git a/update/updateVersions.properties b/update/updateVersions.properties index a8ff10a10..debd0c5be 100644 --- a/update/updateVersions.properties +++ b/update/updateVersions.properties @@ -2,4 +2,5 @@ 1.8.9=26 1.9=33 1.9.4=45 -1.10=46 \ No newline at end of file +1.10=46 +1.10.2=47 \ No newline at end of file From 8461ffea03d8de9d60aa1f1af481d7e28367dc1b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 1 Jul 2016 13:56:15 +0200 Subject: [PATCH 309/322] memes --- .../actuallyadditions/mod/booklet/BookletUtils.java | 2 +- .../actuallyadditions/mod/booklet/GuiBooklet.java | 9 +++++++++ .../resources/assets/actuallyadditions/lang/en_US.lang | 6 +++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 02bd16056..12d081624 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -83,7 +83,7 @@ public final class BookletUtils{ //Draw No Entry title if(booklet.currentEntrySet.getCurrentEntry() == null){ - String strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID+".booklet.manualName.1"); + String strg = TextFormatting.DARK_GREEN+StringUtil.localize(booklet.bookletName); booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+12, 0); strg = TextFormatting.DARK_GREEN+StringUtil.localize("info."+ModUtil.MOD_ID+".booklet.manualName.2"); booklet.getFontRenderer().drawString(strg, booklet.guiLeft+booklet.xSize/2-booklet.getFontRenderer().getStringWidth(strg)/2-3, booklet.guiTop+12+booklet.getFontRenderer().FONT_HEIGHT, 0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java index 5f47512db..9a04aae48 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/GuiBooklet.java @@ -31,6 +31,7 @@ import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; @@ -42,6 +43,7 @@ import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.relauncher.Side; @@ -92,6 +94,7 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ private int ticksElapsed; private boolean mousePressed; private int hisNameIsAt; + public String bookletName; public GuiBooklet(GuiScreen parentScreen, boolean tryOpenMainPage, boolean saveOnClose){ this.xSize = 146; @@ -302,6 +305,12 @@ public class GuiBooklet extends GuiScreen implements IBookletGui{ @Override public void initGui(){ + int flavor = 1; + if(Util.RANDOM.nextFloat() <= 0.1){ + flavor = MathHelper.getRandomIntegerInRange(Util.RANDOM, 2, 5); + } + this.bookletName = "info."+ModUtil.MOD_ID+".booklet.manualName.1."+flavor; + this.guiLeft = (this.width-this.xSize)/2; this.guiTop = (this.height-this.ySize)/2; diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 2f60c3187..babc62068 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -552,7 +552,11 @@ info.actuallyadditions.inputter.info.1=This is the first Slot in the connected I info.actuallyadditions.inputter.info.2=This is the slot after the last Slot in the connected Inventory to

    at. What that means: If you, for example, write 2 in the field to the left and 5 in this one, it will

    at Slot 2, 3, and 4. info.actuallyadditions.inputter.whitelistInfo=When pressing this, this side's whitelist mode will be changed. To let all items through, an empty blacklist can be used, to let no items through, an empty whitelist can be used. To configure certain items, place them or configured Item Filters in the slots. info.actuallyadditions.noLens=No Lens -info.actuallyadditions.booklet.manualName.1=Actually Additions +info.actuallyadditions.booklet.manualName.1.1=Actually Additions +info.actuallyadditions.booklet.manualName.1.2=Actual Additions +info.actuallyadditions.booklet.manualName.1.3=Actually Addiction +info.actuallyadditions.booklet.manualName.1.4=Actual Edition +info.actuallyadditions.booklet.manualName.1.5=Actual Addition info.actuallyadditions.booklet.manualName.2=Manual info.actuallyadditions.booklet.edition=Edition info.actuallyadditions.deathRecorded=Your death has been recorded. Use a Death Tracker to find the death location! From 794032870ab26ee5170eb8cbf1bb0405ac68935b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 2 Jul 2016 15:01:46 +0200 Subject: [PATCH 310/322] Changed NBT saving system and thus removing some unnecessary interfaces --- .../mod/blocks/base/BlockContainerBase.java | 104 ++++++++---------- .../actuallyadditions/mod/event/HudEvent.java | 23 ++-- .../mod/tile/IEnergySaver.java | 18 --- .../mod/tile/IFluidSaver.java | 20 ---- .../mod/tile/IRedstoneToggle.java | 20 ---- .../tile/TileEntityAtomicReconstructor.java | 39 +++---- .../mod/tile/TileEntityBase.java | 39 +++++-- .../mod/tile/TileEntityBookletStand.java | 22 ++-- .../mod/tile/TileEntityBreaker.java | 30 +++-- .../mod/tile/TileEntityCanolaPress.java | 38 ++----- .../mod/tile/TileEntityCoalGenerator.java | 32 +++--- .../mod/tile/TileEntityCoffeeMachine.java | 42 +++---- .../mod/tile/TileEntityCompost.java | 16 ++- .../tile/TileEntityDirectionalBreaker.java | 39 +++---- .../mod/tile/TileEntityDisplayStand.java | 8 +- .../mod/tile/TileEntityDropper.java | 30 +++-- .../mod/tile/TileEntityEnergizer.java | 20 +--- .../mod/tile/TileEntityEnervator.java | 20 +--- .../mod/tile/TileEntityFeeder.java | 12 +- .../mod/tile/TileEntityFermentingBarrel.java | 22 +--- .../mod/tile/TileEntityFireworkBox.java | 27 ++--- .../mod/tile/TileEntityFishingNet.java | 16 ++- .../mod/tile/TileEntityFluidCollector.java | 40 +++---- .../mod/tile/TileEntityFurnaceDouble.java | 32 +++--- .../mod/tile/TileEntityFurnaceSolar.java | 15 +-- .../mod/tile/TileEntityGreenhouseGlass.java | 16 ++- .../mod/tile/TileEntityGrinder.java | 32 +++--- .../mod/tile/TileEntityHeatCollector.java | 15 +-- .../mod/tile/TileEntityInputter.java | 44 ++++---- .../mod/tile/TileEntityInventoryBase.java | 12 +- .../mod/tile/TileEntityItemRepairer.java | 28 ++--- .../TileEntityLaserRelayItemWhitelist.java | 12 +- .../tile/TileEntityLavaFactoryController.java | 23 ++-- .../mod/tile/TileEntityLeafGenerator.java | 15 +-- .../mod/tile/TileEntityMiner.java | 29 ++--- .../mod/tile/TileEntityOilGenerator.java | 38 ++----- .../mod/tile/TileEntityPhantomPlacer.java | 50 ++++----- .../mod/tile/TileEntityPhantomface.java | 36 +++--- .../mod/tile/TileEntityPlayerInterface.java | 8 +- .../mod/tile/TileEntityRangedCollector.java | 16 ++- .../mod/tile/TileEntitySmileyCloud.java | 14 ++- .../mod/tile/TileEntityXPSolidifier.java | 8 +- 42 files changed, 464 insertions(+), 656 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java index c6fc11f5a..8c65b55a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockContainerBase.java @@ -11,7 +11,8 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; -import de.ellpeck.actuallyadditions.mod.tile.*; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; @@ -28,17 +29,19 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagInt; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumBlockRenderType; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidUtil; import java.util.ArrayList; +import java.util.List; import java.util.Random; public abstract class BlockContainerBase extends BlockContainer implements ItemBlockBase.ICustomRarity{ @@ -112,9 +115,10 @@ public abstract class BlockContainerBase extends BlockContainer implements ItemB ItemStack stack = player.getHeldItemMainhand(); if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ TileEntity tile = world.getTileEntity(pos); - if(tile instanceof IRedstoneToggle){ - if(!world.isRemote){ - ((IRedstoneToggle)tile).toggle(!((IRedstoneToggle)tile).isPulseMode()); + if(tile instanceof TileEntityBase){ + TileEntityBase base = (TileEntityBase)tile; + if(!world.isRemote && base.isRedstoneToggle()){ + base.isPulseMode = !base.isPulseMode; tile.markDirty(); if(tile instanceof TileEntityBase){ @@ -141,8 +145,11 @@ public abstract class BlockContainerBase extends BlockContainer implements ItemB public void updateTick(World world, BlockPos pos, IBlockState state, Random random){ if(!world.isRemote){ TileEntity tile = world.getTileEntity(pos); - if(tile instanceof IRedstoneToggle && ((IRedstoneToggle)tile).isPulseMode()){ - ((IRedstoneToggle)tile).activateOnPulse(); + if(tile instanceof TileEntityBase){ + TileEntityBase base = (TileEntityBase)tile; + if(base.isRedstoneToggle() && base.isPulseMode){ + base.activateOnPulse(); + } } } } @@ -156,16 +163,17 @@ public abstract class BlockContainerBase extends BlockContainer implements ItemB if(!world.isRemote){ TileEntity tile = world.getTileEntity(pos); if(tile instanceof TileEntityBase){ + TileEntityBase base = (TileEntityBase)tile; boolean powered = world.isBlockIndirectlyGettingPowered(pos) > 0; - boolean wasPowered = ((TileEntityBase)tile).isRedstonePowered; + boolean wasPowered = base.isRedstonePowered; if(powered && !wasPowered){ - if(tile instanceof IRedstoneToggle && ((IRedstoneToggle)tile).isPulseMode()){ + if(base.isRedstoneToggle() && base.isPulseMode){ world.scheduleUpdate(pos, this, this.tickRate(world)); } - ((TileEntityBase)tile).setRedstonePowered(true); + base.setRedstonePowered(true); } else if(!powered && wasPowered){ - ((TileEntityBase)tile).setRedstonePowered(false); + base.setRedstonePowered(false); } } } @@ -182,31 +190,12 @@ public abstract class BlockContainerBase extends BlockContainer implements ItemB @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase entity, ItemStack stack){ - if(stack.getTagCompound() != null){ + if(stack.hasTagCompound()){ TileEntity tile = world.getTileEntity(pos); - - if(tile instanceof IEnergySaver){ - ((IEnergySaver)tile).setEnergy(stack.getTagCompound().getInteger("Energy")); - stack.getTagCompound().removeTag("Energy"); - } - - if(tile instanceof IFluidSaver){ - int amount = stack.getTagCompound().getInteger("FluidAmount"); - stack.getTagCompound().removeTag("FluidAmount"); - - if(amount > 0){ - FluidStack[] fluids = new FluidStack[amount]; - - for(int i = 0; i < amount; i++){ - NBTTagCompound compound = stack.getTagCompound().getCompoundTag("Fluid"+i); - stack.getTagCompound().removeTag("Fluid"+i); - if(compound != null){ - fluids[i] = FluidStack.loadFluidStackFromNBT(compound); - } - } - - ((IFluidSaver)tile).setFluids(fluids); - } + if(tile instanceof TileEntityBase){ + TileEntityBase base = (TileEntityBase)tile; + NBTTagCompound compound = stack.getTagCompound().getCompoundTag("Data"); + base.readSyncableNBT(compound, TileEntityBase.NBTType.SAVE_BLOCK); } } } @@ -246,36 +235,31 @@ public abstract class BlockContainerBase extends BlockContainer implements ItemB ArrayList drops = new ArrayList(); TileEntity tile = world.getTileEntity(pos); - if(tile != null){ - ItemStack stack = new ItemStack(this.getItemDropped(state, Util.RANDOM, fortune), 1, this.damageDropped(state)); + if(tile instanceof TileEntityBase){ + TileEntityBase base = (TileEntityBase)tile; + NBTTagCompound data = new NBTTagCompound(); + base.writeSyncableNBT(data, TileEntityBase.NBTType.SAVE_BLOCK); - if(tile instanceof IEnergySaver){ - int energy = ((IEnergySaver)tile).getEnergy(); - if(energy > 0){ - if(stack.getTagCompound() == null){ - stack.setTagCompound(new NBTTagCompound()); + //Remove unnecessarily saved default values to avoid unstackability + List keysToRemove = new ArrayList(); + for(String key : data.getKeySet()){ + NBTBase tag = data.getTag(key); + //Remove only ints because they are the most common ones + //Add else if below here to remove more types + if(tag instanceof NBTTagInt){ + if(((NBTTagInt)tag).getInt() == 0){ + keysToRemove.add(key); } - stack.getTagCompound().setInteger("Energy", energy); } } + for(String key : keysToRemove){ + data.removeTag(key); + } - if(tile instanceof IFluidSaver){ - FluidStack[] fluids = ((IFluidSaver)tile).getFluids(); - - if(fluids != null && fluids.length > 0){ - if(stack.getTagCompound() == null){ - stack.setTagCompound(new NBTTagCompound()); - } - - stack.getTagCompound().setInteger("FluidAmount", fluids.length); - for(int i = 0; i < fluids.length; i++){ - if(fluids[i] != null && fluids[i].amount > 0){ - NBTTagCompound compound = new NBTTagCompound(); - fluids[i].writeToNBT(compound); - stack.getTagCompound().setTag("Fluid"+i, compound); - } - } - } + ItemStack stack = new ItemStack(this.getItemDropped(state, Util.RANDOM, fortune), 1, this.damageDropped(state)); + if(!data.hasNoTags()){ + stack.setTagCompound(new NBTTagCompound()); + stack.getTagCompound().setTag("Data", data); } drops.add(stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index 2333e9b75..e448e7747 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.event; import de.ellpeck.actuallyadditions.mod.blocks.IHudDisplay; import de.ellpeck.actuallyadditions.mod.tile.IEnergyDisplay; -import de.ellpeck.actuallyadditions.mod.tile.IRedstoneToggle; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; @@ -61,18 +61,21 @@ public class HudEvent{ profiler.endSection(); } - if(tileHit instanceof IRedstoneToggle){ - profiler.startSection("RedstoneToggleHudDisplay"); + if(tileHit instanceof TileEntityBase){ + TileEntityBase base = (TileEntityBase)tileHit; + if(base.isRedstoneToggle()){ + profiler.startSection("RedstoneToggleHudDisplay"); - String strg = "Redstone Mode: "+TextFormatting.DARK_RED+(((IRedstoneToggle)tileHit).isPulseMode() ? "Pulse" : "Deactivation")+TextFormatting.RESET; - font.drawStringWithShadow(strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); + String strg = "Redstone Mode: "+TextFormatting.DARK_RED+(base.isPulseMode ? "Pulse" : "Deactivation")+TextFormatting.RESET; + font.drawStringWithShadow(strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); - if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ - String expl = TextFormatting.GREEN+"Right-Click to toggle!"; - font.drawStringWithShadow(expl, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); + if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ + String expl = TextFormatting.GREEN+"Right-Click to toggle!"; + font.drawStringWithShadow(expl, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); + } + + profiler.endSection(); } - - profiler.endSection(); } if(tileHit instanceof IEnergyDisplay){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java deleted file mode 100644 index bf36a147c..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergySaver.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * This file ("IEnergySaver.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.tile; - -public interface IEnergySaver{ - - int getEnergy(); - - void setEnergy(int energy); -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java deleted file mode 100644 index 90a706d69..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IFluidSaver.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * This file ("IFluidSaver.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.tile; - -import net.minecraftforge.fluids.FluidStack; - -public interface IFluidSaver{ - - FluidStack[] getFluids(); - - void setFluids(FluidStack[] fluids); -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java deleted file mode 100644 index 60a877c26..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IRedstoneToggle.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * This file ("IRedstoneToggle.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.tile; - -public interface IRedstoneToggle{ - - void toggle(boolean to); - - boolean isPulseMode(); - - void activateOnPulse(); -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index bdf0ff9ba..7e8a8c353 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -30,13 +30,12 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityAtomicReconstructor extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle, IEnergyDisplay, IAtomicReconstructor{ +public class TileEntityAtomicReconstructor extends TileEntityInventoryBase implements IEnergyReceiver, IEnergyDisplay, IAtomicReconstructor{ public static final int ENERGY_USE = 1000; public final EnergyStorage storage = new EnergyStorage(300000); public int counter; private int currentTime; - private boolean activateOnceWithSignal; private int oldEnergy; public TileEntityAtomicReconstructor(){ @@ -51,10 +50,12 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("CurrentTime", this.currentTime); - compound.setInteger("Counter", this.counter); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("CurrentTime", this.currentTime); + compound.setInteger("Counter", this.counter); + } this.storage.writeToNBT(compound); } @@ -64,10 +65,12 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.currentTime = compound.getInteger("CurrentTime"); - this.counter = compound.getInteger("Counter"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.currentTime = compound.getInteger("CurrentTime"); + this.counter = compound.getInteger("Counter"); + } this.storage.readFromNBT(compound); } @@ -75,7 +78,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(!this.isRedstonePowered && !this.isPulseMode){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ @@ -198,11 +201,6 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return this.storage.getEnergyStored(); } - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - @Override @SideOnly(Side.CLIENT) public int getMaxEnergy(){ @@ -210,13 +208,8 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple } @Override - public void toggle(boolean to){ - this.activateOnceWithSignal = to; - } - - @Override - public boolean isPulseMode(){ - return this.activateOnceWithSignal; + public boolean isRedstoneToggle(){ + return true; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 84ebc3ed8..16aa41169 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -40,6 +40,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public static boolean teslaLoaded; public final String name; public boolean isRedstonePowered; + public boolean isPulseMode; protected int ticksElapsed; public TileEntityBase(String name){ @@ -113,14 +114,14 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ @Override public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); - this.readSyncableNBT(compound, false); + this.readSyncableNBT(compound, NBTType.SAVE_TILE); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound){ compound = super.writeToNBT(compound); - this.writeSyncableNBT(compound, false); + this.writeSyncableNBT(compound, NBTType.SAVE_TILE); return compound; } @@ -148,13 +149,13 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } public void receiveSyncCompound(NBTTagCompound compound){ - this.readSyncableNBT(compound, true); + this.readSyncableNBT(compound, NBTType.SYNC); } @Override public NBTTagCompound getUpdateTag(){ NBTTagCompound tag = super.getUpdateTag(); - this.writeSyncableNBT(tag, true); + this.writeSyncableNBT(tag, NBTType.SYNC); return tag; } @@ -163,21 +164,21 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.receiveSyncCompound(compound); } - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - if(!isForSync){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type == NBTType.SAVE_TILE){ compound.setBoolean("Redstone", this.isRedstonePowered); } - if(this instanceof IRedstoneToggle){ - compound.setBoolean("IsPulseMode", ((IRedstoneToggle)this).isPulseMode()); + if(this.isRedstoneToggle() && (type != NBTType.SAVE_BLOCK || this.isPulseMode)){ + compound.setBoolean("IsPulseMode", this.isPulseMode); } } - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - if(!isForSync){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type == NBTType.SAVE_TILE){ this.isRedstonePowered = compound.getBoolean("Redstone"); } - if(this instanceof IRedstoneToggle){ - ((IRedstoneToggle)this).toggle(compound.getBoolean("IsPulseMode")); + if(this.isRedstoneToggle()){ + this.isPulseMode = compound.getBoolean("IsPulseMode"); } } @@ -258,4 +259,18 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ public IFluidHandler getFluidHandler(EnumFacing facing){ return null; } + + public boolean isRedstoneToggle(){ + return false; + } + + public void activateOnPulse(){ + + } + + public enum NBTType{ + SAVE_TILE, + SYNC, + SAVE_BLOCK + } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java index 4605cd892..390edccbe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBookletStand.java @@ -23,19 +23,23 @@ public class TileEntityBookletStand extends TileEntityBase{ } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); - compound.setTag("SavedEntry", this.assignedEntry.writeToNBT()); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setTag("SavedEntry", this.assignedEntry.writeToNBT()); - if(this.assignedPlayer != null){ - compound.setString("Player", this.assignedPlayer); + if(this.assignedPlayer != null){ + compound.setString("Player", this.assignedPlayer); + } } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.readSyncableNBT(compound, isForSync); - this.assignedEntry = EntrySet.readFromNBT(compound.getCompoundTag("SavedEntry")); - this.assignedPlayer = compound.getString("Player"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.assignedEntry = EntrySet.readFromNBT(compound.getCompoundTag("SavedEntry")); + this.assignedPlayer = compound.getString("Player"); + } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 188bd8c3b..95d8d0a3b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -26,11 +26,10 @@ import net.minecraftforge.event.ForgeEventFactory; import java.util.List; -public class TileEntityBreaker extends TileEntityInventoryBase implements IRedstoneToggle{ +public class TileEntityBreaker extends TileEntityInventoryBase{ public boolean isPlacer; private int currentTime; - private boolean activateOnceWithSignal; public TileEntityBreaker(int slots, String name){ super(slots, name); @@ -42,22 +41,26 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("CurrentTime", this.currentTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("CurrentTime", this.currentTime); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.currentTime = compound.getInteger("CurrentTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.currentTime = compound.getInteger("CurrentTime"); + } } @Override public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(!this.isRedstonePowered && !this.isPulseMode){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ @@ -117,13 +120,8 @@ public class TileEntityBreaker extends TileEntityInventoryBase implements IRedst } @Override - public void toggle(boolean to){ - this.activateOnceWithSignal = to; - } - - @Override - public boolean isPulseMode(){ - return this.activateOnceWithSignal; + public boolean isRedstoneToggle(){ + return true; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java index 5e6bbfd03..e87cb1b6c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCanolaPress.java @@ -25,7 +25,7 @@ import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IFluidSaver, net.minecraftforge.fluids.IFluidHandler{ +public class TileEntityCanolaPress extends TileEntityInventoryBase implements IEnergyReceiver, net.minecraftforge.fluids.IFluidHandler{ public static final int PRODUCE = 80; public static final int ENERGY_USE = 35; @@ -62,19 +62,23 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - compound.setInteger("ProcessTime", this.currentProcessTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("ProcessTime", this.currentProcessTime); + } this.storage.writeToNBT(compound); this.tank.writeToNBT(compound); - super.writeSyncableNBT(compound, sync); + super.writeSyncableNBT(compound, type); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - this.currentProcessTime = compound.getInteger("ProcessTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + this.currentProcessTime = compound.getInteger("ProcessTime"); + } this.storage.readFromNBT(compound); this.tank.readFromNBT(compound); - super.readSyncableNBT(compound, sync); + super.readSyncableNBT(compound, type); } @Override @@ -149,26 +153,6 @@ public class TileEntityCanolaPress extends TileEntityInventoryBase implements IE return true; } - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - - @Override - public FluidStack[] getFluids(){ - return new FluidStack[]{this.tank.getFluid()}; - } - - @Override - public void setFluids(FluidStack[] fluids){ - this.tank.setFluid(fluids[0]); - } - @Override public FluidTank getFluidHandler(EnumFacing facing){ return facing != EnumFacing.UP ? this.tank : null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java index a9aa91d9f..8a721f8eb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoalGenerator.java @@ -19,7 +19,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityCoalGenerator extends TileEntityInventoryBase implements IEnergyProvider, IEnergySaver{ +public class TileEntityCoalGenerator extends TileEntityInventoryBase implements IEnergyProvider{ public static final int PRODUCE = 30; public final EnergyStorage storage = new EnergyStorage(60000); @@ -44,19 +44,23 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - compound.setInteger("BurnTime", this.currentBurnTime); - compound.setInteger("MaxBurnTime", this.maxBurnTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("BurnTime", this.currentBurnTime); + compound.setInteger("MaxBurnTime", this.maxBurnTime); + } this.storage.writeToNBT(compound); - super.writeSyncableNBT(compound, sync); + super.writeSyncableNBT(compound, type); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - this.currentBurnTime = compound.getInteger("BurnTime"); - this.maxBurnTime = compound.getInteger("MaxBurnTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + this.currentBurnTime = compound.getInteger("BurnTime"); + this.maxBurnTime = compound.getInteger("MaxBurnTime"); + } this.storage.readFromNBT(compound); - super.readSyncableNBT(compound, sync); + super.readSyncableNBT(compound, type); } @Override @@ -127,14 +131,4 @@ public class TileEntityCoalGenerator extends TileEntityInventoryBase implements public boolean canConnectEnergy(EnumFacing from){ return true; } - - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java index 0ecf07b9d..4d9962f43 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCoffeeMachine.java @@ -31,7 +31,7 @@ import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidSaver, IEnergySaver, net.minecraftforge.fluids.IFluidHandler{ +public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, net.minecraftforge.fluids.IFluidHandler{ public static final int SLOT_COFFEE_BEANS = 0; public static final int SLOT_INPUT = 1; @@ -85,21 +85,25 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); this.tank.writeToNBT(compound); - compound.setInteger("Cache", this.coffeeCacheAmount); - compound.setInteger("Time", this.brewTime); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("Cache", this.coffeeCacheAmount); + compound.setInteger("Time", this.brewTime); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); this.tank.readFromNBT(compound); - this.coffeeCacheAmount = compound.getInteger("Cache"); - this.brewTime = compound.getInteger("Time"); + if(type != NBTType.SAVE_BLOCK){ + this.coffeeCacheAmount = compound.getInteger("Cache"); + this.brewTime = compound.getInteger("Time"); + } } @Override @@ -218,26 +222,6 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements return true; } - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - - @Override - public FluidStack[] getFluids(){ - return new FluidStack[]{this.tank.getFluid()}; - } - - @Override - public void setFluids(FluidStack[] fluids){ - this.tank.setFluid(fluids[0]); - } - @Override public FluidTank getFluidHandler(EnumFacing facing){ return facing != EnumFacing.DOWN ? this.tank : null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java index c97aae9e3..b309a9fd3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityCompost.java @@ -36,9 +36,11 @@ public class TileEntityCompost extends TileEntityInventoryBase{ } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("ConversionTime", this.conversionTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("ConversionTime", this.conversionTime); + } } @Override @@ -47,9 +49,11 @@ public class TileEntityCompost extends TileEntityInventoryBase{ } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.conversionTime = compound.getInteger("ConversionTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.conversionTime = compound.getInteger("ConversionTime"); + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index 7e04cd372..d99148ad7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -28,38 +28,41 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; -public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver, IRedstoneToggle{ +public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implements IEnergyReceiver{ public static final int RANGE = 8; public static final int ENERGY_USE = 5; public final EnergyStorage storage = new EnergyStorage(10000); private int lastEnergy; private int currentTime; - private boolean activateOnceWithSignal; public TileEntityDirectionalBreaker(){ super(9, "directionalBreaker"); } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); - compound.setInteger("CurrentTime", this.currentTime); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("CurrentTime", this.currentTime); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); - this.currentTime = compound.getInteger("CurrentTime"); + if(type != NBTType.SAVE_BLOCK){ + this.currentTime = compound.getInteger("CurrentTime"); + } } @Override public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(!this.isRedstonePowered && !this.isPulseMode){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ @@ -144,24 +147,10 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem return true; } - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - - @Override - public void toggle(boolean to){ - this.activateOnceWithSignal = to; - } - - @Override - public boolean isPulseMode(){ - return this.activateOnceWithSignal; + public boolean isRedstoneToggle(){ + return true; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java index d6c9ef76d..d1769dce5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java @@ -74,14 +74,14 @@ public class TileEntityDisplayStand extends TileEntityInventoryBase implements I } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.readSyncableNBT(compound, isForSync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index f0af92a6c..c0fc0e9c0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -16,32 +16,35 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; -public class TileEntityDropper extends TileEntityInventoryBase implements IRedstoneToggle{ +public class TileEntityDropper extends TileEntityInventoryBase{ private int currentTime; - private boolean activateOnceWithSignal; public TileEntityDropper(){ super(9, "dropper"); } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("CurrentTime", this.currentTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("CurrentTime", this.currentTime); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.currentTime = compound.getInteger("CurrentTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.currentTime = compound.getInteger("CurrentTime"); + } } @Override public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(!this.isRedstonePowered && !this.isPulseMode){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ @@ -95,13 +98,8 @@ public class TileEntityDropper extends TileEntityInventoryBase implements IRedst } @Override - public void toggle(boolean to){ - this.activateOnceWithSignal = to; - } - - @Override - public boolean isPulseMode(){ - return this.activateOnceWithSignal; + public boolean isRedstoneToggle(){ + return true; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index be8b561ce..aec10a9e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -19,7 +19,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityEnergizer extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ +public class TileEntityEnergizer extends TileEntityInventoryBase implements IEnergyReceiver{ public final EnergyStorage storage = new EnergyStorage(500000); private int lastEnergy; @@ -29,15 +29,15 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ this.storage.writeToNBT(compound); - super.writeSyncableNBT(compound, sync); + super.writeSyncableNBT(compound, type); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ this.storage.readFromNBT(compound); - super.readSyncableNBT(compound, sync); + super.readSyncableNBT(compound, type); } @Override @@ -104,14 +104,4 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne public boolean canConnectEnergy(EnumFacing from){ return true; } - - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index d040975ff..526c968f4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -19,7 +19,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityEnervator extends TileEntityInventoryBase implements IEnergyProvider, IEnergySaver{ +public class TileEntityEnervator extends TileEntityInventoryBase implements IEnergyProvider{ public final EnergyStorage storage = new EnergyStorage(500000); private int lastEnergy; @@ -29,15 +29,15 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ this.storage.writeToNBT(compound); - super.writeSyncableNBT(compound, sync); + super.writeSyncableNBT(compound, type); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ this.storage.readFromNBT(compound); - super.readSyncableNBT(compound, sync); + super.readSyncableNBT(compound, type); } @Override @@ -104,14 +104,4 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side){ return slot == 1; } - - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java index b8cf54224..59c47d9ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFeeder.java @@ -41,19 +41,19 @@ public class TileEntityFeeder extends TileEntityInventoryBase{ } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); compound.setInteger("Timer", this.currentTimer); - if(sync){ + if(type == NBTType.SYNC){ compound.setInteger("Animals", this.currentAnimalAmount); } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.currentTimer = compound.getInteger("Timer"); - if(sync){ + if(type == NBTType.SYNC){ this.currentAnimalAmount = compound.getInteger("Animals"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java index 1919c1f60..490690db6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFermentingBarrel.java @@ -21,7 +21,7 @@ import net.minecraftforge.fluids.capability.templates.FluidHandlerFluidMap; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFermentingBarrel extends TileEntityBase implements IFluidSaver, net.minecraftforge.fluids.IFluidHandler{ +public class TileEntityFermentingBarrel extends TileEntityBase implements net.minecraftforge.fluids.IFluidHandler{ private static final int PROCESS_TIME = 100; public final FluidTank canolaTank = new FluidTank(2*Util.BUCKET){ @@ -51,21 +51,21 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ compound.setInteger("ProcessTime", this.currentProcessTime); this.canolaTank.writeToNBT(compound); NBTTagCompound tag = new NBTTagCompound(); this.oilTank.writeToNBT(tag); compound.setTag("OilTank", tag); - super.writeSyncableNBT(compound, sync); + super.writeSyncableNBT(compound, type); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ this.currentProcessTime = compound.getInteger("ProcessTime"); this.canolaTank.readFromNBT(compound); this.oilTank.readFromNBT((NBTTagCompound)compound.getTag("OilTank")); - super.readSyncableNBT(compound, sync); + super.readSyncableNBT(compound, type); } @Override @@ -122,18 +122,6 @@ public class TileEntityFermentingBarrel extends TileEntityBase implements IFluid return map; } - @Override - public FluidStack[] getFluids(){ - return new FluidStack[]{this.oilTank.getFluid(), this.canolaTank.getFluid()}; - } - - @Override - public void setFluids(FluidStack[] fluids){ - this.oilTank.setFluid(fluids[0]); - this.canolaTank.setFluid(fluids[1]); - } - - @Override public int fill(EnumFacing from, FluidStack resource, boolean doFill){ IFluidHandler handler = this.getFluidHandler(from); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index 3158917d6..7d9792b6f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -25,12 +25,11 @@ import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFireworkBox extends TileEntityBase implements IEnergyReceiver, IRedstoneToggle, IEnergyDisplay, IEnergySaver{ +public class TileEntityFireworkBox extends TileEntityBase implements IEnergyReceiver, IEnergyDisplay{ public static final int USE_PER_SHOT = 300; public final EnergyStorage storage = new EnergyStorage(20000); private int timeUntilNextFirework; - private boolean activateOnceWithSignal; private int oldEnergy; public TileEntityFireworkBox(){ @@ -94,21 +93,21 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); } @Override public void updateEntity(){ if(!this.worldObj.isRemote){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(!this.isRedstonePowered && !this.isPulseMode){ if(this.timeUntilNextFirework > 0){ this.timeUntilNextFirework--; if(this.timeUntilNextFirework <= 0){ @@ -155,13 +154,8 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece } @Override - public void toggle(boolean to){ - this.activateOnceWithSignal = to; - } - - @Override - public boolean isPulseMode(){ - return this.activateOnceWithSignal; + public boolean isRedstoneToggle(){ + return true; } @Override @@ -174,11 +168,6 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece return this.storage.getEnergyStored(); } - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - @Override @SideOnly(Side.CLIENT) public int getMaxEnergy(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index 9b41dc36c..31708fe00 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -37,15 +37,19 @@ public class TileEntityFishingNet extends TileEntityBase{ } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("TimeUntilNextDrop", this.timeUntilNextDrop); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("TimeUntilNextDrop", this.timeUntilNextDrop); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.timeUntilNextDrop = compound.getInteger("TimeUntilNextDrop"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.timeUntilNextDrop = compound.getInteger("TimeUntilNextDrop"); + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index a4290361f..4bf35d1c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -26,7 +26,7 @@ import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFluidCollector extends TileEntityBase implements IFluidSaver, IRedstoneToggle, net.minecraftforge.fluids.IFluidHandler{ +public class TileEntityFluidCollector extends TileEntityBase implements net.minecraftforge.fluids.IFluidHandler{ public final FluidTank tank = new FluidTank(8*Util.BUCKET){ @Override @@ -42,7 +42,6 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa public boolean isPlacer; private int lastTankAmount; private int currentTime; - private boolean activateOnceWithSignal; public TileEntityFluidCollector(String name){ super(name); @@ -54,13 +53,8 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa } @Override - public void toggle(boolean to){ - this.activateOnceWithSignal = to; - } - - @Override - public boolean isPulseMode(){ - return this.activateOnceWithSignal; + public boolean isRedstoneToggle(){ + return true; } @Override @@ -115,16 +109,20 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("CurrentTime", this.currentTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("CurrentTime", this.currentTime); + } this.tank.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.currentTime = compound.getInteger("CurrentTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.currentTime = compound.getInteger("CurrentTime"); + } this.tank.readFromNBT(compound); } @@ -132,7 +130,7 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(!this.isRedstonePowered && !this.isPulseMode){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ @@ -155,16 +153,6 @@ public class TileEntityFluidCollector extends TileEntityBase implements IFluidSa return this.tank.getFluidAmount()*i/this.tank.getCapacity(); } - @Override - public FluidStack[] getFluids(){ - return new FluidStack[]{this.tank.getFluid()}; - } - - @Override - public void setFluids(FluidStack[] fluids){ - this.tank.setFluid(fluids[0]); - } - @Override public int fill(EnumFacing from, FluidStack resource, boolean doFill){ IFluidHandler handler = this.getFluidHandler(from); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index 2c413edd4..be082c394 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -20,7 +20,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ +public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements IEnergyReceiver{ public static final int SLOT_INPUT_1 = 0; public static final int SLOT_OUTPUT_1 = 1; @@ -40,18 +40,22 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("FirstSmeltTime", this.firstSmeltTime); - compound.setInteger("SecondSmeltTime", this.secondSmeltTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("FirstSmeltTime", this.firstSmeltTime); + compound.setInteger("SecondSmeltTime", this.secondSmeltTime); + } this.storage.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.firstSmeltTime = compound.getInteger("FirstSmeltTime"); - this.secondSmeltTime = compound.getInteger("SecondSmeltTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.firstSmeltTime = compound.getInteger("FirstSmeltTime"); + this.secondSmeltTime = compound.getInteger("SecondSmeltTime"); + } this.storage.readFromNBT(compound); } @@ -191,14 +195,4 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements public boolean canConnectEnergy(EnumFacing from){ return true; } - - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 93a66acfc..9410bdd33 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -19,7 +19,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyProvider, IEnergySaver, IEnergyDisplay{ +public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyProvider, IEnergyDisplay{ public static final int PRODUCE = 8; public final EnergyStorage storage = new EnergyStorage(30000); @@ -50,14 +50,14 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); } @@ -93,11 +93,6 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro return this.storage.getEnergyStored(); } - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - @Override @SideOnly(Side.CLIENT) public int getMaxEnergy(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index baa7033e4..f459950c7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -29,15 +29,19 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); - this.timeUntilNextFert = compound.getInteger("Time"); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.timeUntilNextFert = compound.getInteger("Time"); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.readSyncableNBT(compound, isForSync); - compound.setInteger("Time", this.timeUntilNextFert); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("Time", this.timeUntilNextFert); + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 2ac70128e..0c7ebacef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -27,7 +27,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; -public class TileEntityGrinder extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ +public class TileEntityGrinder extends TileEntityInventoryBase implements IEnergyReceiver{ public static final int SLOT_INPUT_1 = 0; public static final int SLOT_OUTPUT_1_1 = 1; @@ -74,19 +74,23 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - compound.setInteger("FirstCrushTime", this.firstCrushTime); - compound.setInteger("SecondCrushTime", this.secondCrushTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("FirstCrushTime", this.firstCrushTime); + compound.setInteger("SecondCrushTime", this.secondCrushTime); + } this.storage.writeToNBT(compound); - super.writeSyncableNBT(compound, sync); + super.writeSyncableNBT(compound, type); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - this.firstCrushTime = compound.getInteger("FirstCrushTime"); - this.secondCrushTime = compound.getInteger("SecondCrushTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + this.firstCrushTime = compound.getInteger("FirstCrushTime"); + this.secondCrushTime = compound.getInteger("SecondCrushTime"); + } this.storage.readFromNBT(compound); - super.readSyncableNBT(compound, sync); + super.readSyncableNBT(compound, type); } @Override @@ -263,14 +267,4 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg return slot == SLOT_OUTPUT_1_1 || slot == SLOT_OUTPUT_1_2 || slot == SLOT_OUTPUT_2_1 || slot == SLOT_OUTPUT_2_2; } - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index ce2b3ae11..14200ac28 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -25,7 +25,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; -public class TileEntityHeatCollector extends TileEntityBase implements IEnergyProvider, IEnergySaver, IEnergyDisplay{ +public class TileEntityHeatCollector extends TileEntityBase implements IEnergyProvider, IEnergyDisplay{ public static final int ENERGY_PRODUCE = 40; public static final int BLOCKS_NEEDED = 4; @@ -37,14 +37,14 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.readSyncableNBT(compound, isForSync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); } @@ -104,11 +104,6 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr return this.storage.getEnergyStored(); } - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - @Override @SideOnly(Side.CLIENT) public int getMaxEnergy(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 22b592c75..c9a6ca733 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -354,29 +354,33 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("SideToPut", this.sideToPut); - compound.setInteger("SlotToPut", this.slotToPutStart); - compound.setInteger("SlotToPutEnd", this.slotToPutEnd); - compound.setInteger("SideToPull", this.sideToPull); - compound.setInteger("SlotToPull", this.slotToPullStart); - compound.setInteger("SlotToPullEnd", this.slotToPullEnd); - compound.setBoolean("PullWhitelist", this.isPullWhitelist); - compound.setBoolean("PutWhitelist", this.isPutWhitelist); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("SideToPut", this.sideToPut); + compound.setInteger("SlotToPut", this.slotToPutStart); + compound.setInteger("SlotToPutEnd", this.slotToPutEnd); + compound.setInteger("SideToPull", this.sideToPull); + compound.setInteger("SlotToPull", this.slotToPullStart); + compound.setInteger("SlotToPullEnd", this.slotToPullEnd); + compound.setBoolean("PullWhitelist", this.isPullWhitelist); + compound.setBoolean("PutWhitelist", this.isPutWhitelist); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - this.sideToPut = compound.getInteger("SideToPut"); - this.slotToPutStart = compound.getInteger("SlotToPut"); - this.slotToPutEnd = compound.getInteger("SlotToPutEnd"); - this.sideToPull = compound.getInteger("SideToPull"); - this.slotToPullStart = compound.getInteger("SlotToPull"); - this.slotToPullEnd = compound.getInteger("SlotToPullEnd"); - this.isPullWhitelist = compound.getBoolean("PullWhitelist"); - this.isPutWhitelist = compound.getBoolean("PutWhitelist"); - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + this.sideToPut = compound.getInteger("SideToPut"); + this.slotToPutStart = compound.getInteger("SlotToPut"); + this.slotToPutEnd = compound.getInteger("SlotToPutEnd"); + this.sideToPull = compound.getInteger("SideToPull"); + this.slotToPullStart = compound.getInteger("SlotToPull"); + this.slotToPullEnd = compound.getInteger("SlotToPullEnd"); + this.isPullWhitelist = compound.getBoolean("PullWhitelist"); + this.isPutWhitelist = compound.getBoolean("PutWhitelist"); + } + super.readSyncableNBT(compound, type); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index fc5e1bfff..758f83c92 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -68,9 +68,9 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); - if(!isForSync || this.shouldSyncSlots()){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type == NBTType.SAVE_TILE || (type == NBTType.SYNC && this.shouldSyncSlots())){ saveSlots(this.slots, compound); } } @@ -80,9 +80,9 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.readSyncableNBT(compound, isForSync); - if(!isForSync || this.shouldSyncSlots()){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type == NBTType.SAVE_TILE || (type == NBTType.SYNC && this.shouldSyncSlots())){ loadSlots(this.slots, compound); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java index eb626dfe6..4b9c8fb5c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemRepairer.java @@ -20,7 +20,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityItemRepairer extends TileEntityInventoryBase implements IEnergyReceiver, IEnergySaver{ +public class TileEntityItemRepairer extends TileEntityInventoryBase implements IEnergyReceiver{ public static final int SLOT_INPUT = 0; public static final int SLOT_OUTPUT = 1; @@ -56,16 +56,20 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - compound.setInteger("NextRepairTick", this.nextRepairTick); - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("NextRepairTick", this.nextRepairTick); + } + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - this.nextRepairTick = compound.getInteger("NextRepairTick"); - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + this.nextRepairTick = compound.getInteger("NextRepairTick"); + } + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); } @@ -147,14 +151,4 @@ public class TileEntityItemRepairer extends TileEntityInventoryBase implements I public boolean canConnectEnergy(EnumFacing from){ return true; } - - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index 65eb218e9..0391f274e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -194,9 +194,9 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.writeSyncableNBT(compound, isForSync); - if(!isForSync){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type == NBTType.SAVE_TILE){ TileEntityInventoryBase.saveSlots(this.slots, compound); } compound.setBoolean("LeftWhitelist", this.isLeftWhitelist); @@ -204,9 +204,9 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - super.readSyncableNBT(compound, isForSync); - if(!isForSync){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type == NBTType.SAVE_TILE){ TileEntityInventoryBase.loadSlots(this.slots, compound); } this.isLeftWhitelist = compound.getBoolean("LeftWhitelist"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 3654c5778..8b36fa650 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -23,7 +23,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityLavaFactoryController extends TileEntityBase implements IEnergyReceiver, IEnergySaver, IEnergyDisplay{ +public class TileEntityLavaFactoryController extends TileEntityBase implements IEnergyReceiver, IEnergyDisplay{ public static final int NOT_MULTI = 0; public static final int HAS_LAVA = 1; @@ -38,17 +38,21 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); - compound.setInteger("WorkTime", this.currentWorkTime); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("WorkTime", this.currentWorkTime); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); - this.currentWorkTime = compound.getInteger("WorkTime"); + if(type != NBTType.SAVE_BLOCK){ + this.currentWorkTime = compound.getInteger("WorkTime"); + } } @Override @@ -119,11 +123,6 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I return this.storage.getEnergyStored(); } - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - @Override @SideOnly(Side.CLIENT) public int getMaxEnergy(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 29447fa9a..7ba2f2805 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -26,7 +26,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyProvider, IEnergySaver, IEnergyDisplay{ +public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyProvider, IEnergyDisplay{ public static final int RANGE = 7; public static final int ENERGY_PRODUCED = 300; @@ -39,14 +39,14 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); } @@ -128,11 +128,6 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr return this.storage.getEnergyStored(); } - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - @Override @SideOnly(Side.CLIENT) public int getMaxEnergy(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 097791f9e..5518d04b7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -35,13 +35,13 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.List; -public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyReceiver, IButtonReactor, IEnergySaver, IEnergyDisplay{ +public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyReceiver, IButtonReactor, IEnergyDisplay{ public static final int ENERGY_USE_PER_BLOCK = 1000; public static final int DEFAULT_RANGE = 2; public final EnergyStorage storage = new EnergyStorage(200000); public int layerAt = -1; - public boolean onlyMineOres = true; + public boolean onlyMineOres; private int oldLayerAt; private int oldEnergy; @@ -50,18 +50,24 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); this.storage.writeToNBT(compound); - compound.setInteger("Layer", this.layerAt); - compound.setBoolean("OnlyOres", this.onlyMineOres); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("Layer", this.layerAt); + } + if(type != NBTType.SAVE_BLOCK || this.onlyMineOres){ + compound.setBoolean("OnlyOres", this.onlyMineOres); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.storage.readFromNBT(compound); - this.layerAt = compound.getInteger("Layer"); + if(type != NBTType.SAVE_BLOCK){ + this.layerAt = compound.getInteger("Layer"); + } this.onlyMineOres = compound.getBoolean("OnlyOres"); } @@ -232,11 +238,6 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR return this.storage.getEnergyStored(); } - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - @Override @SideOnly(Side.CLIENT) public int getMaxEnergy(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java index d4621656d..b5f040978 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityOilGenerator.java @@ -22,7 +22,7 @@ import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -public class TileEntityOilGenerator extends TileEntityBase implements IEnergyProvider, IEnergySaver, IFluidSaver, net.minecraftforge.fluids.IFluidHandler{ +public class TileEntityOilGenerator extends TileEntityBase implements IEnergyProvider, net.minecraftforge.fluids.IFluidHandler{ public static final int ENERGY_PRODUCED = 76; private static final int BURN_TIME = 100; @@ -63,19 +63,23 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - compound.setInteger("BurnTime", this.currentBurnTime); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("BurnTime", this.currentBurnTime); + } this.storage.writeToNBT(compound); this.tank.writeToNBT(compound); - super.writeSyncableNBT(compound, sync); + super.writeSyncableNBT(compound, type); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - this.currentBurnTime = compound.getInteger("BurnTime"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + if(type != NBTType.SAVE_BLOCK){ + this.currentBurnTime = compound.getInteger("BurnTime"); + } this.storage.readFromNBT(compound); this.tank.readFromNBT(compound); - super.readSyncableNBT(compound, sync); + super.readSyncableNBT(compound, type); } @Override @@ -134,26 +138,6 @@ public class TileEntityOilGenerator extends TileEntityBase implements IEnergyPro return facing != EnumFacing.DOWN ? this.tank : null; } - @Override - public int getEnergy(){ - return this.storage.getEnergyStored(); - } - - @Override - public void setEnergy(int energy){ - this.storage.setEnergyStored(energy); - } - - @Override - public FluidStack[] getFluids(){ - return new FluidStack[]{this.tank.getFluid()}; - } - - @Override - public void setFluids(FluidStack[] fluids){ - this.tank.setFluid(fluids[0]); - } - @Override public int fill(EnumFacing from, FluidStack resource, boolean doFill){ IFluidHandler handler = this.getFluidHandler(from); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index 439742590..d0f7a930d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -29,14 +29,13 @@ import net.minecraftforge.fml.relauncher.SideOnly; import java.util.ArrayList; -public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements IPhantomTile, IRedstoneToggle{ +public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements IPhantomTile{ public static final int RANGE = 3; public BlockPos boundPosition; public int currentTime; public int range; public boolean isBreaker; - private boolean activateOnceWithSignal; private int oldRange; public TileEntityPhantomPlacer(int slots, String name){ @@ -49,26 +48,30 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("Range", this.range); - if(this.boundPosition != null){ - compound.setInteger("XCoordOfTileStored", this.boundPosition.getX()); - compound.setInteger("YCoordOfTileStored", this.boundPosition.getY()); - compound.setInteger("ZCoordOfTileStored", this.boundPosition.getZ()); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("Range", this.range); + if(this.boundPosition != null){ + compound.setInteger("XCoordOfTileStored", this.boundPosition.getX()); + compound.setInteger("YCoordOfTileStored", this.boundPosition.getY()); + compound.setInteger("ZCoordOfTileStored", this.boundPosition.getZ()); + } } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - int x = compound.getInteger("XCoordOfTileStored"); - int y = compound.getInteger("YCoordOfTileStored"); - int z = compound.getInteger("ZCoordOfTileStored"); - this.range = compound.getInteger("Range"); - if(!(x == 0 && y == 0 && z == 0)){ - this.boundPosition = new BlockPos(x, y, z); - this.markDirty(); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + int x = compound.getInteger("XCoordOfTileStored"); + int y = compound.getInteger("YCoordOfTileStored"); + int z = compound.getInteger("ZCoordOfTileStored"); + this.range = compound.getInteger("Range"); + if(!(x == 0 && y == 0 && z == 0)){ + this.boundPosition = new BlockPos(x, y, z); + this.markDirty(); + } } } @@ -83,7 +86,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } if(this.isBoundThingInRange()){ - if(!this.isRedstonePowered && !this.activateOnceWithSignal){ + if(!this.isRedstonePowered && !this.isPulseMode){ if(this.currentTime > 0){ this.currentTime--; if(this.currentTime <= 0){ @@ -207,13 +210,8 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements } @Override - public void toggle(boolean to){ - this.activateOnceWithSignal = to; - } - - @Override - public boolean isPulseMode(){ - return this.activateOnceWithSignal; + public boolean isRedstoneToggle(){ + return true; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 18718d2f4..55d0991fd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -57,26 +57,30 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setInteger("Range", this.range); - if(this.boundPosition != null){ - compound.setInteger("XCoordOfTileStored", this.boundPosition.getX()); - compound.setInteger("YCoordOfTileStored", this.boundPosition.getY()); - compound.setInteger("ZCoordOfTileStored", this.boundPosition.getZ()); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setInteger("Range", this.range); + if(this.boundPosition != null){ + compound.setInteger("XCoordOfTileStored", this.boundPosition.getX()); + compound.setInteger("YCoordOfTileStored", this.boundPosition.getY()); + compound.setInteger("ZCoordOfTileStored", this.boundPosition.getZ()); + } } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - int x = compound.getInteger("XCoordOfTileStored"); - int y = compound.getInteger("YCoordOfTileStored"); - int z = compound.getInteger("ZCoordOfTileStored"); - this.range = compound.getInteger("Range"); - if(!(x == 0 && y == 0 && z == 0)){ - this.boundPosition = new BlockPos(x, y, z); - this.markDirty(); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + int x = compound.getInteger("XCoordOfTileStored"); + int y = compound.getInteger("YCoordOfTileStored"); + int z = compound.getInteger("ZCoordOfTileStored"); + this.range = compound.getInteger("Range"); + if(!(x == 0 && y == 0 && z == 0)){ + this.boundPosition = new BlockPos(x, y, z); + this.markDirty(); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index e386e9c6e..524cd1af6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -76,17 +76,17 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ this.storage.writeToNBT(compound); - if(this.connectedPlayer != null){ + if(this.connectedPlayer != null && type != NBTType.SAVE_BLOCK){ compound.setUniqueId("Player", this.connectedPlayer); } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ this.storage.readFromNBT(compound); - if(compound.hasKey("PlayerLeast")){ + if(compound.hasKey("PlayerLeast") && type != NBTType.SAVE_BLOCK){ this.connectedPlayer = compound.getUniqueId("Player"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index 34eb9fff8..caedbe252 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -33,15 +33,19 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - compound.setBoolean("Whitelist", this.isWhitelist); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + compound.setBoolean("Whitelist", this.isWhitelist); + } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.isWhitelist = compound.getBoolean("Whitelist"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.isWhitelist = compound.getBoolean("Whitelist"); + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 820b0b8f9..155508cf0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -25,17 +25,19 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); - if(this.name != null){ + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + if(this.name != null && type != NBTType.SAVE_BLOCK){ compound.setString("Name", this.name); } } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); - this.name = compound.getString("Name"); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + if(type != NBTType.SAVE_BLOCK){ + this.name = compound.getString("Name"); + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java index 5cd50e63c..cf5190a36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityXPSolidifier.java @@ -98,14 +98,14 @@ public class TileEntityXPSolidifier extends TileEntityInventoryBase implements I } @Override - public void writeSyncableNBT(NBTTagCompound compound, boolean sync){ - super.writeSyncableNBT(compound, sync); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); compound.setShort("Amount", this.amount); } @Override - public void readSyncableNBT(NBTTagCompound compound, boolean sync){ - super.readSyncableNBT(compound, sync); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); this.amount = compound.getShort("Amount"); } From 1e70dd8e490d09a7acc3c3e6c1639d4a817a8c35 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 2 Jul 2016 17:15:53 +0200 Subject: [PATCH 311/322] Make the miner have the drill's harvest level --- .../java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java | 2 +- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index b96b4f794..b3279dc37 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -56,7 +56,7 @@ import java.util.Set; public class ItemDrill extends ItemEnergy{ private static final int ENERGY_USE = 100; - private static final int HARVEST_LEVEL = 4; + public static final int HARVEST_LEVEL = 4; public ItemDrill(String name){ super(500000, 5000, name); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 5518d04b7..c42390524 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -14,6 +14,7 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; +import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.PosUtil; @@ -106,7 +107,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR Block block = state.getBlock(); int meta = PosUtil.getMetadata(pos, this.worldObj); if(!block.isAir(this.worldObj.getBlockState(pos), this.worldObj, pos)){ - if(block.getHarvestLevel(this.worldObj.getBlockState(pos)) <= 3F && state.getBlockHardness(this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ + if(block.getHarvestLevel(this.worldObj.getBlockState(pos)) <= ItemDrill.HARVEST_LEVEL && state.getBlockHardness(this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ List drops = block.getDrops(this.worldObj, pos, this.worldObj.getBlockState(pos), 0); float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, pos, this.worldObj.getBlockState(pos), 0, 1, false, null); From 75839465c6302148f1d021059a4cd97f22353c8c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 2 Jul 2016 18:01:33 +0200 Subject: [PATCH 312/322] special people stuff --- specialPeopleStuff.properties | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/specialPeopleStuff.properties b/specialPeopleStuff.properties index 8d03c5a99..54ebcf149 100644 --- a/specialPeopleStuff.properties +++ b/specialPeopleStuff.properties @@ -1,12 +1,15 @@ #Because he's me -ellpeck=ActuallyAdditions:itemBooklet@0 +ellpeck=actuallyadditions:itemBooklet@0 #Because he submitted tons of ideas for the mod dqmhose=minecraft:torch@0 #Because he does all of the textures -twoofeight=ActuallyAdditions:blockHeatCollector@0 +twoofeight=actuallyadditions:blockHeatCollector@0 #Because she is awesome and squids are cool -larixine=ActuallyAdditions:blockBlackLotus@0 +larixine=actuallyadditions:blockBlackLotus@0 #Because he helps me with models and stuff -canitzp=ActuallyAdditions:blockCoffeeMachine@0 +canitzp=actuallyadditions:blockCoffeeMachine@0 #Because he's an awesome guy and helps with lots of stuff -xdjackiexd=ActuallyAdditions:itemDrill@14 +xdjackiexd=actuallyadditions:itemDrill@14 + +#Patreon stuff +ftog_thorgal=actuallyadditions:itemCrystal@0 \ No newline at end of file From 1e8274176620f0cf1f0439ec788ae74d1239bbbc Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 2 Jul 2016 18:39:47 +0200 Subject: [PATCH 313/322] Made display stand only display RF when sneaking --- .../ellpeck/actuallyadditions/mod/event/HudEvent.java | 11 +++++++---- .../actuallyadditions/mod/tile/IEnergyDisplay.java | 3 +++ .../mod/tile/TileEntityAtomicReconstructor.java | 5 +++++ .../mod/tile/TileEntityDisplayStand.java | 5 +++++ .../mod/tile/TileEntityFireworkBox.java | 5 +++++ .../mod/tile/TileEntityFurnaceSolar.java | 5 +++++ .../mod/tile/TileEntityHeatCollector.java | 5 +++++ .../mod/tile/TileEntityLavaFactoryController.java | 5 +++++ .../mod/tile/TileEntityLeafGenerator.java | 5 +++++ .../actuallyadditions/mod/tile/TileEntityMiner.java | 5 +++++ .../mod/tile/TileEntityPlayerInterface.java | 5 +++++ 11 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java index e448e7747..699eaabff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java @@ -79,10 +79,13 @@ public class HudEvent{ } if(tileHit instanceof IEnergyDisplay){ - profiler.startSection("EnergyDisplay"); - String strg = ((IEnergyDisplay)tileHit).getEnergy()+"/"+((IEnergyDisplay)tileHit).getMaxEnergy()+" RF"; - font.drawStringWithShadow(TextFormatting.GOLD+strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); - profiler.endSection(); + IEnergyDisplay display = (IEnergyDisplay)tileHit; + if(!display.needsHoldShift() || player.isSneaking()){ + profiler.startSection("EnergyDisplay"); + String strg = display.getEnergy()+"/"+display.getMaxEnergy()+" RF"; + font.drawStringWithShadow(TextFormatting.GOLD+strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); + profiler.endSection(); + } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java index fb6ba9aa9..4c3c22201 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/IEnergyDisplay.java @@ -20,4 +20,7 @@ public interface IEnergyDisplay{ @SideOnly(Side.CLIENT) int getMaxEnergy(); + + @SideOnly(Side.CLIENT) + boolean needsHoldShift(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 7e8a8c353..abbefd460 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -207,6 +207,11 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple return this.storage.getMaxEnergyStored(); } + @Override + public boolean needsHoldShift(){ + return false; + } + @Override public boolean isRedstoneToggle(){ return true; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java index d1769dce5..b183faa55 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDisplayStand.java @@ -113,6 +113,11 @@ public class TileEntityDisplayStand extends TileEntityInventoryBase implements I return this.storage.getMaxEnergyStored(); } + @Override + public boolean needsHoldShift(){ + return true; + } + @Override public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ return from != EnumFacing.UP ? this.storage.receiveEnergy(maxReceive, simulate) : 0; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java index 7d9792b6f..99debbc3d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFireworkBox.java @@ -173,4 +173,9 @@ public class TileEntityFireworkBox extends TileEntityBase implements IEnergyRece public int getMaxEnergy(){ return this.storage.getMaxEnergyStored(); } + + @Override + public boolean needsHoldShift(){ + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 9410bdd33..0ee78698c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -98,4 +98,9 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro public int getMaxEnergy(){ return this.storage.getMaxEnergyStored(); } + + @Override + public boolean needsHoldShift(){ + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 14200ac28..1b38efafa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -109,4 +109,9 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr public int getMaxEnergy(){ return this.storage.getMaxEnergyStored(); } + + @Override + public boolean needsHoldShift(){ + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 8b36fa650..0914c578d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -128,4 +128,9 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I public int getMaxEnergy(){ return this.storage.getMaxEnergyStored(); } + + @Override + public boolean needsHoldShift(){ + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 7ba2f2805..5daa65ced 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -133,4 +133,9 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr public int getMaxEnergy(){ return this.storage.getMaxEnergyStored(); } + + @Override + public boolean needsHoldShift(){ + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index c42390524..10372450c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -244,4 +244,9 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR public int getMaxEnergy(){ return this.storage.getMaxEnergyStored(); } + + @Override + public boolean needsHoldShift(){ + return false; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index 524cd1af6..879ad4f84 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -216,4 +216,9 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement public int getMaxEnergy(){ return this.storage.getMaxEnergyStored(); } + + @Override + public boolean needsHoldShift(){ + return false; + } } From 8aa04b7652d14e2b8f6171559952ee5de41972f5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 2 Jul 2016 20:31:18 +0200 Subject: [PATCH 314/322] Increased the range for sending tile updates because occasionally people that had them in range didn't get updates meaning if they went closer, changes weren't present --- .../de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 16aa41169..093ba8037 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -229,7 +229,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ data.setInteger("X", this.pos.getX()); data.setInteger("Y", this.pos.getY()); data.setInteger("Z", this.pos.getZ()); - PacketHandler.theNetwork.sendToAllAround(new PacketServerToClient(data, PacketHandler.TILE_ENTITY_HANDLER), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 64)); + PacketHandler.theNetwork.sendToAllAround(new PacketServerToClient(data, PacketHandler.TILE_ENTITY_HANDLER), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 128)); } } } From 050f9639408202c6b6e661c26c94fae577963639 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 3 Jul 2016 20:57:00 +0200 Subject: [PATCH 315/322] Cleaned up event classes and stuff --- .../mod/ActuallyAdditions.java | 8 +- .../mod/config/ConfigurationHandler.java | 3 +- .../mod/event/BreakEvent.java | 31 --- .../{TooltipEvent.java => ClientEvents.java} | 83 +++++++- .../mod/event/CommonEvents.java | 146 ++++++++++++++ .../mod/event/EntityLivingEvents.java | 188 ------------------ .../actuallyadditions/mod/event/HudEvent.java | 96 --------- .../mod/event/InitEvents.java | 48 ----- .../mod/event/PlayerConnectionEvents.java | 42 ---- .../mod/event/PlayerObtainEvents.java | 72 ------- .../mod/event/WorldDecorationEvent.java | 102 ---------- .../mod/event/WorldLoadingEvents.java | 34 ---- .../actuallyadditions/mod/gen/OreGen.java | 84 +++++++- .../mod/items/ItemHairyBall.java | 25 +++ .../mod/items/ItemSolidifiedExperience.java | 21 ++ .../mod/items/ItemSpawnerChanger.java | 15 ++ .../mod/items/ItemWaterBowl.java | 43 ++++ .../mod/items/ItemWingsOfTheBats.java | 67 +++++++ .../mod/misc/special/SpecialRenderInit.java | 5 +- .../mod/proxy/ClientProxy.java | 6 +- .../mod/update/UpdateChecker.java | 42 +++- .../UpdateCheckerClientNotificationEvent.java | 47 ----- .../actuallyadditions/mod/util/Util.java | 4 - 23 files changed, 532 insertions(+), 680 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java rename src/main/java/de/ellpeck/actuallyadditions/mod/event/{TooltipEvent.java => ClientEvents.java} (56%) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index aa8ad0a38..856379623 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -18,7 +18,7 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.crafting.CrusherCrafting; import de.ellpeck.actuallyadditions.mod.crafting.InitCrafting; import de.ellpeck.actuallyadditions.mod.crafting.ItemCrafting; -import de.ellpeck.actuallyadditions.mod.event.InitEvents; +import de.ellpeck.actuallyadditions.mod.event.CommonEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.gen.InitVillager; import de.ellpeck.actuallyadditions.mod.gen.OreGen; @@ -88,7 +88,7 @@ public class ActuallyAdditions{ FuelHandler.init(); BannerHelper.init(); SoundHandler.init(); - UpdateChecker.init(); + new UpdateChecker(); proxy.preInit(event); ModUtil.LOGGER.info("PreInitialization Finished."); @@ -101,9 +101,9 @@ public class ActuallyAdditions{ InitOreDict.init(); InitAchievements.init(); GuiHandler.init(); - OreGen.init(); + new OreGen(); TileEntityBase.init(); - InitEvents.init(); + new CommonEvents(); InitCrafting.init(); DungeonLoot.init(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index 08ef08e97..2a7ee7047 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.config; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -25,7 +26,7 @@ public class ConfigurationHandler{ public ConfigurationHandler(File configFile){ ModUtil.LOGGER.info("Grabbing Configurations..."); - Util.registerEvent(this); + MinecraftForge.EVENT_BUS.register(this); config = new Configuration(configFile); config.load(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java deleted file mode 100644 index 2faa47750..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/BreakEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file ("BreakEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -public class BreakEvent{ - - @SubscribeEvent - public void onBlockBreakEvent(BlockEvent.HarvestDropsEvent event){ - IBlockState state = event.getState(); - if(state != null && state.getBlock() == Blocks.MOB_SPAWNER){ - event.getDrops().add(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal())); - } - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java similarity index 56% rename from src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java index 9400c2a24..8f731219f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/TooltipEvent.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java @@ -1,5 +1,5 @@ /* - * This file ("TooltipEvent.java") is part of the Actually Additions mod for Minecraft. + * This file ("ClientEvents.java") is part of the Actually Additions mod for Minecraft. * It is created and owned by Ellpeck and distributed * under the Actually Additions License to be found at * http://ellpeck.de/actaddlicense @@ -10,21 +10,37 @@ package de.ellpeck.actuallyadditions.mod.event; +import de.ellpeck.actuallyadditions.mod.blocks.IHudDisplay; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.tile.IEnergyDisplay; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.Block; +import net.minecraft.block.BlockRedstoneTorch; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.profiler.Profiler; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.oredict.OreDictionary; import java.util.List; -public class TooltipEvent{ +@SideOnly(Side.CLIENT) +public class ClientEvents{ private static final String ADVANCED_INFO_TEXT_PRE = TextFormatting.DARK_GRAY+" "; private static final String ADVANCED_INFO_HEADER_PRE = TextFormatting.GRAY+" -"; @@ -100,4 +116,67 @@ public class TooltipEvent{ } } } + + @SubscribeEvent + public void onGameOverlay(RenderGameOverlayEvent.Post event){ + if(event.getType() == RenderGameOverlayEvent.ElementType.ALL && Minecraft.getMinecraft().currentScreen == null){ + Minecraft minecraft = Minecraft.getMinecraft(); + Profiler profiler = minecraft.mcProfiler; + EntityPlayer player = minecraft.thePlayer; + RayTraceResult posHit = minecraft.objectMouseOver; + FontRenderer font = minecraft.fontRendererObj; + ItemStack stack = player.getHeldItemMainhand(); + + profiler.startSection(ModUtil.MOD_ID+"Hud"); + + if(stack != null){ + if(stack.getItem() instanceof IHudDisplay){ + profiler.startSection("ItemHudDisplay"); + ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); + profiler.endSection(); + } + } + + if(posHit != null && posHit.getBlockPos() != null){ + Block blockHit = PosUtil.getBlock(posHit.getBlockPos(), minecraft.theWorld); + TileEntity tileHit = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); + + if(blockHit instanceof IHudDisplay){ + profiler.startSection("BlockHudDisplay"); + ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); + profiler.endSection(); + } + + if(tileHit instanceof TileEntityBase){ + TileEntityBase base = (TileEntityBase)tileHit; + if(base.isRedstoneToggle()){ + profiler.startSection("RedstoneToggleHudDisplay"); + + String strg = "Redstone Mode: "+TextFormatting.DARK_RED+(base.isPulseMode ? "Pulse" : "Deactivation")+TextFormatting.RESET; + font.drawStringWithShadow(strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); + + if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ + String expl = TextFormatting.GREEN+"Right-Click to toggle!"; + font.drawStringWithShadow(expl, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); + } + + profiler.endSection(); + } + } + + if(tileHit instanceof IEnergyDisplay){ + IEnergyDisplay display = (IEnergyDisplay)tileHit; + if(!display.needsHoldShift() || player.isSneaking()){ + profiler.startSection("EnergyDisplay"); + String strg = display.getEnergy()+"/"+display.getMaxEnergy()+" RF"; + font.drawStringWithShadow(TextFormatting.GOLD+strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); + profiler.endSection(); + } + } + } + + profiler.endSection(); + } + } + } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java new file mode 100644 index 000000000..c5f9a06f9 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -0,0 +1,146 @@ +/* + * This file ("CommonEvents.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.event; + +import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; +import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; +import de.ellpeck.actuallyadditions.mod.data.PlayerData; +import de.ellpeck.actuallyadditions.mod.data.WorldData; +import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.network.PacketHandler; +import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent; + +import java.util.Locale; + +public class CommonEvents{ + + @SubscribeEvent + public void livingDeathEvent(LivingDeathEvent event){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)event.getEntityLiving(); + PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); + + NBTTagList deaths = data.theCompound.getTagList("Deaths", 10); + while(deaths.tagCount() >= 5){ + deaths.removeTag(0); + } + + NBTTagCompound death = new NBTTagCompound(); + death.setDouble("X", player.posX); + death.setDouble("Y", player.posY); + death.setDouble("Z", player.posZ); + deaths.appendTag(death); + + data.theCompound.setTag("Deaths", deaths); + + //player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); + } + } + + @SubscribeEvent + public void onEntityDropEvent(LivingDropsEvent event){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ + //Drop Cobwebs from Spiders + if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.getEntityLiving() instanceof EntitySpider){ + if(Util.RANDOM.nextInt(20) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); + } + } + } + } + + @SubscribeEvent + public void onLogInEvent(EntityJoinWorldEvent event){ + if(!event.getEntity().worldObj.isRemote && event.getEntity() instanceof EntityPlayerMP){ + EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); + PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); + if(!data.theCompound.hasNoTags()){ + PacketHandler.theNetwork.sendTo(new PacketServerToClient(data.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player); + } + } + } + + public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){ + for(TheAchievements ach : TheAchievements.values()){ + if(ach.type == type){ + if(gotten != null && ach.chieve.theItemStack != null && gotten.getItem() == ach.chieve.theItemStack.getItem()){ + if(gotten.getItemDamage() == ach.chieve.theItemStack.getItemDamage()){ + player.addStat(ach.chieve, 1); + } + } + } + } + } + + @SubscribeEvent + public void onCraftedEvent(PlayerEvent.ItemCraftedEvent event){ + checkAchievements(event.crafting, event.player, InitAchievements.Type.CRAFTING); + + if(ConfigBoolValues.GIVE_BOOKLET_ON_FIRST_CRAFT.isEnabled()){ + if(!event.player.worldObj.isRemote && event.crafting != null && event.crafting.getItem() != null && event.crafting.getItem() != InitItems.itemBooklet){ + + String name = event.crafting.getItem().getRegistryName().toString(); + if(name != null && name.toLowerCase(Locale.ROOT).contains(ModUtil.MOD_ID)){ + PlayerData.PlayerSave compound = PlayerData.getDataFromPlayer(event.player); + if(compound != null && !compound.theCompound.getBoolean("BookGottenAlready")){ + compound.theCompound.setBoolean("BookGottenAlready", true); + + EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet)); + entityItem.setPickupDelay(0); + event.player.worldObj.spawnEntityInWorld(entityItem); + } + } + } + } + } + + @SubscribeEvent + public void onSmeltedEvent(PlayerEvent.ItemSmeltedEvent event){ + checkAchievements(event.smelting, event.player, InitAchievements.Type.SMELTING); + } + + @SubscribeEvent + public void onPickupEvent(PlayerEvent.ItemPickupEvent event){ + checkAchievements(event.pickedUp.getEntityItem(), event.player, InitAchievements.Type.PICK_UP); + } + + @SubscribeEvent + public void onLoad(WorldEvent.Load event){ + WorldData.load(event.getWorld()); + } + + @SubscribeEvent + public void onUnload(WorldEvent.Unload event){ + WorldData.unload(event.getWorld()); + } + + @SubscribeEvent + public void onSave(WorldEvent.Save event){ + WorldData.save(event.getWorld()); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java deleted file mode 100644 index 6baae896f..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/EntityLivingEvents.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * This file ("EntityLivingEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.data.PlayerData; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; -import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; -import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.block.BlockLiquid; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.EntityCreature; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.entity.passive.EntityBat; -import net.minecraft.entity.passive.EntityOcelot; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.ActionResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.entity.living.LivingDeathEvent; -import net.minecraftforge.event.entity.living.LivingDropsEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -import java.util.UUID; - -public class EntityLivingEvents{ - - @SubscribeEvent - public void livingUpdateEvent(LivingUpdateEvent event){ - //Ocelots dropping Hair Balls - if(event.getEntityLiving() != null){ - if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote){ - if((event.getEntityLiving() instanceof EntityOcelot && ((EntityOcelot)event.getEntityLiving()).isTamed()) || (event.getEntityLiving() instanceof EntityPlayer && event.getEntityLiving().getUniqueID().equals(/*KittyVanCat*/ UUID.fromString("681d4e20-10ef-40c9-a0a5-ba2f1995ef44")))){ - if(ConfigBoolValues.DO_CAT_DROPS.isEnabled()){ - if(Util.RANDOM.nextInt(5000)+1 == 1){ - EntityItem item = new EntityItem(event.getEntityLiving().worldObj, event.getEntityLiving().posX+0.5, event.getEntityLiving().posY+0.5, event.getEntityLiving().posZ+0.5, new ItemStack(InitItems.itemHairyBall)); - event.getEntityLiving().worldObj.spawnEntityInWorld(item); - } - } - } - } - - //Wings allowing Flight - this.doWingStuff(event.getEntityLiving()); - } - } - - @SubscribeEvent - public void livingDeathEvent(LivingDeathEvent event){ - if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ - EntityPlayer player = (EntityPlayer)event.getEntityLiving(); - PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); - - NBTTagList deaths = data.theCompound.getTagList("Deaths", 10); - while(deaths.tagCount() >= 5){ - deaths.removeTag(0); - } - - NBTTagCompound death = new NBTTagCompound(); - death.setDouble("X", player.posX); - death.setDouble("Y", player.posY); - death.setDouble("Z", player.posZ); - deaths.appendTag(death); - - data.theCompound.setTag("Deaths", deaths); - - //player.addChatComponentMessage(new TextComponentTranslation("info."+ModUtil.MOD_ID+".deathRecorded")); - } - } - - @SubscribeEvent - public void onPlayerInteractEvent(PlayerInteractEvent event){ - if(event.getWorld() != null){ - if(ConfigBoolValues.WATER_BOWL.isEnabled()){ - if(event.getItemStack() != null && event.getItemStack().getItem() == Items.BOWL){ - RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(event.getWorld(), event.getEntityPlayer(), true, false, false); - ActionResult result = ForgeEventFactory.onBucketUse(event.getEntityPlayer(), event.getWorld(), event.getItemStack(), trace); - if(result == null && trace != null && trace.getBlockPos() != null){ - if(event.getEntityPlayer().canPlayerEdit(trace.getBlockPos().offset(trace.sideHit), trace.sideHit, event.getItemStack())){ - IBlockState state = event.getWorld().getBlockState(trace.getBlockPos()); - Material material = state.getMaterial(); - - if(material == Material.WATER && state.getValue(BlockLiquid.LEVEL) == 0){ - event.getEntityPlayer().playSound(SoundEvents.ITEM_BUCKET_FILL, 1.0F, 1.0F); - - if(!event.getWorld().isRemote){ - event.getWorld().setBlockState(trace.getBlockPos(), Blocks.AIR.getDefaultState(), 11); - event.getItemStack().stackSize--; - - ItemStack bowl = new ItemStack(InitItems.itemWaterBowl); - if(!event.getEntityPlayer().inventory.addItemStackToInventory(bowl.copy())){ - EntityItem entityItem = new EntityItem(event.getWorld(), event.getEntityPlayer().posX, event.getEntityPlayer().posY, event.getEntityPlayer().posZ, bowl.copy()); - entityItem.setPickupDelay(0); - event.getWorld().spawnEntityInWorld(entityItem); - } - } - } - } - } - } - } - } - } - - @SubscribeEvent - public void onEntityDropEvent(LivingDropsEvent event){ - if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ - //Drop Solidified XP - if(event.getEntityLiving() instanceof EntityCreature){ - if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ - event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); - } - } - - //Drop Cobwebs from Spiders - if(ConfigBoolValues.DO_SPIDER_DROPS.isEnabled() && event.getEntityLiving() instanceof EntitySpider){ - if(Util.RANDOM.nextInt(20) <= event.getLootingLevel()*2){ - event.getEntityLiving().entityDropItem(new ItemStack(Blocks.WEB, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); - } - } - - //Drop Wings from Bats - if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat){ - if(Util.RANDOM.nextInt(15) <= event.getLootingLevel()*2){ - event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2+event.getLootingLevel())+1, TheMiscItems.BAT_WING.ordinal()), 0); - } - } - } - } - - /** - * Makes players be able to fly if they have Wings Of The Bats equipped - * (Partially excerpted from Botania's Wing System by Vazkii (as I had fiddled around with the system and couldn't make it work) with permission, thanks!) - */ - private void doWingStuff(EntityLivingBase living){ - if(living instanceof EntityPlayer){ - EntityPlayer player = (EntityPlayer)living; - boolean wingsEquipped = ItemWingsOfTheBats.getWingItem(player) != null; - - //If Player isn't (really) winged - if(!ItemWingsOfTheBats.isPlayerWinged(player)){ - if(wingsEquipped){ - //Make the Player actually winged - ItemWingsOfTheBats.addWingsToPlayer(player); - } - } - //If Player is (or should be) winged - else{ - if(wingsEquipped){ - //Allow the Player to fly when he has Wings equipped - player.capabilities.allowFlying = true; - } - else{ - //Make the Player not winged - ItemWingsOfTheBats.removeWingsFromPlayer(player); - //Reset Player's Values - if(!player.capabilities.isCreativeMode){ - player.capabilities.allowFlying = false; - player.capabilities.isFlying = false; - //Enables Fall Damage again (Automatically gets disabled for some reason) - player.capabilities.disableDamage = false; - } - } - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java deleted file mode 100644 index 699eaabff..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/HudEvent.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * This file ("HudEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.blocks.IHudDisplay; -import de.ellpeck.actuallyadditions.mod.tile.IEnergyDisplay; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.block.Block; -import net.minecraft.block.BlockRedstoneTorch; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.profiler.Profiler; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.TextFormatting; -import net.minecraftforge.client.event.RenderGameOverlayEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -public class HudEvent{ - - @SubscribeEvent - public void onGameOverlay(RenderGameOverlayEvent.Post event){ - if(event.getType() == RenderGameOverlayEvent.ElementType.ALL && Minecraft.getMinecraft().currentScreen == null){ - Minecraft minecraft = Minecraft.getMinecraft(); - Profiler profiler = minecraft.mcProfiler; - EntityPlayer player = minecraft.thePlayer; - RayTraceResult posHit = minecraft.objectMouseOver; - FontRenderer font = minecraft.fontRendererObj; - ItemStack stack = player.getHeldItemMainhand(); - - profiler.startSection(ModUtil.MOD_ID+"Hud"); - - if(stack != null){ - if(stack.getItem() instanceof IHudDisplay){ - profiler.startSection("ItemHudDisplay"); - ((IHudDisplay)stack.getItem()).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); - profiler.endSection(); - } - } - - if(posHit != null && posHit.getBlockPos() != null){ - Block blockHit = PosUtil.getBlock(posHit.getBlockPos(), minecraft.theWorld); - TileEntity tileHit = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); - - if(blockHit instanceof IHudDisplay){ - profiler.startSection("BlockHudDisplay"); - ((IHudDisplay)blockHit).displayHud(minecraft, player, stack, posHit, profiler, event.getResolution()); - profiler.endSection(); - } - - if(tileHit instanceof TileEntityBase){ - TileEntityBase base = (TileEntityBase)tileHit; - if(base.isRedstoneToggle()){ - profiler.startSection("RedstoneToggleHudDisplay"); - - String strg = "Redstone Mode: "+TextFormatting.DARK_RED+(base.isPulseMode ? "Pulse" : "Deactivation")+TextFormatting.RESET; - font.drawStringWithShadow(strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+5, StringUtil.DECIMAL_COLOR_WHITE); - - if(stack != null && Block.getBlockFromItem(stack.getItem()) instanceof BlockRedstoneTorch){ - String expl = TextFormatting.GREEN+"Right-Click to toggle!"; - font.drawStringWithShadow(expl, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2+15, StringUtil.DECIMAL_COLOR_WHITE); - } - - profiler.endSection(); - } - } - - if(tileHit instanceof IEnergyDisplay){ - IEnergyDisplay display = (IEnergyDisplay)tileHit; - if(!display.needsHoldShift() || player.isSneaking()){ - profiler.startSection("EnergyDisplay"); - String strg = display.getEnergy()+"/"+display.getMaxEnergy()+" RF"; - font.drawStringWithShadow(TextFormatting.GOLD+strg, event.getResolution().getScaledWidth()/2+5, event.getResolution().getScaledHeight()/2-10, StringUtil.DECIMAL_COLOR_WHITE); - profiler.endSection(); - } - } - } - - profiler.endSection(); - } - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java deleted file mode 100644 index 57f8bb81c..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/InitEvents.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * This file ("InitEvents.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.nei.NEIScreenEvents; -import de.ellpeck.actuallyadditions.mod.update.UpdateCheckerClientNotificationEvent; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.fml.common.Loader; - -public final class InitEvents{ - - public static void init(){ - ModUtil.LOGGER.info("Initializing Events..."); - - Util.registerEvent(new PlayerObtainEvents()); - Util.registerEvent(new EntityLivingEvents()); - Util.registerEvent(new PlayerConnectionEvents()); - Util.registerEvent(new WorldLoadingEvents()); - Util.registerEvent(new BreakEvent()); - MinecraftForge.TERRAIN_GEN_BUS.register(new WorldDecorationEvent()); - - } - - public static void initClient(){ - Util.registerEvent(new TooltipEvent()); - Util.registerEvent(new HudEvent()); - - if(Loader.isModLoaded("NotEnoughItems")){ - Util.registerEvent(new NEIScreenEvents()); - } - - if(ConfigBoolValues.DO_UPDATE_CHECK.isEnabled() && !Util.isDevVersion()){ - Util.registerEvent(new UpdateCheckerClientNotificationEvent()); - } - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java deleted file mode 100644 index 8e1484145..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerConnectionEvents.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file ("LogoutEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.data.PlayerData; -import de.ellpeck.actuallyadditions.mod.items.ItemWingsOfTheBats; -import de.ellpeck.actuallyadditions.mod.network.PacketHandler; -import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.PlayerEvent; - -public class PlayerConnectionEvents{ - - @SubscribeEvent - public void onLogOutEvent(PlayerEvent.PlayerLoggedOutEvent event){ - //Remove Player from Wings' Fly Permission List - ItemWingsOfTheBats.removeWingsFromPlayer(event.player, true); - ItemWingsOfTheBats.removeWingsFromPlayer(event.player, false); - } - - @SubscribeEvent - public void onLogInEvent(EntityJoinWorldEvent event){ - if(!event.getEntity().worldObj.isRemote && event.getEntity() instanceof EntityPlayerMP){ - EntityPlayerMP player = (EntityPlayerMP)event.getEntity(); - PlayerData.PlayerSave data = PlayerData.getDataFromPlayer(player); - if(!data.theCompound.hasNoTags()){ - PacketHandler.theNetwork.sendTo(new PacketServerToClient(data.theCompound, PacketHandler.PLAYER_DATA_TO_CLIENT_HANDLER), player); - } - } - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java deleted file mode 100644 index d0c92ee89..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/PlayerObtainEvents.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * This file ("PlayerObtainEvents.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.achievement.InitAchievements; -import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.data.PlayerData; -import de.ellpeck.actuallyadditions.mod.items.InitItems; -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.PlayerEvent; - -import java.util.Locale; - -public class PlayerObtainEvents{ - - public static void checkAchievements(ItemStack gotten, EntityPlayer player, InitAchievements.Type type){ - for(TheAchievements ach : TheAchievements.values()){ - if(ach.type == type){ - if(gotten != null && ach.chieve.theItemStack != null && gotten.getItem() == ach.chieve.theItemStack.getItem()){ - if(gotten.getItemDamage() == ach.chieve.theItemStack.getItemDamage()){ - player.addStat(ach.chieve, 1); - } - } - } - } - } - - @SubscribeEvent - public void onCraftedEvent(PlayerEvent.ItemCraftedEvent event){ - checkAchievements(event.crafting, event.player, InitAchievements.Type.CRAFTING); - - if(ConfigBoolValues.GIVE_BOOKLET_ON_FIRST_CRAFT.isEnabled()){ - if(!event.player.worldObj.isRemote && event.crafting != null && event.crafting.getItem() != null && event.crafting.getItem() != InitItems.itemBooklet){ - - String name = event.crafting.getItem().getRegistryName().toString(); - if(name != null && name.toLowerCase(Locale.ROOT).contains(ModUtil.MOD_ID)){ - PlayerData.PlayerSave compound = PlayerData.getDataFromPlayer(event.player); - if(compound != null && !compound.theCompound.getBoolean("BookGottenAlready")){ - compound.theCompound.setBoolean("BookGottenAlready", true); - - EntityItem entityItem = new EntityItem(event.player.worldObj, event.player.posX, event.player.posY, event.player.posZ, new ItemStack(InitItems.itemBooklet)); - entityItem.setPickupDelay(0); - event.player.worldObj.spawnEntityInWorld(entityItem); - } - } - } - } - } - - @SubscribeEvent - public void onSmeltedEvent(PlayerEvent.ItemSmeltedEvent event){ - checkAchievements(event.smelting, event.player, InitAchievements.Type.SMELTING); - } - - @SubscribeEvent - public void onPickupEvent(PlayerEvent.ItemPickupEvent event){ - checkAchievements(event.pickedUp.getEntityItem(), event.player, InitAchievements.Type.PICK_UP); - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java deleted file mode 100644 index 92bb9be22..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldDecorationEvent.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This file ("WorldDecorationEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - - -import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; -import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheWildPlants; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntListValues; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; -import de.ellpeck.actuallyadditions.mod.util.WorldUtil; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.biome.BiomeOcean; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; -import net.minecraftforge.fml.common.eventhandler.Event; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -import java.util.ArrayList; - -public class WorldDecorationEvent{ - - @SubscribeEvent - public void onWorldDecoration(DecorateBiomeEvent.Decorate event){ - if((event.getResult() == Event.Result.ALLOW || event.getResult() == Event.Result.DEFAULT)){ - if(Util.arrayContains(ConfigIntListValues.PLANT_DIMENSION_BLACKLIST.getValue(), event.getWorld().provider.getDimension()) < 0){ - this.generateRice(event); - this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.GRASS, event); - this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.GRASS, event); - this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.COFFEE.ordinal(), ConfigIntValues.COFFEE_AMOUNT.getValue(), ConfigBoolValues.DO_COFFEE_GEN.isEnabled(), Material.GRASS, event); - this.genPlantNormally(InitBlocks.blockBlackLotus, 0, ConfigIntValues.BLACK_LOTUS_AMOUNT.getValue(), ConfigBoolValues.DO_LOTUS_GEN.isEnabled(), Material.GRASS, event); - } - - //Generate Treasure Chests - if(ConfigBoolValues.DO_TREASURE_CHEST_GEN.isEnabled()){ - if(event.getRand().nextInt(300) == 0){ - BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); - randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - - if(event.getWorld().getBiomeGenForCoords(randomPos) instanceof BiomeOcean){ - if(randomPos.getY() >= 25 && randomPos.getY() <= 45){ - if(event.getWorld().getBlockState(randomPos).getMaterial() == Material.WATER){ - if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()).isSolid()){ - PosUtil.setBlock(randomPos, event.getWorld(), InitBlocks.blockTreasureChest, event.getRand().nextInt(4), 2); - } - } - } - } - } - } - } - } - - private void generateRice(DecorateBiomeEvent event){ - if(ConfigBoolValues.DO_RICE_GEN.isEnabled()){ - for(int i = 0; i < ConfigIntValues.RICE_AMOUNT.getValue(); i++){ - if(event.getRand().nextInt(50) == 0){ - BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); - randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - if(PosUtil.getMaterial(randomPos, event.getWorld()) == Material.WATER){ - ArrayList blocksAroundBottom = WorldUtil.getMaterialsAround(event.getWorld(), randomPos); - BlockPos posToGenAt = PosUtil.offset(randomPos, 0, 1, 0); - ArrayList blocksAroundTop = WorldUtil.getMaterialsAround(event.getWorld(), posToGenAt); - if(blocksAroundBottom.contains(Material.GRASS) || blocksAroundBottom.contains(Material.GROUND) || blocksAroundBottom.contains(Material.ROCK) || blocksAroundBottom.contains(Material.SAND)){ - if(!blocksAroundTop.contains(Material.WATER) && PosUtil.getMaterial(posToGenAt, event.getWorld()) == Material.AIR){ - PosUtil.setBlock(posToGenAt, event.getWorld(), InitBlocks.blockWildPlant, TheWildPlants.RICE.ordinal(), 2); - } - } - } - } - } - } - } - - private void genPlantNormally(Block plant, int meta, int amount, boolean doIt, Material blockBelow, DecorateBiomeEvent event){ - if(doIt){ - for(int i = 0; i < amount; i++){ - if(event.getRand().nextInt(400) == 0){ - BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); - randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - - if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()) == blockBelow){ - if(plant.canPlaceBlockAt(event.getWorld(), randomPos) && event.getWorld().isAirBlock(randomPos)){ - PosUtil.setBlock(randomPos, event.getWorld(), plant, meta, 2); - } - } - } - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java deleted file mode 100644 index 0e87db050..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/WorldLoadingEvents.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * This file ("WorldLoadingEvents.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.event; - -import de.ellpeck.actuallyadditions.mod.data.WorldData; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; - -public class WorldLoadingEvents{ - - @SubscribeEvent - public void onLoad(WorldEvent.Load event){ - WorldData.load(event.getWorld()); - } - - @SubscribeEvent - public void onUnload(WorldEvent.Unload event){ - WorldData.unload(event.getWorld()); - } - - @SubscribeEvent - public void onSave(WorldEvent.Save event){ - WorldData.save(event.getWorld()); - } - -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index f7aa7b7b6..d0130deb8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -12,24 +12,34 @@ package de.ellpeck.actuallyadditions.mod.gen; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; +import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheWildPlants; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntListValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.block.state.pattern.BlockMatcher; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraft.world.WorldType; +import net.minecraft.world.biome.BiomeOcean; import net.minecraft.world.chunk.IChunkGenerator; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.terraingen.DecorateBiomeEvent; import net.minecraftforge.fml.common.IWorldGenerator; +import net.minecraftforge.fml.common.eventhandler.Event; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; +import java.util.ArrayList; import java.util.Random; public class OreGen implements IWorldGenerator{ @@ -39,9 +49,10 @@ public class OreGen implements IWorldGenerator{ private final WorldGenLushCaves caveGen = new WorldGenLushCaves(); - public static void init(){ + public OreGen(){ ModUtil.LOGGER.info("Registering World Generator..."); - GameRegistry.registerWorldGenerator(new OreGen(), 10); + GameRegistry.registerWorldGenerator(this, 10); + MinecraftForge.EVENT_BUS.register(this); } @Override @@ -79,4 +90,73 @@ public class OreGen implements IWorldGenerator{ ModUtil.LOGGER.fatal("Couldn't generate '"+block.getUnlocalizedName()+"' into the world because the Min Y coordinate is bigger than the Max! This is definitely a Config Error! Check the Files!"); } } + + @SubscribeEvent + public void onWorldDecoration(DecorateBiomeEvent.Decorate event){ + if((event.getResult() == Event.Result.ALLOW || event.getResult() == Event.Result.DEFAULT)){ + if(Util.arrayContains(ConfigIntListValues.PLANT_DIMENSION_BLACKLIST.getValue(), event.getWorld().provider.getDimension()) < 0){ + this.generateRice(event); + this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.GRASS, event); + this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.GRASS, event); + this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.COFFEE.ordinal(), ConfigIntValues.COFFEE_AMOUNT.getValue(), ConfigBoolValues.DO_COFFEE_GEN.isEnabled(), Material.GRASS, event); + this.genPlantNormally(InitBlocks.blockBlackLotus, 0, ConfigIntValues.BLACK_LOTUS_AMOUNT.getValue(), ConfigBoolValues.DO_LOTUS_GEN.isEnabled(), Material.GRASS, event); + } + + //Generate Treasure Chests + if(ConfigBoolValues.DO_TREASURE_CHEST_GEN.isEnabled()){ + if(event.getRand().nextInt(300) == 0){ + BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); + randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); + + if(event.getWorld().getBiomeGenForCoords(randomPos) instanceof BiomeOcean){ + if(randomPos.getY() >= 25 && randomPos.getY() <= 45){ + if(event.getWorld().getBlockState(randomPos).getMaterial() == Material.WATER){ + if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()).isSolid()){ + PosUtil.setBlock(randomPos, event.getWorld(), InitBlocks.blockTreasureChest, event.getRand().nextInt(4), 2); + } + } + } + } + } + } + } + } + + private void generateRice(DecorateBiomeEvent event){ + if(ConfigBoolValues.DO_RICE_GEN.isEnabled()){ + for(int i = 0; i < ConfigIntValues.RICE_AMOUNT.getValue(); i++){ + if(event.getRand().nextInt(50) == 0){ + BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); + randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); + if(PosUtil.getMaterial(randomPos, event.getWorld()) == Material.WATER){ + ArrayList blocksAroundBottom = WorldUtil.getMaterialsAround(event.getWorld(), randomPos); + BlockPos posToGenAt = PosUtil.offset(randomPos, 0, 1, 0); + ArrayList blocksAroundTop = WorldUtil.getMaterialsAround(event.getWorld(), posToGenAt); + if(blocksAroundBottom.contains(Material.GRASS) || blocksAroundBottom.contains(Material.GROUND) || blocksAroundBottom.contains(Material.ROCK) || blocksAroundBottom.contains(Material.SAND)){ + if(!blocksAroundTop.contains(Material.WATER) && PosUtil.getMaterial(posToGenAt, event.getWorld()) == Material.AIR){ + PosUtil.setBlock(posToGenAt, event.getWorld(), InitBlocks.blockWildPlant, TheWildPlants.RICE.ordinal(), 2); + } + } + } + } + } + } + } + + private void genPlantNormally(Block plant, int meta, int amount, boolean doIt, Material blockBelow, DecorateBiomeEvent event){ + if(doIt){ + for(int i = 0; i < amount; i++){ + if(event.getRand().nextInt(400) == 0){ + BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); + randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); + + if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()) == blockBelow){ + if(plant.canPlaceBlockAt(event.getWorld(), randomPos) && event.getWorld().isAirBlock(randomPos)){ + PosUtil.setBlock(randomPos, event.getWorld(), plant, meta, 2); + } + } + } + } + } + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java index bfc6310be..c7598f0dd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemHairyBall.java @@ -11,22 +11,47 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.*; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.util.UUID; public class ItemHairyBall extends ItemBase{ public ItemHairyBall(String name){ super(name); + + MinecraftForge.EVENT_BUS.register(this); } + @SubscribeEvent + public void livingUpdateEvent(LivingEvent.LivingUpdateEvent event){ + //Ocelots dropping Hair Balls + if(event.getEntityLiving() != null){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote){ + if((event.getEntityLiving() instanceof EntityOcelot && ((EntityOcelot)event.getEntityLiving()).isTamed()) || (event.getEntityLiving() instanceof EntityPlayer && event.getEntityLiving().getUniqueID().equals(/*KittyVanCat*/ UUID.fromString("681d4e20-10ef-40c9-a0a5-ba2f1995ef44")))){ + if(ConfigBoolValues.DO_CAT_DROPS.isEnabled()){ + if(Util.RANDOM.nextInt(5000)+1 == 1){ + EntityItem item = new EntityItem(event.getEntityLiving().worldObj, event.getEntityLiving().posX+0.5, event.getEntityLiving().posY+0.5, event.getEntityLiving().posZ+0.5, new ItemStack(InitItems.itemHairyBall)); + event.getEntityLiving().worldObj.spawnEntityInWorld(item); + } + } + } + } + } + } @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java index 7b89a3df3..05afa683f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSolidifiedExperience.java @@ -10,15 +10,23 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.entity.EntityCreature; import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.monster.EntitySpider; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class ItemSolidifiedExperience extends ItemBase{ @@ -26,8 +34,21 @@ public class ItemSolidifiedExperience extends ItemBase{ public ItemSolidifiedExperience(String name){ super(name); + + MinecraftForge.EVENT_BUS.register(this); } + @SubscribeEvent + public void onEntityDropEvent(LivingDropsEvent event){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ + //Drop Solidified XP + if(event.getEntityLiving() instanceof EntityCreature){ + if(Util.RANDOM.nextInt(10) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemSolidifiedExperience, Util.RANDOM.nextInt(2+event.getLootingLevel())+1), 0); + } + } + } + } @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java index e7c124ba0..79f56ebb3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemSpawnerChanger.java @@ -12,12 +12,15 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.MobSpawnerBaseLogic; @@ -29,6 +32,9 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -39,8 +45,17 @@ public class ItemSpawnerChanger extends ItemBase{ public ItemSpawnerChanger(String name){ super(name); this.setMaxStackSize(1); + + MinecraftForge.EVENT_BUS.register(this); } + @SubscribeEvent + public void onBlockBreakEvent(BlockEvent.HarvestDropsEvent event){ + IBlockState state = event.getState(); + if(state != null && state.getBlock() == Blocks.MOB_SPAWNER){ + event.getDrops().add(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.SPAWNER_SHARD.ordinal())); + } + } @Override public EnumActionResult onItemUse(ItemStack aStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java index 731f2f201..204db232e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java @@ -10,11 +10,15 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.block.BlockLiquid; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -24,13 +28,52 @@ import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class ItemWaterBowl extends ItemBase{ public ItemWaterBowl(String name){ super(name); this.setMaxStackSize(1); + + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onPlayerInteractEvent(PlayerInteractEvent event){ + if(event.getWorld() != null){ + if(ConfigBoolValues.WATER_BOWL.isEnabled()){ + if(event.getItemStack() != null && event.getItemStack().getItem() == Items.BOWL){ + RayTraceResult trace = WorldUtil.getNearestBlockWithDefaultReachDistance(event.getWorld(), event.getEntityPlayer(), true, false, false); + ActionResult result = ForgeEventFactory.onBucketUse(event.getEntityPlayer(), event.getWorld(), event.getItemStack(), trace); + if(result == null && trace != null && trace.getBlockPos() != null){ + if(event.getEntityPlayer().canPlayerEdit(trace.getBlockPos().offset(trace.sideHit), trace.sideHit, event.getItemStack())){ + IBlockState state = event.getWorld().getBlockState(trace.getBlockPos()); + Material material = state.getMaterial(); + + if(material == Material.WATER && state.getValue(BlockLiquid.LEVEL) == 0){ + event.getEntityPlayer().playSound(SoundEvents.ITEM_BUCKET_FILL, 1.0F, 1.0F); + + if(!event.getWorld().isRemote){ + event.getWorld().setBlockState(trace.getBlockPos(), Blocks.AIR.getDefaultState(), 11); + event.getItemStack().stackSize--; + + ItemStack bowl = new ItemStack(InitItems.itemWaterBowl); + if(!event.getEntityPlayer().inventory.addItemStackToInventory(bowl.copy())){ + EntityItem entityItem = new EntityItem(event.getWorld(), event.getEntityPlayer().posX, event.getEntityPlayer().posY, event.getEntityPlayer().posZ, bowl.copy()); + entityItem.setPickupDelay(0); + event.getWorld().spawnEntityInWorld(entityItem); + } + } + } + } + } + } + } + } } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index 18a599c7c..ee655ffc3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -10,10 +10,22 @@ package de.ellpeck.actuallyadditions.mod.items; +import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; +import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; +import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.entity.EntityCreature; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.passive.EntityBat; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.PlayerEvent; import java.util.ArrayList; @@ -34,6 +46,61 @@ public class ItemWingsOfTheBats extends ItemBase{ public ItemWingsOfTheBats(String name){ super(name); this.setMaxStackSize(1); + + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onLogOutEvent(PlayerEvent.PlayerLoggedOutEvent event){ + //Remove Player from Wings' Fly Permission List + ItemWingsOfTheBats.removeWingsFromPlayer(event.player, true); + ItemWingsOfTheBats.removeWingsFromPlayer(event.player, false); + } + + @SubscribeEvent + public void onEntityDropEvent(LivingDropsEvent event){ + if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getSource().getEntity() instanceof EntityPlayer){ + //Drop Wings from Bats + if(ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntityLiving() instanceof EntityBat){ + if(Util.RANDOM.nextInt(15) <= event.getLootingLevel()*2){ + event.getEntityLiving().entityDropItem(new ItemStack(InitItems.itemMisc, Util.RANDOM.nextInt(2+event.getLootingLevel())+1, TheMiscItems.BAT_WING.ordinal()), 0); + } + } + } + } + + @SubscribeEvent + public void onPlayerInteractEvent(PlayerInteractEvent event){ + if(event.getEntityLiving() instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)event.getEntityLiving(); + boolean wingsEquipped = ItemWingsOfTheBats.getWingItem(player) != null; + + //If Player isn't (really) winged + if(!ItemWingsOfTheBats.isPlayerWinged(player)){ + if(wingsEquipped){ + //Make the Player actually winged + ItemWingsOfTheBats.addWingsToPlayer(player); + } + } + //If Player is (or should be) winged + else{ + if(wingsEquipped){ + //Allow the Player to fly when he has Wings equipped + player.capabilities.allowFlying = true; + } + else{ + //Make the Player not winged + ItemWingsOfTheBats.removeWingsFromPlayer(player); + //Reset Player's Values + if(!player.capabilities.isCreativeMode){ + player.capabilities.allowFlying = false; + player.capabilities.isFlying = false; + //Enables Fall Damage again (Automatically gets disabled for some reason) + player.capabilities.disableDamage = false; + } + } + } + } } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java index b0f840077..810f44ab9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/special/SpecialRenderInit.java @@ -16,6 +16,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.RenderPlayerEvent; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -27,9 +28,9 @@ public class SpecialRenderInit{ public static final HashMap SPECIAL_LIST = new HashMap(); - public static void init(){ + public SpecialRenderInit(){ new ThreadSpecialFetcher(); - Util.registerEvent(new SpecialRenderInit()); + MinecraftForge.EVENT_BUS.register(this); } public static void parse(Properties properties){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java index aa549d507..0df33228c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/proxy/ClientProxy.java @@ -20,7 +20,7 @@ import de.ellpeck.actuallyadditions.mod.blocks.render.RenderDisplayStand; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderReconstructorLens; import de.ellpeck.actuallyadditions.mod.blocks.render.RenderSmileyCloud; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.event.InitEvents; +import de.ellpeck.actuallyadditions.mod.event.ClientEvents; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; @@ -155,7 +155,7 @@ public class ClientProxy implements IProxy{ public void init(FMLInitializationEvent event){ ModUtil.LOGGER.info("Initializing ClientProxy..."); - InitEvents.initClient(); + new ClientEvents(); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompost.class, new RenderCompost()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens()); @@ -175,7 +175,7 @@ public class ClientProxy implements IProxy{ public void postInit(FMLPostInitializationEvent event){ ModUtil.LOGGER.info("PostInitializing ClientProxy..."); - SpecialRenderInit.init(); + new SpecialRenderInit(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java index 97b4eab24..4e7a8a3b2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateChecker.java @@ -10,11 +10,21 @@ package de.ellpeck.actuallyadditions.mod.update; +import com.sun.deploy.util.UpdateCheck; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; -public final class UpdateChecker{ +public class UpdateChecker{ public static final String DOWNLOAD_LINK = "http://ellpeck.de/actadddownload"; public static final String CHANGELOG_LINK = "http://ellpeck.de/actaddchangelog"; @@ -23,10 +33,38 @@ public final class UpdateChecker{ public static int updateVersionInt; public static String updateVersionString; - public static void init(){ + private static boolean notified = false; + private static int ticksElapsedBeforeInfo; + + public UpdateChecker(){ if(ConfigBoolValues.DO_UPDATE_CHECK.isEnabled() && !Util.isDevVersion()){ ModUtil.LOGGER.info("Initializing Update Checker..."); + new ThreadUpdateChecker(); + MinecraftForge.EVENT_BUS.register(this); + } + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent(receiveCanceled = true) + public void onTick(TickEvent.ClientTickEvent event){ + //Don't notify directly to prevent the Message getting lost in Spam on World Joining + if(!notified && Minecraft.getMinecraft().thePlayer != null){ + ticksElapsedBeforeInfo++; + if(ticksElapsedBeforeInfo >= 800){ + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if(UpdateChecker.checkFailed){ + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.failed"))); + notified = true; + } + else if(UpdateChecker.needsUpdateNotify){ + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.generic"))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString))); + player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.buttons", UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK))); + notified = true; + } + ticksElapsedBeforeInfo = 0; + } } } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java b/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java deleted file mode 100644 index a04e2b562..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/update/UpdateCheckerClientNotificationEvent.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file ("UpdateCheckerClientNotificationEvent.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.update; - -import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.StringUtil; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.text.ITextComponent; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.TickEvent; - -public class UpdateCheckerClientNotificationEvent{ - - private static boolean notified = false; - private static int ticksElapsedBeforeInfo; - - @SubscribeEvent(receiveCanceled = true) - public void onTick(TickEvent.ClientTickEvent event){ - //Don't notify directly to prevent the Message getting lost in Spam on World Joining - if(!notified && Minecraft.getMinecraft().thePlayer != null){ - ticksElapsedBeforeInfo++; - if(ticksElapsedBeforeInfo >= 800){ - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if(UpdateChecker.checkFailed){ - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.failed"))); - notified = true; - } - else if(UpdateChecker.needsUpdateNotify){ - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localize("info."+ModUtil.MOD_ID+".update.generic"))); - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.versionCompare", ModUtil.VERSION, UpdateChecker.updateVersionString))); - player.addChatComponentMessage(ITextComponent.Serializer.jsonToComponent(StringUtil.localizeFormatted("info."+ModUtil.MOD_ID+".update.buttons", UpdateChecker.CHANGELOG_LINK, UpdateChecker.DOWNLOAD_LINK))); - notified = true; - } - ticksElapsedBeforeInfo = 0; - } - } - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index e8cbb43df..0a4d758f5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -35,10 +35,6 @@ public final class Util{ public static final EnumRarity FALLBACK_RARITY = addRarity("fallback", TextFormatting.STRIKETHROUGH, ModUtil.NAME+" Fallback"); - public static void registerEvent(Object o){ - MinecraftForge.EVENT_BUS.register(o); - } - private static EnumRarity addRarity(String name, TextFormatting color, String displayName){ return EnumHelper.addRarity((ModUtil.MOD_ID+"_"+name).toUpperCase(Locale.ROOT), color, displayName); } From 21f23c3670ad477f84fc8ccaa3f29a23095b799b Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 3 Jul 2016 21:06:44 +0200 Subject: [PATCH 316/322] Remove NEI integration and fix an event derp --- .../mod/items/ItemWingsOfTheBats.java | 3 +- .../mod/jei/JEIActuallyAdditionsPlugin.java | 23 +-- .../jei/booklet/BookletRecipeCategory.java | 7 +- .../mod/jei/booklet/BookletRecipeHandler.java | 4 +- .../coffee/CoffeeMachineRecipeCategory.java | 7 +- .../coffee/CoffeeMachineRecipeHandler.java | 4 +- .../ReconstructorRecipeCategory.java | 7 +- .../ReconstructorRecipeHandler.java | 5 +- .../mod/nei/INEIRecipeHandler.java | 18 -- .../mod/nei/NEIActuallyAdditionsConfig.java | 75 ------- .../mod/nei/NEIBookletRecipe.java | 151 -------------- .../mod/nei/NEICoffeeMachineRecipe.java | 155 --------------- .../mod/nei/NEICompostRecipe.java | 111 ----------- .../mod/nei/NEICrusherRecipe.java | 186 ------------------ .../mod/nei/NEIFurnaceDoubleRecipe.java | 128 ------------ .../mod/nei/NEIHairyBallRecipe.java | 132 ------------- .../mod/nei/NEIReconstructorRecipe.java | 172 ---------------- .../mod/nei/NEIScreenEvents.java | 68 ------- .../mod/nei/NEITreasureChestRecipe.java | 134 ------------- 19 files changed, 21 insertions(+), 1369 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/INEIRecipeHandler.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIActuallyAdditionsConfig.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIBookletRecipe.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index ee655ffc3..0fb8f9c4c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -23,6 +23,7 @@ import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.PlayerEvent; @@ -70,7 +71,7 @@ public class ItemWingsOfTheBats extends ItemBase{ } @SubscribeEvent - public void onPlayerInteractEvent(PlayerInteractEvent event){ + public void livingUpdateEvent(LivingEvent.LivingUpdateEvent event){ if(event.getEntityLiving() instanceof EntityPlayer){ EntityPlayer player = (EntityPlayer)event.getEntityLiving(); boolean wingsEquipped = ItemWingsOfTheBats.getWingItem(player) != null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index 472a46e63..ed4176981 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -26,9 +26,6 @@ import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherRecipeHandler; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeCategory; import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeHandler; -import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; -import de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe; -import de.ellpeck.actuallyadditions.mod.nei.NEIReconstructorRecipe; import de.ellpeck.actuallyadditions.mod.util.Util; import mezz.jei.api.*; import mezz.jei.api.recipe.VanillaRecipeCategoryUid; @@ -61,23 +58,11 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.addRecipes(ActuallyAdditionsAPI.CRUSHER_RECIPES); registry.addRecipes(ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES); - registry.addRecipeClickArea(GuiCoffeeMachine.class, 53, 42, 22, 16, NEICoffeeMachineRecipe.NAME); + registry.addRecipeClickArea(GuiCoffeeMachine.class, 53, 42, 22, 16, CoffeeMachineRecipeCategory.NAME); registry.addRecipeClickArea(GuiGrinder.class, 80, 40, 24, 22, CrusherRecipeCategory.NAME); registry.addRecipeClickArea(GuiGrinder.GuiGrinderDouble.class, 51, 40, 74, 22, CrusherRecipeCategory.NAME); registry.addRecipeClickArea(GuiFurnaceDouble.class, 51, 40, 74, 22, VanillaRecipeCategoryUid.SMELTING); - INbtIgnoreList ignoreList = helpers.getNbtIgnoreList(); - ignoreList.ignoreNbtTagNames(InitItems.itemDrill, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemTeleStaff, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemGrowthRing, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemMagnetRing, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemWaterRemovalRing, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemBattery, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemBatteryDouble, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemBatteryTriple, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemBatteryQuadruple, "Energy"); - ignoreList.ignoreNbtTagNames(InitItems.itemBatteryQuintuple, "Energy"); - IItemBlacklist blacklist = helpers.getItemBlacklist(); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockRice)); blacklist.addItemToBlacklist(new ItemStack(InitBlocks.blockCanola)); @@ -94,9 +79,9 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockFurnaceDouble), VanillaRecipeCategoryUid.SMELTING); registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockGrinder), CrusherRecipeCategory.NAME); registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockGrinderDouble), CrusherRecipeCategory.NAME); - registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockCoffeeMachine), NEICoffeeMachineRecipe.NAME); - registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockAtomicReconstructor), NEIReconstructorRecipe.NAME); - registry.addRecipeCategoryCraftingItem(new ItemStack(InitItems.itemBooklet), NEIBookletRecipe.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockCoffeeMachine), CoffeeMachineRecipeCategory.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitBlocks.blockAtomicReconstructor), ReconstructorRecipeCategory.NAME); + registry.addRecipeCategoryCraftingItem(new ItemStack(InitItems.itemBooklet), BookletRecipeCategory.NAME); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java index 5959295e5..8a7c36300 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeCategory.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.jei.booklet; -import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import mezz.jei.api.IGuiHelper; import mezz.jei.api.gui.IDrawable; @@ -23,6 +22,8 @@ import java.util.Arrays; public class BookletRecipeCategory implements IRecipeCategory{ + public static final String NAME = "actuallyadditions.booklet"; + private final IDrawable background; public BookletRecipeCategory(IGuiHelper helper){ @@ -32,13 +33,13 @@ public class BookletRecipeCategory implements IRecipeCategory{ @Override public String getUid(){ - return NEIBookletRecipe.NAME; + return NAME; } @Override public String getTitle(){ - return StringUtil.localize("container.nei."+NEIBookletRecipe.NAME+".name"); + return StringUtil.localize("container.nei."+NAME+".name"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java index 63066054c..eedd70b6a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeHandler.java @@ -11,8 +11,6 @@ package de.ellpeck.actuallyadditions.mod.jei.booklet; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; -import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; -import de.ellpeck.actuallyadditions.mod.nei.NEIBookletRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; @@ -31,7 +29,7 @@ public class BookletRecipeHandler implements IRecipeHandler{ @Override public String getRecipeCategoryUid(){ - return NEIBookletRecipe.NAME; + return BookletRecipeCategory.NAME; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java index 107ca8404..0104db896 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeCategory.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.jei.coffee; -import de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import mezz.jei.api.IGuiHelper; @@ -22,6 +21,8 @@ import net.minecraft.client.Minecraft; public class CoffeeMachineRecipeCategory implements IRecipeCategory{ + public static final String NAME = "actuallyadditions.coffee"; + private final IDrawable background; public CoffeeMachineRecipeCategory(IGuiHelper helper){ @@ -31,13 +32,13 @@ public class CoffeeMachineRecipeCategory implements IRecipeCategory{ @Override public String getUid(){ - return NEICoffeeMachineRecipe.NAME; + return NAME; } @Override public String getTitle(){ - return StringUtil.localize("container.nei."+NEICoffeeMachineRecipe.NAME+".name"); + return StringUtil.localize("container.nei."+NAME+".name"); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java index 39615477e..8f59b37a4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/coffee/CoffeeMachineRecipeHandler.java @@ -10,9 +10,7 @@ package de.ellpeck.actuallyadditions.mod.jei.coffee; -import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; -import de.ellpeck.actuallyadditions.mod.nei.NEICoffeeMachineRecipe; import mezz.jei.api.recipe.IRecipeHandler; import mezz.jei.api.recipe.IRecipeWrapper; @@ -31,7 +29,7 @@ public class CoffeeMachineRecipeHandler implements IRecipeHandler{ @Override @@ -26,7 +23,7 @@ public class ReconstructorRecipeHandler implements IRecipeHandler nonDoubleStacks = new ArrayList(); - for(ItemStack stack : stacks){ - if(!ItemUtil.contains(nonDoubleStacks, stack, true)){ - arecipes.add(new CachedInfoStack(stack, page)); - nonDoubleStacks.add(stack); - } - } - } - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @SuppressWarnings("unchecked") - @Override - public void loadCraftingRecipes(ItemStack result){ - ArrayList allPages = BookletUtils.getPagesForStack(result); - for(BookletPage page : allPages){ - CachedInfoStack theRecipe = new CachedInfoStack(result, page); - arecipes.add(theRecipe); - } - } - - @SuppressWarnings("unchecked") - @Override - public void loadUsageRecipes(ItemStack ingredient){ - ArrayList allPages = BookletUtils.getPagesForStack(ingredient); - for(BookletPage page : allPages){ - CachedInfoStack theRecipe = new CachedInfoStack(ingredient, page); - arecipes.add(theRecipe); - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiFurnaceDouble.png"; - } - - @Override - public String getOverlayIdentifier(){ - return NAME; - } - - @Override - public void drawExtras(int recipe){ - CachedInfoStack stack = (CachedInfoStack)this.arecipes.get(recipe); - if(stack.theStack != null){ - List header = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".booklet.header").replaceAll("", EnumChatFormatting.BLUE+"").replaceAll("", EnumChatFormatting.BLACK+""), 165); - for(int i = 0; i < header.size(); i++){ - GuiDraw.drawString((String)header.get(i), 0, 18+i*(Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT+1), 0, false); - } - - int maxLines = 5; - IBookletChapter chapter = stack.thePage.getChapter(); - String aText = (chapter.getPages()[0] instanceof PagePicture && chapter.getPages().length > 1 ? chapter.getPages()[1] : chapter.getPages()[0]).getText(); - List text = Minecraft.getMinecraft().fontRendererObj.listFormattedStringToWidth(aText != null ? aText : EnumChatFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID+".booklet.noText"), 165); - for(int i = 0; i < Math.min(maxLines, text.size()); i++){ - GuiDraw.drawString(text.get(i)+(i == maxLines-1 && text.size() > maxLines ? EnumChatFormatting.RESET+""+EnumChatFormatting.BLACK+"..." : ""), 0, 18+25+i*(Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT+1), 0, false); - } - GuiDraw.drawString(EnumChatFormatting.ITALIC+chapter.getLocalizedName(), 0, 97, 0, false); - GuiDraw.drawString(EnumChatFormatting.ITALIC+"Page "+stack.thePage.getID(), 0, 107, 0, false); - } - } - - @Override - public Class getGuiClass(){ - return null; - } - - @Override - public void drawBackground(int recipe){ - - } - - @Override - public void drawForeground(int recipe){ - GlStateManager.color(1F, 1F, 1F, 1F); - GlStateManager.disableLighting(); - this.drawExtras(recipe); - } - - @Override - public int recipiesPerPage(){ - return 1; - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+NAME+".name"); - } - - public class CachedInfoStack extends CachedRecipe{ - - public ItemStack theStack; - public BookletPage thePage; - - public CachedInfoStack(ItemStack theStack, BookletPage thePage){ - this.theStack = theStack; - this.thePage = thePage; - } - - @Override - public PositionedStack getResult(){ - if(this.theStack != null){ - ItemStack newStack = this.theStack.copy(); - newStack.stackSize = 1; - return new PositionedStack(newStack, 0, 0); - } - return null; - } - }*/ -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java deleted file mode 100644 index c16894c90..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICoffeeMachineRecipe.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * This file ("NEICoffeeMachineRecipe.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -public final class NEICoffeeMachineRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ - - public static final String NAME = "actuallyadditions.coffee"; - - /*public NEICoffeeMachineRecipe(){ - super(); - RecipeInfo.setGuiOffset(this.getGuiClass(), 35, 3); - } - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockCoffeeMachine)); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(20, 39, 20, 16), NAME)); - transferRects.add(new RecipeTransferRect(new Rectangle(64, 42, 23, 10), NAME)); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results){ - if(outputId.equals(NAME) && getClass() == NEICoffeeMachineRecipe.class){ - List ingredients = ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS; - for(CoffeeIngredient ingredient : ingredients){ - arecipes.add(new CachedCoffee(ingredient)); - } - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result){ - List ingredients = ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS; - for(CoffeeIngredient ingredient : ingredients){ - if(result.getItem() instanceof ItemCoffee){ - arecipes.add(new CachedCoffee(ingredient)); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient){ - - List ingredients = ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS; - for(CoffeeIngredient ingr : ingredients){ - if(NEIServerUtils.areStacksSameTypeCrafting(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()), ingredient) || NEIServerUtils.areStacksSameTypeCrafting(new ItemStack(InitItems.itemCoffeeBean), ingredient) || NEIServerUtils.areStacksSameTypeCrafting(ingr.ingredient.copy(), ingredient)){ - CachedCoffee theRecipe = new CachedCoffee(ingr); - theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.ingredientStack), ingredient); - arecipes.add(theRecipe); - } - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiNEICoffeeMachine.png"; - } - - @Override - public String getOverlayIdentifier(){ - return NAME; - } - - @Override - public void drawExtras(int recipe){ - drawProgressBar(20, 39, 126, 0, 21, 16, 48, 0); - drawProgressBar(63, 42, 125, 16, 24, 12, 48, 2); - - CachedCoffee cache = (CachedCoffee)this.arecipes.get(recipe); - if(cache.extraText != null){ - GuiDraw.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".coffee.special")+":", 2, 4, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); - GuiDraw.drawString(cache.extraText, 2, 16, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); - } - - if(cache.maxAmp > 0){ - GuiDraw.drawString(StringUtil.localize("container.nei."+ModUtil.MOD_ID+".coffee.maxAmount")+": "+cache.maxAmp, 2, 28, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); - } - } - - @Override - public Class getGuiClass(){ - return GuiCoffeeMachine.class; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(0, 0, 0, 0, 126, 88); - } - - @Override - public int recipiesPerPage(){ - return 1; - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+NAME+".name"); - } - - public class CachedCoffee extends CachedRecipe{ - - public PositionedStack cup; - public PositionedStack coffeeBeans; - public PositionedStack result; - public PositionedStack ingredientStack; - public String extraText; - public int maxAmp; - - public CachedCoffee(CoffeeIngredient ingredient){ - this.cup = new PositionedStack(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CUP.ordinal()), 45, 39); - this.coffeeBeans = new PositionedStack(new ItemStack(InitItems.itemCoffeeBean, TileEntityCoffeeMachine.CACHE_USE), 2, 39); - this.ingredientStack = new PositionedStack(ingredient.ingredient.copy(), 90, 21); - this.setupResult(ingredient); - this.extraText = ingredient.getExtraText(); - this.maxAmp = ingredient.maxAmplifier; - } - - public void setupResult(CoffeeIngredient ingredient){ - ItemStack result = new ItemStack(InitItems.itemCoffee); - CoffeeBrewing.addEffectToStack(result, ingredient); - this.result = new PositionedStack(result.copy(), 45, 70); - } - - @Override - public PositionedStack getResult(){ - return result; - } - - @Override - public List getIngredients(){ - ArrayList list = new ArrayList(); - list.add(this.ingredientStack); - list.add(this.cup); - list.add(this.coffeeBeans); - return list; - } - }*/ -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java deleted file mode 100644 index 3e0019800..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICompostRecipe.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file ("NEICompostRecipe.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -public final class NEICompostRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ - - public static final String NAME = "actuallyadditions.compost"; - - /*public NEICompostRecipe(){ - super(); - RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); - } - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockCompost)); - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+NAME+".name"); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(31+32, 18, 22, 16), NAME)); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results){ - if(outputId.equals(NAME) && getClass() == NEICompostRecipe.class){ - arecipes.add(new CachedCompostRecipe(new ItemStack(InitItems.itemMisc, TileEntityCompost.AMOUNT, TheMiscItems.MASHED_FOOD.ordinal()), new ItemStack(InitItems.itemFertilizer, TileEntityCompost.AMOUNT))); - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result){ - if(NEIServerUtils.areStacksSameType(new ItemStack(InitItems.itemFertilizer), result)){ - arecipes.add(new CachedCompostRecipe(new ItemStack(InitItems.itemMisc, TileEntityCompost.AMOUNT, TheMiscItems.MASHED_FOOD.ordinal()), new ItemStack(InitItems.itemFertilizer, TileEntityCompost.AMOUNT))); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient){ - if(NEIServerUtils.areStacksSameTypeCrafting(new ItemStack(InitItems.itemMisc, TileEntityCompost.AMOUNT, TheMiscItems.MASHED_FOOD.ordinal()), ingredient)){ - CachedCompostRecipe theRecipe = new CachedCompostRecipe(new ItemStack(InitItems.itemMisc, TileEntityCompost.AMOUNT, TheMiscItems.MASHED_FOOD.ordinal()), new ItemStack(InitItems.itemFertilizer, TileEntityCompost.AMOUNT)); - theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient); - arecipes.add(theRecipe); - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiNEISimple.png"; - } - - @Override - public String getOverlayIdentifier(){ - return NAME; - } - - @Override - public Class getGuiClass(){ - return null; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(32, 0, 0, 0, 96, 60); - } - - @Override - public int recipiesPerPage(){ - return 2; - } - - public class CachedCompostRecipe extends CachedRecipe{ - - public PositionedStack result; - public PositionedStack input; - public int chance; - - public CachedCompostRecipe(ItemStack input, ItemStack result){ - this.result = new PositionedStack(result, 67+32, 19); - this.input = new PositionedStack(input, 5+32, 19); - } - - @Override - public PositionedStack getResult(){ - return result; - } - - @Override - public PositionedStack getIngredient(){ - return input; - } - }*/ -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java deleted file mode 100644 index a1c6cfb78..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEICrusherRecipe.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * This file ("NEICrusherRecipe.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -public class NEICrusherRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ - - /*public NEICrusherRecipe(){ - RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); - } - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockGrinder)); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(80, 40, 24, 22), this.getBaseName())); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results){ - if(outputId.equals(this.getBaseName()) && (getClass() == NEICrusherRecipe.class || getClass() == Double.class)){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ - arecipes.add(new CachedCrush(recipe.getRecipeInputs(), recipe.getRecipeOutputOnes(), recipe.getRecipeOutputTwos(), recipe.outputTwoChance, this)); - } - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ - if(ItemUtil.contains(recipe.getRecipeOutputOnes(), result, true) || ItemUtil.contains(recipe.getRecipeOutputTwos(), result, true)){ - arecipes.add(new CachedCrush(recipe.getRecipeInputs(), recipe.getRecipeOutputOnes(), recipe.getRecipeOutputTwos(), recipe.outputTwoChance, this)); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient){ - for(CrusherRecipe recipe : ActuallyAdditionsAPI.CRUSHER_RECIPES){ - if(ItemUtil.contains(recipe.getRecipeInputs(), ingredient, true)){ - CachedCrush theRecipe = new CachedCrush(recipe.getRecipeInputs(), recipe.getRecipeOutputOnes(), recipe.getRecipeOutputTwos(), recipe.outputTwoChance, this); - theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.ingredient), ingredient); - arecipes.add(theRecipe); - } - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiGrinder.png"; - } - - @Override - public String getOverlayIdentifier(){ - return this.getBaseName(); - } - - @Override - public void drawExtras(int recipe){ - drawProgressBar(80, 40, 176, 0, 24, 23, 48, 1); - this.drawChanceString(118, 73, recipe); - } - - @Override - public Class getGuiClass(){ - return GuiGrinder.class; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(60, 13, 60, 13, 56, 79); - } - - @Override - public int recipiesPerPage(){ - return 1; - } - - protected void drawChanceString(int x, int y, int recipe){ - CachedCrush crush = (CachedCrush)this.arecipes.get(recipe); - if(crush.resultTwo != null){ - int secondChance = crush.secondChance; - String secondString = secondChance+"%"; - GuiDraw.drawString(secondString, x, y, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); - } - } - - protected String getBaseName(){ - return "actuallyadditions."+(this instanceof Double ? "crushingDouble" : "crushing"); - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+this.getBaseName()+".name"); - } - - public static class Double extends NEICrusherRecipe{ - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockGrinderDouble)); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(51, 40, 24, 22), this.getBaseName())); - transferRects.add(new RecipeTransferRect(new Rectangle(101, 40, 24, 22), this.getBaseName())); - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiGrinderDouble.png"; - } - - @Override - public void drawExtras(int recipe){ - drawProgressBar(51, 40, 176, 0, 24, 23, 48, 1); - this.drawChanceString(66, 93, recipe); - } - - @Override - public Class getGuiClass(){ - return GuiGrinder.GuiGrinderDouble.class; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(33, 20, 33, 20, 110, 70); - } - } - - public class CachedCrush extends CachedRecipe{ - - public PositionedStack ingredient; - public PositionedStack resultOne; - public PositionedStack resultTwo; - public int secondChance; - - public CachedCrush(List in, List outOne, List outTwo, int secondChance, NEICrusherRecipe handler){ - boolean isDouble = handler instanceof Double; - this.ingredient = new PositionedStack(in, isDouble ? 51 : 80, 21); - this.resultOne = new PositionedStack(outOne, isDouble ? 38 : 66, 69); - if(outTwo != null && !outTwo.isEmpty()){ - this.resultTwo = new PositionedStack(outTwo, isDouble ? 63 : 94, 69); - } - this.secondChance = secondChance; - } - - @Override - public PositionedStack getResult(){ - return null; - } - - @Override - public List getIngredients(){ - return this.getCycledIngredients(cycleticks/48, Collections.singletonList(this.ingredient)); - } - - @Override - public List getOtherStacks(){ - ArrayList list = new ArrayList(); - list.addAll(this.getCycledIngredients(cycleticks/48, Collections.singletonList(this.resultOne))); - if(this.resultTwo != null){ - list.addAll(this.getCycledIngredients(cycleticks/48, Collections.singletonList(this.resultTwo))); - } - return list; - } - }*/ -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java deleted file mode 100644 index edb1ad4c5..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIFurnaceDoubleRecipe.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * This file ("NEIFurnaceDoubleRecipe.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -public final class NEIFurnaceDoubleRecipe /*extends TemplateRecipeHandler implements INEIRecipeHandler*/{ - - public static final String NAME = "actuallyadditions.furnaceDouble"; - - /*public NEIFurnaceDoubleRecipe(){ - RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); - } - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockFurnaceDouble)); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(51, 40, 24, 22), NAME)); - transferRects.add(new RecipeTransferRect(new Rectangle(101, 40, 24, 22), NAME)); - } - - @SuppressWarnings("unchecked") - @Override - public void loadCraftingRecipes(String outputId, Object... results){ - if(outputId.equals(NAME) && getClass() == NEIFurnaceDoubleRecipe.class){ - Map recipes = FurnaceRecipes.INSTANCE().getSmeltingList(); - for(Map.Entry recipe : recipes.entrySet()){ - arecipes.add(new CachedFurn(recipe.getKey(), recipe.getValue())); - } - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @SuppressWarnings("unchecked") - @Override - public void loadCraftingRecipes(ItemStack result){ - Map recipes = FurnaceRecipes.INSTANCE().getSmeltingList(); - for(Map.Entry recipe : recipes.entrySet()){ - if(NEIServerUtils.areStacksSameType(recipe.getValue(), result)){ - arecipes.add(new CachedFurn(recipe.getKey(), recipe.getValue())); - } - } - } - - @SuppressWarnings("unchecked") - @Override - public void loadUsageRecipes(ItemStack ingredient){ - Map recipes = FurnaceRecipes.INSTANCE().getSmeltingList(); - for(Map.Entry recipe : recipes.entrySet()){ - if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getKey(), ingredient)){ - CachedFurn theRecipe = new CachedFurn(recipe.getKey(), recipe.getValue()); - theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.ingredient), ingredient); - arecipes.add(theRecipe); - } - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiFurnaceDouble.png"; - } - - @Override - public String getOverlayIdentifier(){ - return NAME; - } - - @Override - public void drawExtras(int recipe){ - drawProgressBar(51, 40, 176, 0, 24, 23, 48, 1); - } - - @Override - public Class getGuiClass(){ - return GuiFurnaceDouble.class; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(46, 20, 46, 20, 84, 70); - } - - @Override - public int recipiesPerPage(){ - return 1; - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+NAME+".name"); - } - - public class CachedFurn extends CachedRecipe{ - - public PositionedStack ingredient; - public PositionedStack resultOne; - - public CachedFurn(ItemStack in, ItemStack resultOne){ - in.stackSize = 1; - this.ingredient = new PositionedStack(in, 51, 21); - this.resultOne = new PositionedStack(resultOne, 50, 69); - } - - @Override - public PositionedStack getResult(){ - return resultOne; - } - - @Override - public List getIngredients(){ - return getCycledIngredients(cycleticks/48, Collections.singletonList(ingredient)); - } - }*/ -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java deleted file mode 100644 index 3f05da9a7..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIHairyBallRecipe.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * This file ("NEIHairyBallRecipe.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -public final class NEIHairyBallRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ - - public static final String NAME = "actuallyadditions.ballOfHair"; - - /*public NEIHairyBallRecipe(){ - super(); - RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); - } - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitItems.itemHairyBall)); - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+NAME+".name"); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(31+32, 18, 22, 16), NAME)); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results){ - if(outputId.equals(NAME) && getClass() == NEIHairyBallRecipe.class){ - List recipes = ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS; - for(BallOfFurReturn recipe : recipes){ - arecipes.add(new CachedBallRecipe(new ItemStack(InitItems.itemHairyBall), recipe.returnItem, recipe.itemWeight)); - } - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result){ - List recipes = ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS; - for(BallOfFurReturn recipe : recipes){ - if(NEIServerUtils.areStacksSameType(recipe.returnItem, result)){ - arecipes.add(new CachedBallRecipe(new ItemStack(InitItems.itemHairyBall), recipe.returnItem, recipe.itemWeight)); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient){ - List recipes = ActuallyAdditionsAPI.BALL_OF_FUR_RETURN_ITEMS; - for(BallOfFurReturn recipe : recipes){ - ItemStack stack = new ItemStack(InitItems.itemHairyBall); - if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)){ - CachedBallRecipe theRecipe = new CachedBallRecipe(stack, recipe.returnItem, recipe.itemWeight); - theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient); - arecipes.add(theRecipe); - } - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiNEISimple.png"; - } - - @Override - public String getOverlayIdentifier(){ - return NAME; - } - - @Override - public void drawExtras(int rec){ - CachedBallRecipe recipe = (CachedBallRecipe)this.arecipes.get(rec); - if(recipe.result != null){ - int secondChance = recipe.chance; - String secondString = secondChance+"%"; - GuiDraw.drawString(secondString, 65+32, 45, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); - } - } - - @Override - public Class getGuiClass(){ - return null; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(32, 0, 0, 0, 96, 60); - } - - @Override - public int recipiesPerPage(){ - return 2; - } - - public class CachedBallRecipe extends CachedRecipe{ - - public PositionedStack result; - public PositionedStack input; - public int chance; - - public CachedBallRecipe(ItemStack input, ItemStack result, int chance){ - this.result = new PositionedStack(result, 67+32, 19); - this.chance = chance; - this.input = new PositionedStack(input, 5+32, 19); - } - - @Override - public PositionedStack getResult(){ - return result; - } - - @Override - public PositionedStack getIngredient(){ - return input; - } - }*/ -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java deleted file mode 100644 index ce3fe9e1f..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIReconstructorRecipe.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * This file ("NEIReconstructorRecipe.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -public final class NEIReconstructorRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ - - public static final String NAME = "actuallyadditions.reconstructor"; - - /*public NEIReconstructorRecipe(){ - super(); - RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); - } - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockAtomicReconstructor)); - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+NAME+".name"); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(31+32, 18, 22, 16), NAME)); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results){ - if(outputId.equals(NAME) && getClass() == NEIReconstructorRecipe.class){ - List recipes = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; - //Default Recipes - for(LensNoneRecipe recipe : recipes){ - arecipes.add(new CachedReconstructorRecipe(recipe, false)); - } - //Color Recipes - for(Object o : LensColor.CONVERTABLE_BLOCKS){ - ItemStack stack; - if(o instanceof Block){ - stack = new ItemStack((Block)o); - } - else{ - stack = new ItemStack((Item)o); - } - for(int i = 0; i < 16; i++){ - ItemStack stackCopy = stack.copy(); - stackCopy.setItemDamage(i >= 15 ? 0 : i+1); - stack.setItemDamage(i); - arecipes.add(new CachedReconstructorRecipe(new LensNoneRecipe(stack, stackCopy, LensColor.ENERGY_USE), true)); - } - } - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result){ - List recipes = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; - //Default Recipes - for(LensNoneRecipe recipe : recipes){ - if(ItemUtil.contains(recipe.getOutputs(), result, true)){ - arecipes.add(new CachedReconstructorRecipe(recipe, false)); - } - } - //Color Recipes - if(result.getItem() != null && (Util.arrayContains(LensColor.CONVERTABLE_BLOCKS, result.getItem()) >= 0 || Util.arrayContains(LensColor.CONVERTABLE_BLOCKS, Block.getBlockFromItem(result.getItem())) >= 0)){ - int meta = result.getItemDamage(); - ItemStack input = result.copy(); - input.setItemDamage(meta <= 0 ? 15 : meta-1); - arecipes.add(new CachedReconstructorRecipe(new LensNoneRecipe(input, result, LensColor.ENERGY_USE), true)); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient){ - List recipes = ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES; - //Default Recipes - for(LensNoneRecipe recipe : recipes){ - if(ItemUtil.contains(recipe.getInputs(), ingredient, true)){ - CachedReconstructorRecipe theRecipe = new CachedReconstructorRecipe(recipe, false); - theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient); - arecipes.add(theRecipe); - } - } - //Color Recipes - if(ingredient.getItem() != null && (Util.arrayContains(LensColor.CONVERTABLE_BLOCKS, ingredient.getItem()) >= 0 || Util.arrayContains(LensColor.CONVERTABLE_BLOCKS, Block.getBlockFromItem(ingredient.getItem())) >= 0)){ - int meta = ingredient.getItemDamage(); - ItemStack output = ingredient.copy(); - output.setItemDamage(meta >= 15 ? 0 : meta+1); - arecipes.add(new CachedReconstructorRecipe(new LensNoneRecipe(ingredient, output, LensColor.ENERGY_USE), true)); - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiNEIAtomicReconstructor.png"; - } - - @Override - public String getOverlayIdentifier(){ - return NAME; - } - - @Override - public Class getGuiClass(){ - return null; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(32, 0, 0, 0, 96, 60); - } - - @Override - public void drawForeground(int recipe){ - if(Minecraft.getMinecraft().currentScreen != null){ - AssetUtil.renderStackToGui(new ItemStack(InitBlocks.blockAtomicReconstructor), 32+34, 19, 1.0F); - } - if(((CachedReconstructorRecipe)this.arecipes.get(recipe)).showColorLens){ - String text = InitItems.itemColorLens.getItemStackDisplayName(new ItemStack(InitItems.itemColorLens)); - GuiDraw.drawString(text, 0, 44, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); - } - } - - @Override - public int recipiesPerPage(){ - return 2; - } - - public class CachedReconstructorRecipe extends CachedRecipe{ - - public PositionedStack result; - public PositionedStack input; - public boolean showColorLens; - - public CachedReconstructorRecipe(LensNoneRecipe recipe, boolean showColorLens){ - this.result = new PositionedStack(recipe.getOutputs(), 67+32, 19); - this.input = new PositionedStack(recipe.getInputs(), 5+32, 19); - this.showColorLens = showColorLens; - } - - @Override - public PositionedStack getResult(){ - return null; - } - - @Override - public List getIngredients(){ - return this.getCycledIngredients(cycleticks/48, Collections.singletonList(this.input)); - } - - @Override - public java.util.List getOtherStacks(){ - ArrayList list = new ArrayList(); - list.addAll(this.getCycledIngredients(cycleticks/48, Collections.singletonList(this.result))); - return list; - } - }*/ -} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java deleted file mode 100644 index 486dfa71c..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEIScreenEvents.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This file ("NEIScreenEvents.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -import de.ellpeck.actuallyadditions.mod.booklet.button.TexturedButton; - -public class NEIScreenEvents{ - - private static final int NEI_BUTTON_ID = 123782; - private TexturedButton neiButton; - - /*@SuppressWarnings("unchecked") - @SubscribeEvent - public void onInitGuiForNEI(GuiScreenEvent.InitGuiEvent event){ - if(event.gui instanceof GuiRecipe){ - int xSize = 176; - int ySize = 166; - int guiLeft = (event.gui.width-xSize)/2; - int guiTop = (event.gui.height-ySize)/2; - - this.neiButton = new TexturedButton(NEI_BUTTON_ID, guiLeft+xSize-24, guiTop+127, 146, 154, 20, 20){ - @Override - public void drawButton(Minecraft minecraft, int x, int y){ - super.drawButton(minecraft, x, y); - if(this.visible && this.hovered){ - String text = StringUtil.localize("booklet."+ModUtil.MOD_ID+".clickToSeeRecipe"); - Minecraft.getMinecraft().fontRendererObj.drawString(text, this.xPosition-Minecraft.getMinecraft().fontRendererObj.getStringWidth(text)-1, this.yPosition+this.height/2-Minecraft.getMinecraft().fontRendererObj.FONT_HEIGHT/2, StringUtil.DECIMAL_COLOR_WHITE, true); - } - } - }; - event.buttonList.add(this.neiButton); - - GuiRecipe theGui = (GuiRecipe)event.gui; - - IRecipeHandler handler = theGui.getCurrentRecipeHandlers().get(theGui.recipetype); - this.neiButton.visible = handler instanceof INEIRecipeHandler && ((INEIRecipeHandler)handler).getPageForInfo(theGui.page) != null; - } - } - - @SubscribeEvent - public void guiPostAction(GuiScreenEvent.ActionPerformedEvent.Post event){ - if(this.neiButton != null && event.gui instanceof GuiRecipe){ - GuiRecipe theGui = (GuiRecipe)event.gui; - - IRecipeHandler handler = theGui.getCurrentRecipeHandlers().get(theGui.recipetype); - boolean isPage = handler instanceof INEIRecipeHandler && ((INEIRecipeHandler)handler).getPageForInfo(theGui.page) != null; - this.neiButton.visible = isPage; - - if(isPage && event.button.id == NEI_BUTTON_ID){ - BookletPage page = ((INEIRecipeHandler)handler).getPageForInfo(theGui.page); - if(page != null){ - GuiBooklet book = new GuiBooklet(Minecraft.getMinecraft().currentScreen, false, true); - Minecraft.getMinecraft().displayGuiScreen(book); - BookletUtils.openIndexEntry(book, page.getChapter().getEntry(), ActuallyAdditionsAPI.BOOKLET_ENTRIES.indexOf(page.getChapter().getEntry())/GuiBooklet.CHAPTER_BUTTONS_AMOUNT+1, true); - BookletUtils.openChapter(book, page.getChapter(), page); - } - } - } - }*/ -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java deleted file mode 100644 index 586e8bd0c..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/nei/NEITreasureChestRecipe.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * This file ("NEITreasureChestRecipe.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.nei; - -public final class NEITreasureChestRecipe/* extends TemplateRecipeHandler implements INEIRecipeHandler*/{ - - public static final String NAME = "actuallyadditions.treasureChest"; - - /*public NEITreasureChestRecipe(){ - super(); - RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0); - } - - @Override - public BookletPage getPageForInfo(int page){ - return BookletUtils.getFirstPageForStack(new ItemStack(InitBlocks.blockTreasureChest)); - } - - @Override - public String getRecipeName(){ - return StringUtil.localize("container.nei."+NAME+".name"); - } - - @Override - public void loadTransferRects(){ - transferRects.add(new RecipeTransferRect(new Rectangle(31+32, 18, 22, 16), NAME)); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results){ - if(outputId.equals(NAME) && getClass() == NEITreasureChestRecipe.class){ - List recipes = ActuallyAdditionsAPI.TREASURE_CHEST_LOOT; - for(TreasureChestLoot recipe : recipes){ - arecipes.add(new CachedTreasure(new ItemStack(InitBlocks.blockTreasureChest), recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount)); - } - } - else{ - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result){ - List recipes = ActuallyAdditionsAPI.TREASURE_CHEST_LOOT; - for(TreasureChestLoot recipe : recipes){ - if(NEIServerUtils.areStacksSameType(recipe.returnItem, result)){ - arecipes.add(new CachedTreasure(new ItemStack(InitBlocks.blockTreasureChest), recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount)); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient){ - List recipes = ActuallyAdditionsAPI.TREASURE_CHEST_LOOT; - for(TreasureChestLoot recipe : recipes){ - ItemStack stack = new ItemStack(InitBlocks.blockTreasureChest); - if(NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)){ - CachedTreasure theRecipe = new CachedTreasure(stack, recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount); - theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient); - arecipes.add(theRecipe); - } - } - } - - @Override - public String getGuiTexture(){ - return ModUtil.MOD_ID+":textures/gui/guiNEISimple.png"; - } - - @Override - public String getOverlayIdentifier(){ - return NAME; - } - - @Override - public void drawExtras(int rec){ - CachedTreasure recipe = (CachedTreasure)this.arecipes.get(rec); - if(recipe.result != null){ - GuiDraw.drawString(recipe.minAmount+"-"+recipe.maxAmount+" "+StringUtil.localize("container.nei."+ModUtil.MOD_ID+".treasureChest.info")+" "+recipe.chance+"%", 55, 45, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false); - } - } - - @Override - public Class getGuiClass(){ - return null; - } - - @Override - public void drawBackground(int recipeIndex){ - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(32, 0, 0, 0, 96, 60); - } - - @Override - public int recipiesPerPage(){ - return 2; - } - - public class CachedTreasure extends CachedRecipe{ - - public PositionedStack result; - public PositionedStack input; - public int chance; - public int minAmount; - public int maxAmount; - - public CachedTreasure(ItemStack input, ItemStack result, int chance, int minAmount, int maxAmount){ - this.result = new PositionedStack(result, 67+32, 19); - this.chance = chance; - this.input = new PositionedStack(input, 5+32, 19); - this.minAmount = minAmount; - this.maxAmount = maxAmount; - } - - @Override - public PositionedStack getResult(){ - return result; - } - - @Override - public PositionedStack getIngredient(){ - return input; - } - }*/ -} \ No newline at end of file From 6176404cf1bd2c2338098dc05a6bbf3abec70877 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 3 Jul 2016 21:11:46 +0200 Subject: [PATCH 317/322] terrain gen bus --- src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index d0130deb8..4a84c7670 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -52,7 +52,7 @@ public class OreGen implements IWorldGenerator{ public OreGen(){ ModUtil.LOGGER.info("Registering World Generator..."); GameRegistry.registerWorldGenerator(this, 10); - MinecraftForge.EVENT_BUS.register(this); + MinecraftForge.TERRAIN_GEN_BUS.register(this); } @Override From a5e10de4b3229fb5b05640eea01fe45b2b2c2a11 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 3 Jul 2016 21:57:33 +0200 Subject: [PATCH 318/322] Changed the way tile entity registering and name rendering is handled --- .../mod/blocks/InitBlocks.java | 2 + .../mod/creative/CreativeTab.java | 4 +- .../mod/inventory/gui/GuiBreaker.java | 2 +- .../mod/inventory/gui/GuiCanolaPress.java | 2 +- .../mod/inventory/gui/GuiCoalGenerator.java | 2 +- .../mod/inventory/gui/GuiCoffeeMachine.java | 2 +- .../inventory/gui/GuiDirectionalBreaker.java | 2 +- .../mod/inventory/gui/GuiDropper.java | 2 +- .../mod/inventory/gui/GuiEnergizer.java | 2 +- .../mod/inventory/gui/GuiEnervator.java | 2 +- .../mod/inventory/gui/GuiFeeder.java | 2 +- .../inventory/gui/GuiFermentingBarrel.java | 2 +- .../mod/inventory/gui/GuiFluidCollector.java | 2 +- .../mod/inventory/gui/GuiFurnaceDouble.java | 2 +- .../mod/inventory/gui/GuiGiantChest.java | 2 +- .../mod/inventory/gui/GuiGrinder.java | 2 +- .../mod/inventory/gui/GuiInputter.java | 2 +- .../gui/GuiLaserRelayItemWhitelist.java | 2 +- .../mod/inventory/gui/GuiMiner.java | 2 +- .../mod/inventory/gui/GuiOilGenerator.java | 2 +- .../mod/inventory/gui/GuiPhantomPlacer.java | 2 +- .../mod/inventory/gui/GuiRangedCollector.java | 2 +- .../mod/inventory/gui/GuiRepairer.java | 2 +- .../mod/inventory/gui/GuiXPSolidifier.java | 2 +- .../mod/tile/TileEntityBase.java | 126 ++++++++++-------- .../mod/tile/TileEntityGiantChest.java | 6 +- .../mod/tile/TileEntityGiantChestLarge.java | 2 +- .../mod/tile/TileEntityGiantChestMedium.java | 2 +- .../mod/tile/TileEntityInventoryBase.java | 7 - .../actuallyadditions/mod/util/AssetUtil.java | 10 +- .../assets/actuallyadditions/lang/en_US.lang | 4 +- 31 files changed, 114 insertions(+), 93 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java index cf839fe1d..f8661ff8a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/InitBlocks.java @@ -119,10 +119,12 @@ public final class InitBlocks{ public static Block blockBookletStand; public static Block blockDisplayStand; + public static Block blockShockSuppressor; public static void init(){ ModUtil.LOGGER.info("Initializing Blocks..."); + blockShockSuppressor = new BlockShockSuppressor("blockShockSuppressor"); blockDisplayStand = new BlockDisplayStand("blockDisplayStand"); blockPlayerInterface = new BlockPlayerInterface("blockPlayerInterface"); blockBookletStand = new BlockBookletStand("blockBookletStand"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 7af74e59b..accdf5025 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -35,13 +35,11 @@ public class CreativeTab extends CreativeTabs{ super(ModUtil.MOD_ID); } - @Override public ItemStack getIconItemStack(){ return new ItemStack(this.getTabIconItem()); } - @Override public Item getTabIconItem(){ return InitItems.itemBooklet; @@ -75,6 +73,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockXPSolidifier); this.add(InitBlocks.blockDisplayStand); + this.add(InitBlocks.blockShockSuppressor); this.add(InitBlocks.blockMiner); this.add(InitBlocks.blockGreenhouseGlass); this.add(InitBlocks.blockGrinder); @@ -135,6 +134,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitBlocks.blockTreasureChest); this.add(InitBlocks.blockBlackLotus); + this.add(InitBlocks.blockBookletStand); this.add(InitItems.itemColorLens); this.add(InitItems.itemExplosionLens); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java index 6bb2f8022..3ca67be11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiBreaker.java @@ -36,7 +36,7 @@ public class GuiBreaker extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.breaker.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.breaker); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java index 73050816d..2d28853e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCanolaPress.java @@ -53,7 +53,7 @@ public class GuiCanolaPress extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java index 025ecb650..36ea1bb24 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoalGenerator.java @@ -47,7 +47,7 @@ public class GuiCoalGenerator extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java index 2e01a67b2..e745b36d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiCoffeeMachine.java @@ -81,7 +81,7 @@ public class GuiCoffeeMachine extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.machine.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.machine); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java index fb6e86771..5bb51f2ef 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDirectionalBreaker.java @@ -48,7 +48,7 @@ public class GuiDirectionalBreaker extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.breaker.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.breaker); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java index e4e08238d..ad94d37e7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiDropper.java @@ -36,7 +36,7 @@ public class GuiDropper extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.dropper.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.dropper); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java index 2d1fde488..2e8251dc1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnergizer.java @@ -47,7 +47,7 @@ public class GuiEnergizer extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.energizer.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.energizer); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java index 96ed0b201..49a30f393 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiEnervator.java @@ -47,7 +47,7 @@ public class GuiEnervator extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.enervator.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.enervator); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java index 761527709..fbb9bead4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFeeder.java @@ -49,7 +49,7 @@ public class GuiFeeder extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileFeeder.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileFeeder); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java index 0f23fd9f3..9d45e29df 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFermentingBarrel.java @@ -54,7 +54,7 @@ public class GuiFermentingBarrel extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press.name); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.press); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java index abeebadc9..bcb33a796 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFluidCollector.java @@ -49,7 +49,7 @@ public class GuiFluidCollector extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector.name); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java index 9619ebc7e..9e97b5af5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiFurnaceDouble.java @@ -47,7 +47,7 @@ public class GuiFurnaceDouble extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileFurnace.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileFurnace); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java index 07d484697..769a80037 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGiantChest.java @@ -74,7 +74,7 @@ public class GuiGiantChest extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.chest.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.chest); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java index 04e289b8b..5336aa460 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiGrinder.java @@ -54,7 +54,7 @@ public class GuiGrinder extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileGrinder.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileGrinder); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java index 6e7058fa6..7e6dcd7b1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiInputter.java @@ -157,7 +157,7 @@ public class GuiInputter extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileInputter.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileInputter); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java index f8efd24ad..52d43326c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiLaserRelayItemWhitelist.java @@ -108,7 +108,7 @@ public class GuiLaserRelayItemWhitelist extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tile.name); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tile); String s1 = "INBOUND"; String s2 = "OUTBOUND"; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index 770908793..026bc51a6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -53,7 +53,7 @@ public class GuiMiner extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.miner.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.miner); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java index f219d9e2c..0a6cf6942 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiOilGenerator.java @@ -52,7 +52,7 @@ public class GuiOilGenerator extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator.name); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.generator); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java index a603f2edb..95016976e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiPhantomPlacer.java @@ -36,7 +36,7 @@ public class GuiPhantomPlacer extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.placer.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.placer); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java index 7b0ff8806..25ab78282 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRangedCollector.java @@ -75,7 +75,7 @@ public class GuiRangedCollector extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.collector); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java index 1348641c1..530df742b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiRepairer.java @@ -47,7 +47,7 @@ public class GuiRepairer extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileRepairer.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.tileRepairer); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java index 8d97b7cd2..089ffc6f1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiXPSolidifier.java @@ -76,7 +76,7 @@ public class GuiXPSolidifier extends GuiContainer{ @Override public void drawGuiContainerForegroundLayer(int x, int y){ - AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.solidifier.getName()); + AssetUtil.displayNameString(this.fontRendererObj, this.xSize, -10, this.solidifier); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 093ba8037..6250ad729 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.block.state.IBlockState; @@ -27,6 +28,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; @@ -38,69 +41,70 @@ import net.minecraftforge.fml.common.registry.GameRegistry; public abstract class TileEntityBase extends TileEntity implements ITickable{ public static boolean teslaLoaded; - public final String name; public boolean isRedstonePowered; public boolean isPulseMode; protected int ticksElapsed; + public final String name; public TileEntityBase(String name){ - this.name = "container."+ModUtil.MOD_ID+"."+name; + this.name = name; } //TODO Change for next major update to use the name variable automatically public static void init(){ ModUtil.LOGGER.info("Registering TileEntities..."); - GameRegistry.registerTileEntity(TileEntityCompost.class, ModUtil.MOD_ID+":tileEntityCompost"); - GameRegistry.registerTileEntity(TileEntityFeeder.class, ModUtil.MOD_ID+":tileEntityFeeder"); - GameRegistry.registerTileEntity(TileEntityGiantChest.class, ModUtil.MOD_ID+":tileEntityGiantChest"); - GameRegistry.registerTileEntity(TileEntityGiantChestMedium.class, ModUtil.MOD_ID+":tileEntityGiantChestMedium"); - GameRegistry.registerTileEntity(TileEntityGiantChestLarge.class, ModUtil.MOD_ID+":tileEntityGiantChestLarge"); - GameRegistry.registerTileEntity(TileEntityGrinder.class, ModUtil.MOD_ID+":tileEntityGrinder"); - GameRegistry.registerTileEntity(TileEntityFurnaceDouble.class, ModUtil.MOD_ID+":tileEntityFurnaceDouble"); - GameRegistry.registerTileEntity(TileEntityInputter.class, ModUtil.MOD_ID+":tileEntityInputter"); - GameRegistry.registerTileEntity(TileEntityFishingNet.class, ModUtil.MOD_ID+":tileEntityFishingNet"); - GameRegistry.registerTileEntity(TileEntityFurnaceSolar.class, ModUtil.MOD_ID+":tileEntityFurnaceSolar"); - GameRegistry.registerTileEntity(TileEntityHeatCollector.class, ModUtil.MOD_ID+":tileEntityHeatCollector"); - GameRegistry.registerTileEntity(TileEntityItemRepairer.class, ModUtil.MOD_ID+":tileEntityRepairer"); - GameRegistry.registerTileEntity(TileEntityGreenhouseGlass.class, ModUtil.MOD_ID+":tileEntityGreenhouseGlass"); - GameRegistry.registerTileEntity(TileEntityBreaker.class, ModUtil.MOD_ID+":tileEntityBreaker"); - GameRegistry.registerTileEntity(TileEntityDropper.class, ModUtil.MOD_ID+":tileEntityDropper"); - GameRegistry.registerTileEntity(TileEntityInputterAdvanced.class, ModUtil.MOD_ID+":tileEntityInputterAdvanced"); - GameRegistry.registerTileEntity(TileEntityPlacer.class, ModUtil.MOD_ID+":tileEntityPlacer"); - GameRegistry.registerTileEntity(TileEntityGrinderDouble.class, ModUtil.MOD_ID+":tileEntityGrinderDouble"); - GameRegistry.registerTileEntity(TileEntityCanolaPress.class, ModUtil.MOD_ID+":tileEntityCanolaPress"); - GameRegistry.registerTileEntity(TileEntityFermentingBarrel.class, ModUtil.MOD_ID+":tileEntityFermentingBarrel"); - GameRegistry.registerTileEntity(TileEntityOilGenerator.class, ModUtil.MOD_ID+":tileEntityOilGenerator"); - GameRegistry.registerTileEntity(TileEntityCoalGenerator.class, ModUtil.MOD_ID+":tileEntityCoalGenerator"); - GameRegistry.registerTileEntity(TileEntityPhantomItemface.class, ModUtil.MOD_ID+":tileEntityPhantomItemface"); - GameRegistry.registerTileEntity(TileEntityPhantomLiquiface.class, ModUtil.MOD_ID+":tileEntityPhantomLiquiface"); - GameRegistry.registerTileEntity(TileEntityPhantomEnergyface.class, ModUtil.MOD_ID+":tileEntityPhantomEnergyface"); - GameRegistry.registerTileEntity(TileEntityPlayerInterface.class, ModUtil.MOD_ID+":tileEntityPlayerInterface"); - GameRegistry.registerTileEntity(TileEntityPhantomPlacer.class, ModUtil.MOD_ID+":tileEntityPhantomPlacer"); - GameRegistry.registerTileEntity(TileEntityPhantomBreaker.class, ModUtil.MOD_ID+":tileEntityPhantomBreaker"); - GameRegistry.registerTileEntity(TileEntityFluidCollector.class, ModUtil.MOD_ID+":tileEntityFluidCollector"); - GameRegistry.registerTileEntity(TileEntityFluidPlacer.class, ModUtil.MOD_ID+":tileEntityFluidPlacer"); - GameRegistry.registerTileEntity(TileEntityLavaFactoryController.class, ModUtil.MOD_ID+":tileEntityLavaFactoryController"); - GameRegistry.registerTileEntity(TileEntityCoffeeMachine.class, ModUtil.MOD_ID+":tileEntityCoffeeMachine"); - GameRegistry.registerTileEntity(TileEntityPhantomBooster.class, ModUtil.MOD_ID+":tileEntityPhantomBooster"); - GameRegistry.registerTileEntity(TileEntityEnergizer.class, ModUtil.MOD_ID+":tileEntityEnergizer"); - GameRegistry.registerTileEntity(TileEntityEnervator.class, ModUtil.MOD_ID+":tileEntityEnervator"); - GameRegistry.registerTileEntity(TileEntityXPSolidifier.class, ModUtil.MOD_ID+":tileEntityXPSolidifier"); - GameRegistry.registerTileEntity(TileEntitySmileyCloud.class, ModUtil.MOD_ID+":tileEntityCloud"); - GameRegistry.registerTileEntity(TileEntityLeafGenerator.class, ModUtil.MOD_ID+":tileEntityLeafGenerator"); - GameRegistry.registerTileEntity(TileEntityDirectionalBreaker.class, ModUtil.MOD_ID+":tileEntityDirectionalBreaker"); - GameRegistry.registerTileEntity(TileEntityRangedCollector.class, ModUtil.MOD_ID+":tileEntityRangedCollector"); - GameRegistry.registerTileEntity(TileEntityAtomicReconstructor.class, ModUtil.MOD_ID+":tileEntityAtomicReconstructor"); - GameRegistry.registerTileEntity(TileEntityMiner.class, ModUtil.MOD_ID+":tileEntityMiner"); - GameRegistry.registerTileEntity(TileEntityFireworkBox.class, ModUtil.MOD_ID+":tileEntityFireworkBox"); - GameRegistry.registerTileEntity(TileEntityPhantomRedstoneface.class, ModUtil.MOD_ID+":tileEntityPhantomRedstoneface"); - GameRegistry.registerTileEntity(TileEntityLaserRelayItem.class, ModUtil.MOD_ID+":tileEntityLaserRelayItem"); - GameRegistry.registerTileEntity(TileEntityLaserRelayEnergy.class, ModUtil.MOD_ID+":tileEntityLaserRelay"); - GameRegistry.registerTileEntity(TileEntityLaserRelayItemWhitelist.class, ModUtil.MOD_ID+":tileEntityLaserRelayItemWhitelist"); - GameRegistry.registerTileEntity(TileEntityItemViewer.class, ModUtil.MOD_ID+":tileItemViewer"); - GameRegistry.registerTileEntity(TileEntityBookletStand.class, ModUtil.MOD_ID+":tileEntityBookletStand"); - GameRegistry.registerTileEntity(TileEntityDisplayStand.class, ModUtil.MOD_ID+":tileEntityDisplayStand"); + register(TileEntityCompost.class, "Compost"); + register(TileEntityFeeder.class, "Feeder"); + register(TileEntityGiantChest.class, "GiantChest"); + register(TileEntityGiantChestMedium.class, "GiantChestMedium"); + register(TileEntityGiantChestLarge.class, "GiantChestLarge"); + register(TileEntityGrinder.class, "Grinder"); + register(TileEntityFurnaceDouble.class, "FurnaceDouble"); + register(TileEntityInputter.class, "Inputter"); + register(TileEntityFishingNet.class, "FishingNet"); + register(TileEntityFurnaceSolar.class, "FurnaceSolar"); + register(TileEntityHeatCollector.class, "HeatCollector"); + register(TileEntityItemRepairer.class, "Repairer"); + register(TileEntityGreenhouseGlass.class, "GreenhouseGlass"); + register(TileEntityBreaker.class, "Breaker"); + register(TileEntityDropper.class, "Dropper"); + register(TileEntityInputterAdvanced.class, "InputterAdvanced"); + register(TileEntityPlacer.class, "Placer"); + register(TileEntityGrinderDouble.class, "GrinderDouble"); + register(TileEntityCanolaPress.class, "CanolaPress"); + register(TileEntityFermentingBarrel.class, "FermentingBarrel"); + register(TileEntityOilGenerator.class, "OilGenerator"); + register(TileEntityCoalGenerator.class, "CoalGenerator"); + register(TileEntityPhantomItemface.class, "PhantomItemface"); + register(TileEntityPhantomLiquiface.class, "PhantomLiquiface"); + register(TileEntityPhantomEnergyface.class, "PhantomEnergyface"); + register(TileEntityPlayerInterface.class, "PlayerInterface"); + register(TileEntityPhantomPlacer.class, "PhantomPlacer"); + register(TileEntityPhantomBreaker.class, "PhantomBreaker"); + register(TileEntityFluidCollector.class, "FluidCollector"); + register(TileEntityFluidPlacer.class, "FluidPlacer"); + register(TileEntityLavaFactoryController.class, "LavaFactoryController"); + register(TileEntityCoffeeMachine.class, "CoffeeMachine"); + register(TileEntityPhantomBooster.class, "PhantomBooster"); + register(TileEntityEnergizer.class, "Energizer"); + register(TileEntityEnervator.class, "Enervator"); + register(TileEntityXPSolidifier.class, "XPSolidifier"); + register(TileEntitySmileyCloud.class, "Cloud"); + register(TileEntityLeafGenerator.class, "LeafGenerator"); + register(TileEntityDirectionalBreaker.class, "DirectionalBreaker"); + register(TileEntityRangedCollector.class, "RangedCollector"); + register(TileEntityAtomicReconstructor.class, "AtomicReconstructor"); + register(TileEntityMiner.class, "Miner"); + register(TileEntityFireworkBox.class, "FireworkBox"); + register(TileEntityPhantomRedstoneface.class, "PhantomRedstoneface"); + register(TileEntityLaserRelayItem.class, "LaserRelayItem"); + register(TileEntityLaserRelayEnergy.class, "LaserRelay"); + register(TileEntityLaserRelayItemWhitelist.class, "LaserRelayItemWhitelist"); + register(TileEntityItemViewer.class, "ItemViewer"); + register(TileEntityBookletStand.class, "BookletStand"); + register(TileEntityDisplayStand.class, "DisplayStand"); + register(TileEntityShockSuppressor.class, "ShockSuppressor"); if(ModAPIManager.INSTANCE.hasAPI("Tesla|API")){ ModUtil.LOGGER.info("Tesla API loaded... Activating Tesla Power System integration..."); @@ -111,13 +115,24 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } } + private static void register(Class tileClass, String legacyName){ + try{ + //This is hacky and dirty but it works so whatever + String name = ModUtil.MOD_ID+":"+tileClass.newInstance().name; + String oldName = ModUtil.MOD_ID+":tileEntity"+legacyName; + GameRegistry.registerTileEntityWithAlternatives(tileClass, name, oldName); + } + catch(Exception e){ + ModUtil.LOGGER.fatal("Registering a TileEntity failed!", e); + } + } + @Override public void readFromNBT(NBTTagCompound compound){ super.readFromNBT(compound); this.readSyncableNBT(compound, NBTType.SAVE_TILE); } - @Override public NBTTagCompound writeToNBT(NBTTagCompound compound){ compound = super.writeToNBT(compound); @@ -173,6 +188,11 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } } + @Override + public ITextComponent getDisplayName(){ + return new TextComponentTranslation("container."+ModUtil.MOD_ID+"."+this.name+".name"); + } + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ if(type == NBTType.SAVE_TILE){ this.isRedstonePowered = compound.getBoolean("Redstone"); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java index 1aa15f62c..9dfc862d9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChest.java @@ -20,12 +20,12 @@ import net.minecraft.util.EnumFacing; public class TileEntityGiantChest extends TileEntityInventoryBase implements IButtonReactor{ - public TileEntityGiantChest(int slotAmount){ - super(slotAmount, "giantChest"); + public TileEntityGiantChest(int slotAmount, String name){ + super(slotAmount, name); } public TileEntityGiantChest(){ - this(9*13); + this(9*13, "giantChest"); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java index c87183508..364577a8b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestLarge.java @@ -13,6 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityGiantChestLarge extends TileEntityGiantChest{ public TileEntityGiantChestLarge(){ - super(9*13*3); + super(9*13*3, "giantChestLarge"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java index 02f5ab3f7..1af9a8bfd 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGiantChestMedium.java @@ -13,6 +13,6 @@ package de.ellpeck.actuallyadditions.mod.tile; public class TileEntityGiantChestMedium extends TileEntityGiantChest{ public TileEntityGiantChestMedium(){ - super(9*13*2); + super(9*13*2, "giantChestMedium"); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 758f83c92..a47733d38 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -191,7 +191,6 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return stack; } - @Override public String getName(){ return this.name; @@ -202,12 +201,6 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements return false; } - - @Override - public ITextComponent getDisplayName(){ - return new TextComponentTranslation(this.getName()); - } - @Override public T getCapability(Capability capability, EnumFacing facing){ if(this.hasInvWrapperCapabilities() && capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 34c5e9711..9c4f8b099 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -24,6 +24,7 @@ import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformT import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -44,9 +45,12 @@ public final class AssetUtil{ return new ResourceLocation(ModUtil.MOD_ID, "textures/gui/booklet/"+file+".png"); } - public static void displayNameString(FontRenderer font, int xSize, int yPositionOfMachineText, String machineName){ - String localMachineName = StringUtil.localize(machineName+".name"); - font.drawString(localMachineName, xSize/2-font.getStringWidth(localMachineName)/2, yPositionOfMachineText, StringUtil.DECIMAL_COLOR_WHITE); + public static void displayNameString(FontRenderer font, int xSize, int yPositionOfMachineText, String text){ + font.drawString(text, xSize/2-font.getStringWidth(text)/2, yPositionOfMachineText, StringUtil.DECIMAL_COLOR_WHITE); + } + + public static void displayNameString(FontRenderer font, int xSize, int yPositionOfMachineText, TileEntity tile){ + displayNameString(font, xSize, yPositionOfMachineText, tile.getDisplayName().getFormattedText()); } @SideOnly(Side.CLIENT) diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index babc62068..476ac608d 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -568,7 +568,9 @@ container.actuallyadditions.grinder.name=Crusher container.actuallyadditions.grinderDouble.name=Double Crusher container.actuallyadditions.furnaceDouble.name=Double Furnace container.actuallyadditions.feeder.name=Feeder -container.actuallyadditions.giantChest.name=Storage Crate +container.actuallyadditions.giantChest.name=Small Storage Crate +container.actuallyadditions.giantChestMedium.name=Medium Storage Crate +container.actuallyadditions.giantChestLarge.name=Large Storage Crate container.actuallyadditions.repairer.name=Repairer container.actuallyadditions.placer.name=Placer container.actuallyadditions.breaker.name=Breaker From fad1a1b0c9b7bf173f9cd6f6395cb9bb8c3782b5 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 3 Jul 2016 22:53:12 +0200 Subject: [PATCH 319/322] Shock suppressor, function --- .../mod/blocks/BlockShockSuppressor.java | 108 +++++++++++++++++ .../mod/event/ClientEvents.java | 5 + .../mod/event/CommonEvents.java | 5 + .../mod/tile/TileEntityShockSuppressor.java | 114 ++++++++++++++++++ 4 files changed, 232 insertions(+) create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java create mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityShockSuppressor.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java new file mode 100644 index 000000000..8b7c110f8 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockShockSuppressor.java @@ -0,0 +1,108 @@ +/* + * This file ("BlockShockSuppressor.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.blocks; + +import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityShockSuppressor; +import net.minecraft.block.Block; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.ExplosionEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class BlockShockSuppressor extends BlockContainerBase{ + + public BlockShockSuppressor(String name){ + super(Material.ROCK, name); + this.setHarvestLevel("pickaxe", 0); + this.setHardness(20.0F); + this.setResistance(2000.0F); + this.setSoundType(SoundType.STONE); + + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onExplosion(ExplosionEvent.Detonate event){ + World world = event.getWorld(); + if(!world.isRemote){ + List affectedBlocks = event.getAffectedBlocks(); + List affectedEntities = event.getAffectedEntities(); + + int rangeSq = TileEntityShockSuppressor.RANGE*TileEntityShockSuppressor.RANGE; + int use = TileEntityShockSuppressor.USE_PER; + + for(TileEntityShockSuppressor suppressor : TileEntityShockSuppressor.SUPPRESSORS){ + if(!suppressor.isRedstonePowered){ + BlockPos supPos = suppressor.getPos(); + + List entitiesToRemove = new ArrayList(); + List posesToRemove = new ArrayList(); + + for(BlockPos pos : affectedBlocks){ + if(pos.distanceSq(supPos) <= rangeSq){ + posesToRemove.add(pos); + } + } + for(Entity entity : affectedEntities){ + if(entity.getPositionVector().squareDistanceTo(supPos.getX(), supPos.getY(), supPos.getZ()) <= rangeSq){ + entitiesToRemove.add(entity); + } + } + + Collections.shuffle(entitiesToRemove); + Collections.shuffle(posesToRemove); + + for(BlockPos pos : posesToRemove){ + if(suppressor.storage.getEnergyStored() >= use){ + suppressor.storage.extractEnergy(use, false); + affectedBlocks.remove(pos); + } + else{ + break; + } + } + for(Entity entity : entitiesToRemove){ + if(suppressor.storage.getEnergyStored() >= use){ + suppressor.storage.extractEnergy(use, false); + affectedEntities.remove(entity); + } + else{ + break; + } + } + } + } + } + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta){ + return new TileEntityShockSuppressor(); + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java index 8f731219f..ad682eb4a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java @@ -31,6 +31,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; @@ -45,6 +46,10 @@ public class ClientEvents{ private static final String ADVANCED_INFO_TEXT_PRE = TextFormatting.DARK_GRAY+" "; private static final String ADVANCED_INFO_HEADER_PRE = TextFormatting.GRAY+" -"; + public ClientEvents(){ + MinecraftForge.EVENT_BUS.register(this); + } + @SubscribeEvent public void onTooltipEvent(ItemTooltipEvent event){ //Advanced Item Info diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java index c5f9a06f9..603ffe403 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/CommonEvents.java @@ -28,6 +28,7 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingDropsEvent; @@ -39,6 +40,10 @@ import java.util.Locale; public class CommonEvents{ + public CommonEvents(){ + MinecraftForge.EVENT_BUS.register(this); + } + @SubscribeEvent public void livingDeathEvent(LivingDeathEvent event){ if(event.getEntityLiving().worldObj != null && !event.getEntityLiving().worldObj.isRemote && event.getEntityLiving() instanceof EntityPlayer){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityShockSuppressor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityShockSuppressor.java new file mode 100644 index 000000000..b45203bfa --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityShockSuppressor.java @@ -0,0 +1,114 @@ +/* + * This file ("TileEntityShockSuppressor.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.tile; + +import cofh.api.energy.EnergyStorage; +import cofh.api.energy.IEnergyReceiver; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +import java.util.ArrayList; +import java.util.List; + +public class TileEntityShockSuppressor extends TileEntityBase implements IEnergyReceiver, IEnergyDisplay{ + + public static final List SUPPRESSORS = new ArrayList(); + + public static final int USE_PER = 300; + public static final int RANGE = 5; + + public EnergyStorage storage = new EnergyStorage(300000); + private int oldEnergy; + + public TileEntityShockSuppressor(){ + super("shockSuppressor"); + } + + @Override + public void onChunkUnload(){ + super.onChunkUnload(); + + if(!this.worldObj.isRemote){ + SUPPRESSORS.remove(this); + } + } + + @Override + public void invalidate(){ + super.invalidate(); + + if(!this.worldObj.isRemote){ + SUPPRESSORS.remove(this); + } + } + + @Override + public void updateEntity(){ + super.updateEntity(); + + if(!this.worldObj.isRemote){ + if(!this.isInvalid() && !SUPPRESSORS.contains(this)){ + SUPPRESSORS.add(this); + } + + if(this.oldEnergy != this.storage.getEnergyStored() && this.sendUpdateWithInterval()){ + this.oldEnergy = this.storage.getEnergyStored(); + } + } + } + + @Override + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); + this.storage.writeToNBT(compound); + } + + @Override + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); + this.storage.readFromNBT(compound); + } + + @Override + public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate){ + return this.storage.receiveEnergy(maxReceive, simulate); + } + + @Override + public int getEnergyStored(EnumFacing from){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(EnumFacing from){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean canConnectEnergy(EnumFacing from){ + return true; + } + + @Override + public int getEnergy(){ + return this.storage.getEnergyStored(); + } + + @Override + public int getMaxEnergy(){ + return this.storage.getMaxEnergyStored(); + } + + @Override + public boolean needsHoldShift(){ + return false; + } +} From 0eb64b26598c034345f7db01ff10f3cb6c0d800d Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 4 Jul 2016 20:15:41 +0200 Subject: [PATCH 320/322] Remove some utils that were stupid --- .../mod/blocks/BlockAtomicReconstructor.java | 2 +- .../mod/blocks/BlockBookletStand.java | 9 +-- .../mod/blocks/BlockBreaker.java | 3 +- .../mod/blocks/BlockCoffeeMachine.java | 9 +-- .../mod/blocks/BlockColoredLamp.java | 7 +- .../mod/blocks/BlockDirectionalBreaker.java | 3 +- .../mod/blocks/BlockDropper.java | 3 +- .../mod/blocks/BlockFluidCollector.java | 3 +- .../mod/blocks/BlockFurnaceDouble.java | 13 ++- .../mod/blocks/BlockGrinder.java | 5 +- .../mod/blocks/BlockItemRepairer.java | 3 +- .../mod/blocks/BlockLampPowerer.java | 18 +++-- .../mod/blocks/BlockPhantom.java | 8 +- .../mod/blocks/BlockSmileyCloud.java | 9 +-- .../mod/blocks/BlockTreasureChest.java | 9 +-- .../mod/blocks/BlockWallAA.java | 3 +- .../mod/blocks/BlockWildPlant.java | 11 +-- .../mod/blocks/BlockXPSolidifier.java | 9 +-- .../mod/blocks/base/BlockFluidFlowing.java | 5 +- .../render/RenderReconstructorLens.java | 5 +- .../mod/blocks/render/RenderSmileyCloud.java | 5 +- .../mod/event/ClientEvents.java | 3 +- .../actuallyadditions/mod/gen/OreGen.java | 22 ++--- .../mod/items/ItemBooklet.java | 12 +-- .../mod/items/ItemChestToCrateUpgrade.java | 5 +- .../mod/items/ItemDrill.java | 9 ++- .../mod/items/ItemGrowthRing.java | 13 +-- .../mod/items/ItemLeafBlower.java | 5 +- .../mod/items/ItemWaterBowl.java | 4 +- .../mod/items/ItemWaterRemovalRing.java | 3 +- .../mod/items/lens/LensColor.java | 9 ++- .../mod/items/lens/LensDeath.java | 3 +- .../mod/items/lens/LensDetonation.java | 3 +- .../mod/items/lens/LensDisruption.java | 3 +- .../mod/misc/LaserRelayConnectionHandler.java | 7 +- .../mod/misc/MethodHandler.java | 7 +- .../mod/recipe/FuelHandler.java | 1 + .../tile/TileEntityAtomicReconstructor.java | 7 +- .../mod/tile/TileEntityBreaker.java | 10 +-- .../tile/TileEntityDirectionalBreaker.java | 11 +-- .../mod/tile/TileEntityDropper.java | 5 +- .../mod/tile/TileEntityFishingNet.java | 7 +- .../mod/tile/TileEntityFluidCollector.java | 31 +++---- .../mod/tile/TileEntityFurnaceDouble.java | 11 ++- .../mod/tile/TileEntityFurnaceSolar.java | 7 +- .../mod/tile/TileEntityGreenhouseGlass.java | 14 ++-- .../mod/tile/TileEntityGrinder.java | 11 ++- .../mod/tile/TileEntityHeatCollector.java | 11 +-- .../mod/tile/TileEntityInputter.java | 4 +- .../mod/tile/TileEntityItemViewer.java | 2 +- .../mod/tile/TileEntityLaserRelay.java | 3 +- .../mod/tile/TileEntityLaserRelayEnergy.java | 2 +- .../mod/tile/TileEntityLaserRelayItem.java | 2 +- .../tile/TileEntityLavaFactoryController.java | 21 ++--- .../mod/tile/TileEntityLeafGenerator.java | 5 +- .../mod/tile/TileEntityMiner.java | 3 +- .../mod/tile/TileEntityPhantomPlacer.java | 7 +- .../mod/tile/TileEntityPhantomface.java | 13 ++- .../mod/tile/TileEntitySmileyCloud.java | 11 ++- .../actuallyadditions/mod/util/AssetUtil.java | 7 ++ .../actuallyadditions/mod/util/PosUtil.java | 80 ------------------- .../mod/util/StringUtil.java | 4 + .../actuallyadditions/mod/util/Util.java | 10 --- .../actuallyadditions/mod/util/WorldUtil.java | 42 ++++------ 64 files changed, 251 insertions(+), 341 deletions(-) delete mode 100644 src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java index 8c0d93da1..26b623ba7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockAtomicReconstructor.java @@ -141,7 +141,7 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IHud @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); - PosUtil.setMetadata(pos, world, rotation, 2); + world.setBlockState(pos, this.getStateFromMeta(rotation), 2); super.onBlockPlacedBy(world, pos, state, player, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java index c389764aa..aba005c2c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBookletStand.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBookletStand; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -102,16 +101,16 @@ public class BlockBookletStand extends BlockContainerBase implements IHudDisplay int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; if(rotation == 0){ - PosUtil.setMetadata(pos, world, 0, 2); + world.setBlockState(pos, this.getStateFromMeta(0), 2); } if(rotation == 1){ - PosUtil.setMetadata(pos, world, 3, 2); + world.setBlockState(pos, this.getStateFromMeta(3), 2); } if(rotation == 2){ - PosUtil.setMetadata(pos, world, 1, 2); + world.setBlockState(pos, this.getStateFromMeta(1), 2); } if(rotation == 3){ - PosUtil.setMetadata(pos, world, 2, 2); + world.setBlockState(pos, this.getStateFromMeta(2), 2); } TileEntityBookletStand tile = (TileEntityBookletStand)world.getTileEntity(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java index 143f4150b..7a8ee49a3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockBreaker.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBreaker; import de.ellpeck.actuallyadditions.mod.tile.TileEntityPlacer; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -75,7 +74,7 @@ public class BlockBreaker extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); - PosUtil.setMetadata(pos, world, rotation, 2); + world.setBlockState(pos, this.getStateFromMeta(rotation), 2); super.onBlockPlacedBy(world, pos, state, player, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java index a5ea017b6..281e67f21 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockCoffeeMachine.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityCoffeeMachine; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -97,16 +96,16 @@ public class BlockCoffeeMachine extends BlockContainerBase{ int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; if(rotation == 0){ - PosUtil.setMetadata(pos, world, 0, 2); + world.setBlockState(pos, this.getStateFromMeta(0), 2); } if(rotation == 1){ - PosUtil.setMetadata(pos, world, 3, 2); + world.setBlockState(pos, this.getStateFromMeta(3), 2); } if(rotation == 2){ - PosUtil.setMetadata(pos, world, 1, 2); + world.setBlockState(pos, this.getStateFromMeta(1), 2); } if(rotation == 3){ - PosUtil.setMetadata(pos, world, 2, 2); + world.setBlockState(pos, this.getStateFromMeta(2), 2); } super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java index 13ea5a03f..eb5d2ce7f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockColoredLamp.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -68,7 +67,7 @@ public class BlockColoredLamp extends BlockBase{ //Turning On if(player.isSneaking()){ if(!world.isRemote){ - PosUtil.setBlock(pos, world, this.isOn ? InitBlocks.blockColoredLamp : InitBlocks.blockColoredLampOn, PosUtil.getMetadata(state), 2); + world.setBlockState(pos, (this.isOn ? InitBlocks.blockColoredLamp : InitBlocks.blockColoredLampOn).getStateFromMeta(this.getMetaFromState(state)), 2); } return true; } @@ -81,9 +80,9 @@ public class BlockColoredLamp extends BlockBase{ String name = OreDictionary.getOreName(oreID); TheColoredLampColors color = TheColoredLampColors.getColorFromDyeName(name); if(color != null){ - if(PosUtil.getMetadata(state) != color.ordinal()){ + if(this.getMetaFromState(state) != color.ordinal()){ if(!world.isRemote){ - PosUtil.setMetadata(pos, world, color.ordinal(), 2); + world.setBlockState(pos, this.getStateFromMeta(color.ordinal()), 2); if(!player.capabilities.isCreativeMode){ player.inventory.decrStackSize(player.inventory.currentItem, 1); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java index 54f672c3c..9f37f45b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDirectionalBreaker.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDirectionalBreaker; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -72,7 +71,7 @@ public class BlockDirectionalBreaker extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); - PosUtil.setMetadata(pos, world, rotation, 2); + world.setBlockState(pos, this.getStateFromMeta(rotation), 2); super.onBlockPlacedBy(world, pos, state, player, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java index 5141a0759..517c1134a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockDropper.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityDropper; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -71,7 +70,7 @@ public class BlockDropper extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); - PosUtil.setMetadata(pos, world, rotation, 2); + world.setBlockState(pos, this.getStateFromMeta(rotation), 2); super.onBlockPlacedBy(world, pos, state, player, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java index 3045acc89..c6152b475 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFluidCollector.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidCollector; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFluidPlacer; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.BlockPistonBase; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -78,7 +77,7 @@ public class BlockFluidCollector extends BlockContainerBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); - PosUtil.setMetadata(pos, world, rotation, 2); + world.setBlockState(pos, this.getStateFromMeta(rotation), 2); super.onBlockPlacedBy(world, pos, state, player, stack); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java index d20a89525..f28fdb5ae 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockFurnaceDouble.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityFurnaceDouble; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -59,7 +58,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ - int meta = PosUtil.getMetadata(state); + int meta = this.getMetaFromState(state); if(meta > 3){ float f = (float)pos.getX()+0.5F; @@ -105,7 +104,7 @@ public class BlockFurnaceDouble extends BlockContainerBase{ @Override public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ - return PosUtil.getMetadata(state) > 3 ? 12 : 0; + return this.getMetaFromState(state) > 3 ? 12 : 0; } @Override @@ -118,16 +117,16 @@ public class BlockFurnaceDouble extends BlockContainerBase{ int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; if(rotation == 0){ - PosUtil.setMetadata(pos, world, 0, 2); + world.setBlockState(pos, this.getStateFromMeta(0), 2); } if(rotation == 1){ - PosUtil.setMetadata(pos, world, 3, 2); + world.setBlockState(pos, this.getStateFromMeta(3), 2); } if(rotation == 2){ - PosUtil.setMetadata(pos, world, 1, 2); + world.setBlockState(pos, this.getStateFromMeta(1), 2); } if(rotation == 3){ - PosUtil.setMetadata(pos, world, 2, 2); + world.setBlockState(pos, this.getStateFromMeta(2), 2); } super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java index b947a5b70..773b4ea58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockGrinder.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinder; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGrinderDouble; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -60,7 +59,7 @@ public class BlockGrinder extends BlockContainerBase{ @Override @SideOnly(Side.CLIENT) public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand){ - int meta = PosUtil.getMetadata(state); + int meta = this.getMetaFromState(state); if(meta == 1){ for(int i = 0; i < 5; i++){ @@ -86,7 +85,7 @@ public class BlockGrinder extends BlockContainerBase{ @Override public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ - return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; + return this.getMetaFromState(state) == 1 ? 12 : 0; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java index bb223860e..0aefdaf7d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockItemRepairer.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntityItemRepairer; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -60,7 +59,7 @@ public class BlockItemRepairer extends BlockContainerBase{ @Override public int getLightValue(IBlockState state, IBlockAccess world, BlockPos pos){ - return PosUtil.getMetadata(pos, world) == 1 ? 12 : 0; + return this.getMetaFromState(state) == 1 ? 12 : 0; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java index 7b28c56be..3f36b7f38 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockLampPowerer.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockPistonBase; @@ -51,23 +50,26 @@ public class BlockLampPowerer extends BlockBase{ @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack){ int rotation = BlockPistonBase.getFacingFromEntity(pos, player).ordinal(); - PosUtil.setMetadata(pos, world, rotation, 2); + world.setBlockState(pos, this.getStateFromMeta(rotation), 2); super.onBlockPlacedBy(world, pos, state, player, stack); } private void updateLamp(World world, BlockPos pos){ if(!world.isRemote){ - BlockPos coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(pos, world)), pos, 0); - if(PosUtil.getBlock(coords, world) instanceof BlockColoredLamp){ + IBlockState state = world.getBlockState(pos); + BlockPos coords = pos.offset(WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state))); + IBlockState coordsState = world.getBlockState(coords); + if(coordsState.getBlock() instanceof BlockColoredLamp){ + int meta = coordsState.getBlock().getMetaFromState(coordsState); if(world.isBlockIndirectlyGettingPowered(pos) > 0){ - if(!((BlockColoredLamp)PosUtil.getBlock(coords, world)).isOn){ - PosUtil.setBlock(coords, world, InitBlocks.blockColoredLampOn, PosUtil.getMetadata(coords, world), 2); + if(!((BlockColoredLamp)coordsState.getBlock()).isOn){ + world.setBlockState(coords, InitBlocks.blockColoredLampOn.getStateFromMeta(meta), 2); } } else{ - if(((BlockColoredLamp)PosUtil.getBlock(coords, world)).isOn){ - PosUtil.setBlock(coords, world, InitBlocks.blockColoredLamp, PosUtil.getMetadata(coords, world), 2); + if(((BlockColoredLamp)coordsState.getBlock()).isOn){ + world.setBlockState(coords, InitBlocks.blockColoredLamp.getStateFromMeta(meta), 2); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java index f38c76e9f..92f036abf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockPhantom.java @@ -15,8 +15,8 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.tile.*; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -135,8 +135,10 @@ public class BlockPhantom extends BlockContainerBase implements IHudDisplay{ minecraft.fontRendererObj.drawStringWithShadow(TextFormatting.GOLD+StringUtil.localize("tooltip."+ModUtil.MOD_ID+".blockPhantomRange.desc")+": "+phantom.getRange(), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-40, StringUtil.DECIMAL_COLOR_WHITE); if(phantom.hasBoundPosition()){ int distance = (int)new Vec3d(posHit.getBlockPos()).distanceTo(new Vec3d(phantom.getBoundPosition())); - Item item = PosUtil.getItemBlock(phantom.getBoundPosition(), minecraft.theWorld); - String name = item == null ? "Absolutely Nothing" : item.getItemStackDisplayName(new ItemStack(PosUtil.getBlock(phantom.getBoundPosition(), minecraft.theWorld), 1, PosUtil.getMetadata(phantom.getBoundPosition(), minecraft.theWorld))); + IBlockState state = minecraft.theWorld.getBlockState(phantom.getBoundPosition()); + Block block = state.getBlock(); + Item item = Item.getItemFromBlock(block); + String name = item == null ? "Absolutely Nothing" : item.getItemStackDisplayName(new ItemStack(block, 1, block.getMetaFromState(state))); StringUtil.drawSplitString(minecraft.fontRendererObj, StringUtil.localizeFormatted("tooltip."+ModUtil.MOD_ID+".phantom.blockInfo.desc", name, phantom.getBoundPosition().getX(), phantom.getBoundPosition().getY(), phantom.getBoundPosition().getZ(), distance), resolution.getScaledWidth()/2+5, resolution.getScaledHeight()/2-30, 200, StringUtil.DECIMAL_COLOR_WHITE, true); if(phantom.isBoundThingInRange()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java index f7be9284d..1c8745557 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockSmileyCloud.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -108,16 +107,16 @@ public class BlockSmileyCloud extends BlockContainerBase{ int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; if(rotation == 0){ - PosUtil.setMetadata(pos, world, 0, 2); + world.setBlockState(pos, this.getStateFromMeta(0), 2); } if(rotation == 1){ - PosUtil.setMetadata(pos, world, 3, 2); + world.setBlockState(pos, this.getStateFromMeta(3), 2); } if(rotation == 2){ - PosUtil.setMetadata(pos, world, 1, 2); + world.setBlockState(pos, this.getStateFromMeta(1), 2); } if(rotation == 3){ - PosUtil.setMetadata(pos, world, 2, 2); + world.setBlockState(pos, this.getStateFromMeta(2), 2); } super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java index da333c60a..0d806d30a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockTreasureChest.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.TreasureChestLoot; import de.ellpeck.actuallyadditions.mod.achievement.TheAchievements; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -83,16 +82,16 @@ public class BlockTreasureChest extends BlockBase{ int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; if(rotation == 0){ - PosUtil.setMetadata(pos, world, 0, 2); + world.setBlockState(pos, this.getStateFromMeta(0), 2); } if(rotation == 1){ - PosUtil.setMetadata(pos, world, 3, 2); + world.setBlockState(pos, this.getStateFromMeta(3), 2); } if(rotation == 2){ - PosUtil.setMetadata(pos, world, 1, 2); + world.setBlockState(pos, this.getStateFromMeta(1), 2); } if(rotation == 3){ - PosUtil.setMetadata(pos, world, 2, 2); + world.setBlockState(pos, this.getStateFromMeta(2), 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java index a00533333..699261da3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWallAA.java @@ -11,7 +11,6 @@ package de.ellpeck.actuallyadditions.mod.blocks; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBase; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockFenceGate; import net.minecraft.block.BlockWall; @@ -132,8 +131,8 @@ public class BlockWallAA extends BlockBase{ } public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos){ - Block block = PosUtil.getBlock(pos, worldIn); IBlockState state = worldIn.getBlockState(pos); + Block block = state.getBlock(); return block != Blocks.BARRIER && (!(block != this && !(block instanceof BlockFenceGate)) || ((block.getMaterial(state).isOpaque() && block.isFullCube(state)) && block.getMaterial(state) != Material.GOURD)); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java index 28e5b8fbe..502a0cd2e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockWildPlant.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockBushBase; import de.ellpeck.actuallyadditions.mod.blocks.base.BlockPlant; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheWildPlants; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.SoundType; @@ -50,15 +49,17 @@ public class BlockWildPlant extends BlockBushBase{ @Override public boolean canBlockStay(World world, BlockPos pos, IBlockState state){ - BlockPos offset = PosUtil.offset(pos, 0, -1, 0); - return PosUtil.getMetadata(state) == TheWildPlants.RICE.ordinal() ? PosUtil.getMaterial(offset, world) == Material.WATER : PosUtil.getBlock(offset, world).canSustainPlant(world.getBlockState(offset), world, offset, EnumFacing.UP, this); + BlockPos offset = pos.down(); + IBlockState offsetState = world.getBlockState(offset); + Block offsetBlock = offsetState.getBlock(); + return offsetBlock.getMetaFromState(offsetState) == TheWildPlants.RICE.ordinal() ? offsetBlock.getMaterial(offsetState) == Material.WATER : offsetBlock.canSustainPlant(world.getBlockState(offset), world, offset, EnumFacing.UP, this); } @Override @SideOnly(Side.CLIENT) public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player){ - int metadata = PosUtil.getMetadata(pos, world); + int metadata = this.getMetaFromState(state); return metadata >= ALL_WILD_PLANTS.length ? null : new ItemStack(((BlockPlant)ALL_WILD_PLANTS[metadata].wildVersionOf).seedItem); } @@ -72,7 +73,7 @@ public class BlockWildPlant extends BlockBushBase{ @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune){ - int metadata = PosUtil.getMetadata(state); + int metadata = this.getMetaFromState(state); return metadata >= ALL_WILD_PLANTS.length ? null : ALL_WILD_PLANTS[metadata].wildVersionOf.getDrops(world, pos, ALL_WILD_PLANTS[metadata].wildVersionOf.getStateFromMeta(7), fortune); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java index bb7670c98..e79c719a7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/BlockXPSolidifier.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.tile.TileEntityXPSolidifier; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; @@ -74,16 +73,16 @@ public class BlockXPSolidifier extends BlockContainerBase{ int rotation = MathHelper.floor_double((double)(player.rotationYaw*4.0F/360.0F)+0.5D) & 3; if(rotation == 0){ - PosUtil.setMetadata(pos, world, 0, 2); + world.setBlockState(pos, this.getStateFromMeta(0), 2); } if(rotation == 1){ - PosUtil.setMetadata(pos, world, 3, 2); + world.setBlockState(pos, this.getStateFromMeta(3), 2); } if(rotation == 2){ - PosUtil.setMetadata(pos, world, 1, 2); + world.setBlockState(pos, this.getStateFromMeta(1), 2); } if(rotation == 3){ - PosUtil.setMetadata(pos, world, 2, 2); + world.setBlockState(pos, this.getStateFromMeta(2), 2); } super.onBlockPlacedBy(world, pos, state, player, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java index 5e1b4cf57..066d960ec 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/base/BlockFluidFlowing.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.blocks.base; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.material.Material; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -52,12 +51,12 @@ public class BlockFluidFlowing extends BlockFluidClassic implements ItemBlockBas @Override public boolean canDisplace(IBlockAccess world, BlockPos pos){ - return !PosUtil.getMaterial(pos, world).isLiquid() && super.canDisplace(world, pos); + return !world.getBlockState(pos).getMaterial().isLiquid() && super.canDisplace(world, pos); } @Override public boolean displaceIfPossible(World world, BlockPos pos){ - return !PosUtil.getMaterial(pos, world).isLiquid() && super.displaceIfPossible(world, pos); + return !world.getBlockState(pos).getMaterial().isLiquid() && super.displaceIfPossible(world, pos); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java index 24d749c32..1d80651d3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderReconstructorLens.java @@ -14,7 +14,7 @@ package de.ellpeck.actuallyadditions.mod.blocks.render; import de.ellpeck.actuallyadditions.api.lens.ILensItem; import de.ellpeck.actuallyadditions.mod.tile.TileEntityAtomicReconstructor; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.ItemStack; @@ -34,7 +34,8 @@ public class RenderReconstructorLens extends TileEntitySpecialRenderer{ GlStateManager.translate((float)x+0.5F, (float)y-0.5F, (float)z+0.5F); GlStateManager.rotate(180F, 0.0F, 0.0F, 1.0F); - int meta = PosUtil.getMetadata(tile.getPos(), tile.getWorld()); + IBlockState state = tile.getWorld().getBlockState(tile.getPos()); + int meta = state.getBlock().getMetaFromState(state); if(meta == 0){ GlStateManager.translate(0F, -0.5F, 0F); GlStateManager.rotate(90F, 1F, 0F, 0F); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java index dfacd162e..63c42480d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderSmileyCloud.java @@ -15,7 +15,7 @@ import de.ellpeck.actuallyadditions.mod.misc.cloud.SmileyCloudEasterEggs; import de.ellpeck.actuallyadditions.mod.proxy.ClientProxy; import de.ellpeck.actuallyadditions.mod.tile.TileEntitySmileyCloud; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -42,7 +42,8 @@ public class RenderSmileyCloud extends TileEntitySpecialRenderer{ if(triggerName != null && theCloud.name != null){ if(triggerName.equalsIgnoreCase(theCloud.name)){ GlStateManager.pushMatrix(); - switch(PosUtil.getMetadata(theCloud.getPos(), theCloud.getWorld())){ + IBlockState state = theCloud.getWorld().getBlockState(theCloud.getPos()); + switch(state.getBlock().getMetaFromState(state)){ case 1: GlStateManager.rotate(180, 0, 1, 0); break; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java index ad682eb4a..1550e2a11 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/event/ClientEvents.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.tile.IEnergyDisplay; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockRedstoneTorch; @@ -143,7 +142,7 @@ public class ClientEvents{ } if(posHit != null && posHit.getBlockPos() != null){ - Block blockHit = PosUtil.getBlock(posHit.getBlockPos(), minecraft.theWorld); + Block blockHit = minecraft.theWorld.getBlockState(posHit.getBlockPos()).getBlock(); TileEntity tileHit = minecraft.theWorld.getTileEntity(posHit.getBlockPos()); if(blockHit instanceof IHudDisplay){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java index 4a84c7670..317cdc0fe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/gen/OreGen.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntListValues; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; @@ -38,6 +37,7 @@ import net.minecraftforge.fml.common.IWorldGenerator; import net.minecraftforge.fml.common.eventhandler.Event; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.GameRegistry; +import org.apache.commons.lang3.ArrayUtils; import java.util.ArrayList; import java.util.Random; @@ -59,7 +59,7 @@ public class OreGen implements IWorldGenerator{ public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider){ int dimension = world.provider.getDimension(); if(dimension != -1 && dimension != 1){ - if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ConfigIntListValues.ORE_GEN_DIMENSION_BLACKLIST.getValue(), world.provider.getDimension()) < 0){ + if(world.getWorldType() != WorldType.FLAT && Util.arrayContains(ArrayUtils.toObject(ConfigIntListValues.ORE_GEN_DIMENSION_BLACKLIST.getValue()), world.provider.getDimension()) < 0){ this.generateDefault(world, random, chunkX*16, chunkZ*16); } } @@ -94,7 +94,7 @@ public class OreGen implements IWorldGenerator{ @SubscribeEvent public void onWorldDecoration(DecorateBiomeEvent.Decorate event){ if((event.getResult() == Event.Result.ALLOW || event.getResult() == Event.Result.DEFAULT)){ - if(Util.arrayContains(ConfigIntListValues.PLANT_DIMENSION_BLACKLIST.getValue(), event.getWorld().provider.getDimension()) < 0){ + if(Util.arrayContains(ArrayUtils.toObject(ConfigIntListValues.PLANT_DIMENSION_BLACKLIST.getValue()), event.getWorld().provider.getDimension()) < 0){ this.generateRice(event); this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.GRASS, event); this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.GRASS, event); @@ -111,8 +111,8 @@ public class OreGen implements IWorldGenerator{ if(event.getWorld().getBiomeGenForCoords(randomPos) instanceof BiomeOcean){ if(randomPos.getY() >= 25 && randomPos.getY() <= 45){ if(event.getWorld().getBlockState(randomPos).getMaterial() == Material.WATER){ - if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()).isSolid()){ - PosUtil.setBlock(randomPos, event.getWorld(), InitBlocks.blockTreasureChest, event.getRand().nextInt(4), 2); + if(event.getWorld().getBlockState(randomPos.down()).getMaterial().isSolid()){ + event.getWorld().setBlockState(randomPos, InitBlocks.blockTreasureChest.getStateFromMeta(event.getRand().nextInt(4)), 2); } } } @@ -128,13 +128,13 @@ public class OreGen implements IWorldGenerator{ if(event.getRand().nextInt(50) == 0){ BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - if(PosUtil.getMaterial(randomPos, event.getWorld()) == Material.WATER){ + if(event.getWorld().getBlockState(randomPos).getMaterial() == Material.WATER){ ArrayList blocksAroundBottom = WorldUtil.getMaterialsAround(event.getWorld(), randomPos); - BlockPos posToGenAt = PosUtil.offset(randomPos, 0, 1, 0); + BlockPos posToGenAt = randomPos.up(); ArrayList blocksAroundTop = WorldUtil.getMaterialsAround(event.getWorld(), posToGenAt); if(blocksAroundBottom.contains(Material.GRASS) || blocksAroundBottom.contains(Material.GROUND) || blocksAroundBottom.contains(Material.ROCK) || blocksAroundBottom.contains(Material.SAND)){ - if(!blocksAroundTop.contains(Material.WATER) && PosUtil.getMaterial(posToGenAt, event.getWorld()) == Material.AIR){ - PosUtil.setBlock(posToGenAt, event.getWorld(), InitBlocks.blockWildPlant, TheWildPlants.RICE.ordinal(), 2); + if(!blocksAroundTop.contains(Material.WATER) && event.getWorld().getBlockState(posToGenAt).getMaterial() == Material.AIR){ + event.getWorld().setBlockState(posToGenAt, InitBlocks.blockWildPlant.getStateFromMeta(TheWildPlants.RICE.ordinal()), 2); } } } @@ -150,9 +150,9 @@ public class OreGen implements IWorldGenerator{ BlockPos randomPos = new BlockPos(event.getPos().getX()+event.getRand().nextInt(16)+8, 0, event.getPos().getZ()+event.getRand().nextInt(16)+8); randomPos = event.getWorld().getTopSolidOrLiquidBlock(randomPos); - if(PosUtil.getMaterial(PosUtil.offset(randomPos, 0, -1, 0), event.getWorld()) == blockBelow){ + if(event.getWorld().getBlockState(randomPos.down()).getMaterial() == blockBelow){ if(plant.canPlaceBlockAt(event.getWorld(), randomPos) && event.getWorld().isAirBlock(randomPos)){ - PosUtil.setBlock(randomPos, event.getWorld(), plant, meta, 2); + event.getWorld().setBlockState(randomPos, plant.getStateFromMeta(meta), 2); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java index 0a2eb6574..9f7ad587e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBooklet.java @@ -22,9 +22,9 @@ import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.player.EntityPlayer; @@ -59,8 +59,9 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing face, float hitX, float hitY, float hitZ){ if(player.isSneaking()){ - Block block = PosUtil.getBlock(pos, world); - ItemStack blockStack = new ItemStack(block, 1, PosUtil.getMetadata(pos, world)); + IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); + ItemStack blockStack = new ItemStack(block, 1, block.getMetaFromState(state)); BookletPage page = BookletUtils.getFirstPageForStack(blockStack); if(page != null){ if(world.isRemote){ @@ -98,9 +99,10 @@ public class ItemBooklet extends ItemBase implements IHudDisplay{ @Override public void displayHud(Minecraft minecraft, EntityPlayer player, ItemStack stack, RayTraceResult posHit, Profiler profiler, ScaledResolution resolution){ if(posHit != null){ - Block block = PosUtil.getBlock(posHit.getBlockPos(), minecraft.theWorld); + IBlockState state = minecraft.theWorld.getBlockState(posHit.getBlockPos()); + Block block = state.getBlock(); if(block != null && !block.isAir(minecraft.theWorld.getBlockState(posHit.getBlockPos()), minecraft.theWorld, posHit.getBlockPos())){ - ItemStack blockStack = new ItemStack(block, 1, PosUtil.getMetadata(posHit.getBlockPos(), minecraft.theWorld)); + ItemStack blockStack = new ItemStack(block, 1, block.getMetaFromState(state)); int height = resolution.getScaledHeight()/5*3; if(player.isSneaking()){ BookletPage page = BookletUtils.getFirstPageForStack(blockStack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java index c986bd12c..027cdfade 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemChestToCrateUpgrade.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityGiantChest; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockChest; import net.minecraft.entity.player.EntityPlayer; @@ -39,7 +38,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ public EnumActionResult onItemUse(ItemStack heldStack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float par8, float par9, float par10){ if(player.isSneaking()){ TileEntity tileHit = world.getTileEntity(pos); - Block block = PosUtil.getBlock(pos, world); + Block block = world.getBlockState(pos).getBlock(); if(block instanceof BlockChest && tileHit instanceof TileEntityChest){ if(!world.isRemote){ TileEntityChest chest = (TileEntityChest)tileHit; @@ -58,7 +57,7 @@ public class ItemChestToCrateUpgrade extends ItemBase{ if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ world.playEvent(2001, pos, Block.getStateId(world.getBlockState(pos))); } - PosUtil.setBlock(pos, world, InitBlocks.blockGiantChest, 0, 2); + world.setBlockState(pos, InitBlocks.blockGiantChest.getDefaultState(), 2); //Copy Items into new Chest TileEntity newTileHit = world.getTileEntity(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index b3279dc37..bf9deedff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -21,7 +21,6 @@ import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -430,7 +429,8 @@ public class ItemDrill extends ItemEnergy{ } //Not defined later because main Block is getting broken below - float mainHardness = PosUtil.getBlock(aPos, world).getBlockHardness(world.getBlockState(aPos), world, aPos); + IBlockState state = world.getBlockState(aPos); + float mainHardness = state.getBlockHardness(world, aPos); //Break Middle Block first int use = this.getEnergyUsePerBlock(stack); @@ -452,7 +452,8 @@ public class ItemDrill extends ItemEnergy{ if(this.getEnergyStored(stack) >= use){ //Only break Blocks around that are (about) as hard or softer BlockPos thePos = new BlockPos(xPos, yPos, zPos); - if(PosUtil.getBlock(thePos, world).getBlockHardness(world.getBlockState(thePos), world, thePos) <= mainHardness+5.0F){ + IBlockState theState = world.getBlockState(thePos); + if(theState.getBlockHardness(world, thePos) <= mainHardness+5.0F){ this.tryHarvestBlock(world, thePos, true, stack, player, use); } } @@ -479,8 +480,8 @@ public class ItemDrill extends ItemEnergy{ * @param use The Energy that should be extracted per Block */ private boolean tryHarvestBlock(World world, BlockPos pos, boolean isExtra, ItemStack stack, EntityPlayer player, int use){ - Block block = PosUtil.getBlock(pos, world); IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); float hardness = block.getBlockHardness(state, world, pos); boolean canHarvest = (ForgeHooks.canHarvestBlock(block, player, world, pos) || this.canHarvestBlock(state, stack)) && (!isExtra || this.getStrVsBlock(stack, world.getBlockState(pos)) > 1.0F); if(hardness >= 0.0F && (!isExtra || (canHarvest && !block.hasTileEntity(world.getBlockState(pos))))){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java index 58f4c0559..9f96b6507 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemGrowthRing.java @@ -11,11 +11,11 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.BlockGrass; import net.minecraft.block.IGrowable; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -57,7 +57,7 @@ public class ItemGrowthRing extends ItemEnergy{ int theY = MathHelper.floor_double(player.posY+y); int theZ = MathHelper.floor_double(player.posZ+z); BlockPos posInQuestion = new BlockPos(theX, theY, theZ); - Block theBlock = PosUtil.getBlock(posInQuestion, world); + Block theBlock = world.getBlockState(posInQuestion).getBlock(); if((theBlock instanceof IGrowable || theBlock instanceof IPlantable) && !(theBlock instanceof BlockGrass)){ blocks.add(posInQuestion); } @@ -71,11 +71,14 @@ public class ItemGrowthRing extends ItemEnergy{ if(this.getEnergyStored(stack) >= energyUse){ BlockPos pos = blocks.get(Util.RANDOM.nextInt(blocks.size())); - int metaBefore = PosUtil.getMetadata(pos, world); - PosUtil.getBlock(pos, world).updateTick(world, pos, world.getBlockState(pos), Util.RANDOM); + IBlockState state = world.getBlockState(pos); + Block block = state.getBlock(); + int metaBefore = block.getMetaFromState(state); + block.updateTick(world, pos, world.getBlockState(pos), Util.RANDOM); //Show Particles if Metadata changed - if(PosUtil.getMetadata(pos, world) != metaBefore){ + IBlockState newState = world.getBlockState(pos); + if(newState.getBlock().getMetaFromState(newState) != metaBefore){ world.playEvent(2005, pos, 0); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java index eed67428c..46c506985 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemLeafBlower.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.api.misc.IDisplayStandItem; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockBush; import net.minecraft.entity.EntityLivingBase; @@ -108,7 +107,7 @@ public class ItemLeafBlower extends ItemBase implements IDisplayStandItem{ for(int reachY = (this.isAdvanced ? -rangeSides : -rangeUp); reachY < (this.isAdvanced ? rangeSides : rangeUp)+1; reachY++){ //The current Block to break BlockPos pos = new BlockPos(x+reachX, y+reachY, z+reachZ); - Block block = PosUtil.getBlock(pos, world); + Block block = world.getBlockState(pos).getBlock(); if(block != null && (block instanceof BlockBush || (this.isAdvanced && block.isLeaves(world.getBlockState(pos), world, pos)))){ breakPositions.add(pos); } @@ -120,7 +119,7 @@ public class ItemLeafBlower extends ItemBase implements IDisplayStandItem{ Collections.shuffle(breakPositions); BlockPos theCoord = breakPositions.get(0); - Block theBlock = PosUtil.getBlock(theCoord, world); + Block theBlock = world.getBlockState(theCoord).getBlock(); ArrayList drops = new ArrayList(); //Gets all of the Drops the Block should have diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java index 204db232e..ec63fce58 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterBowl.java @@ -12,8 +12,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.base.ItemBase; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; -import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.BlockLiquid; import net.minecraft.block.material.Material; @@ -97,7 +95,7 @@ public class ItemWaterBowl extends ItemBase{ return new ActionResult(EnumActionResult.FAIL, stack); } else{ - BlockPos pos1 = PosUtil.getBlock(pos, world).isReplaceable(world, pos) && trace.sideHit == EnumFacing.UP ? pos : pos.offset(trace.sideHit); + BlockPos pos1 = world.getBlockState(pos).getBlock().isReplaceable(world, pos) && trace.sideHit == EnumFacing.UP ? pos : pos.offset(trace.sideHit); if(!player.canPlayerEdit(pos1, trace.sideHit, stack)){ return new ActionResult(EnumActionResult.FAIL, stack); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java index 5ab516fac..21f0fb2a5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWaterRemovalRing.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.items; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -52,7 +51,7 @@ public class ItemWaterRemovalRing extends ItemEnergy{ //Remove Water BlockPos pos = new BlockPos(theX, theY, theZ); - Block block = PosUtil.getBlock(pos, world); + Block block = world.getBlockState(pos).getBlock(); if((block == Blocks.WATER || block == Blocks.FLOWING_WATER) && this.getEnergyStored(stack) >= energyUse){ world.setBlockToAir(pos); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java index fa1196bd2..5f63cf9e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensColor.java @@ -15,7 +15,6 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -53,10 +52,12 @@ public class LensColor extends Lens{ public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ if(hitBlock != null){ if(tile.getEnergy() >= ENERGY_USE){ - int meta = PosUtil.getMetadata(hitBlock, tile.getWorldObject()); - ItemStack returnStack = this.tryConvert(new ItemStack(PosUtil.getBlock(hitBlock, tile.getWorldObject()), 1, meta), hitState, hitBlock, tile); + IBlockState state = tile.getWorldObject().getBlockState(hitBlock); + Block block = state.getBlock(); + int meta = block.getMetaFromState(state); + ItemStack returnStack = this.tryConvert(new ItemStack(block, 1, meta), hitState, hitBlock, tile); if(returnStack != null && returnStack.getItem() instanceof ItemBlock){ - PosUtil.setBlock(hitBlock, tile.getWorldObject(), Block.getBlockFromItem(returnStack.getItem()), returnStack.getItemDamage(), 2); + tile.getWorldObject().setBlockState(hitBlock, Block.getBlockFromItem(returnStack.getItem()).getStateFromMeta(returnStack.getItemDamage()), 2); tile.extractEnergy(ENERGY_USE); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java index 5a948fecb..0fd6f8e0f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDeath.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.misc.DamageSources; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.math.AxisAlignedBB; @@ -35,7 +34,7 @@ public class LensDeath extends Lens{ } } - return hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock); + return hitBlock != null && !hitState.getBlock().isAir(hitState, tile.getWorldObject(), hitBlock); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java index 017291cd9..125e802fa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDetonation.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; @@ -20,7 +19,7 @@ public class LensDetonation extends Lens{ @Override public boolean invoke(IBlockState state, BlockPos hitBlock, IAtomicReconstructor tile){ - if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(state, tile.getWorldObject(), hitBlock)){ + if(hitBlock != null && !state.getBlock().isAir(state, tile.getWorldObject(), hitBlock)){ int use = 250000; if(tile.getEnergy() >= use){ tile.getWorldObject().newExplosion(null, hitBlock.getX()+0.5, hitBlock.getY()+0.5, hitBlock.getZ()+0.5, 10F, true, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java index ba55e8126..b98f212e4 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/lens/LensDisruption.java @@ -13,7 +13,6 @@ package de.ellpeck.actuallyadditions.mod.items.lens; import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.util.ModUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -31,7 +30,7 @@ public class LensDisruption extends Lens{ @Override public boolean invoke(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ int energyUse = 150000; - if(tile.getEnergy() >= energyUse && hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock)){ + if(tile.getEnergy() >= energyUse && hitBlock != null && !hitState.getBlock().isAir(hitState, tile.getWorldObject(), hitBlock)){ int range = 2; ArrayList items = (ArrayList)tile.getWorldObject().getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(hitBlock.getX()-range, hitBlock.getY()-range, hitBlock.getZ()-range, hitBlock.getX()+range, hitBlock.getY()+range, hitBlock.getZ()+range)); for(EntityItem item : items){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java index 05da083e1..7b0ba117d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/LaserRelayConnectionHandler.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.misc; import de.ellpeck.actuallyadditions.mod.data.WorldData; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import io.netty.util.internal.ConcurrentSet; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -91,8 +90,8 @@ public final class LaserRelayConnectionHandler{ * (Puts it into the correct network!) */ public static boolean addConnection(BlockPos firstRelay, BlockPos secondRelay, World world){ - int distance = (int)PosUtil.toVec(firstRelay).distanceTo(PosUtil.toVec(secondRelay)); - if(distance > TileEntityLaserRelay.MAX_DISTANCE || PosUtil.areSamePos(firstRelay, secondRelay)){ + int distanceSq = (int)firstRelay.distanceSq(secondRelay); + if(distanceSq > TileEntityLaserRelay.MAX_DISTANCE*TileEntityLaserRelay.MAX_DISTANCE || firstRelay.equals(secondRelay)){ return false; } @@ -165,7 +164,7 @@ public final class LaserRelayConnectionHandler{ public boolean contains(BlockPos relay){ for(BlockPos position : this.positions){ - if(position != null && PosUtil.areSamePos(position, relay)){ + if(position != null && position.equals(relay)){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java index fd654481c..250cca6b8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/misc/MethodHandler.java @@ -16,7 +16,6 @@ import de.ellpeck.actuallyadditions.api.recipe.CoffeeIngredient; import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.items.lens.LensRecipeHandler; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; @@ -120,7 +119,7 @@ public class MethodHandler implements IMethodHandler{ @Override public boolean invokeConversionLens(IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ - if(hitBlock != null && !PosUtil.getBlock(hitBlock, tile.getWorldObject()).isAir(hitState, tile.getWorldObject(), hitBlock)){ + if(hitBlock != null && !hitState.getBlock().isAir(hitState, tile.getWorldObject(), hitBlock)){ int range = 2; //Converting the Blocks @@ -128,7 +127,7 @@ public class MethodHandler implements IMethodHandler{ for(int reachZ = -range; reachZ < range+1; reachZ++){ for(int reachY = -range; reachY < range+1; reachY++){ BlockPos pos = new BlockPos(hitBlock.getX()+reachX, hitBlock.getY()+reachY, hitBlock.getZ()+reachZ); - List recipes = LensRecipeHandler.getRecipesFor(new ItemStack(PosUtil.getBlock(pos, tile.getWorldObject()), 1, PosUtil.getMetadata(pos, tile.getWorldObject()))); + List recipes = LensRecipeHandler.getRecipesFor(new ItemStack(hitState.getBlock(), 1, hitState.getBlock().getMetaFromState(hitState))); for(LensConversionRecipe recipe : recipes){ if(recipe != null && recipe.type == tile.getLens() && tile.getEnergy() >= recipe.energyUse){ List outputs = recipe.getOutputs(); @@ -138,7 +137,7 @@ public class MethodHandler implements IMethodHandler{ if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ tile.getWorldObject().playEvent(2001, pos, Block.getStateId(tile.getWorldObject().getBlockState(pos))); } - PosUtil.setBlock(pos, tile.getWorldObject(), Block.getBlockFromItem(output.getItem()), output.getItemDamage(), 2); + tile.getWorldObject().setBlockState(pos, Block.getBlockFromItem(output.getItem()).getStateFromMeta(output.getItemDamage()), 2); } else{ EntityItem item = new EntityItem(tile.getWorldObject(), pos.getX()+0.5, pos.getY()+0.5, pos.getZ()+0.5, output.copy()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index dc0c3973e..7475a3451 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -24,6 +24,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.HashMap; +//TODO Make this less hideous public class FuelHandler implements IFuelHandler{ private static final HashMap, Integer> FUEL_LIST = new HashMap, Integer>(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index abbefd460..e42600573 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -19,8 +19,8 @@ import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -99,7 +99,8 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private void doWork(){ if(this.storage.getEnergyStored() >= ENERGY_USE){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); + IBlockState state = this.worldObj.getBlockState(this.pos); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)); //Extract energy for shooting the laser itself too! this.storage.extractEnergy(ENERGY_USE, false); @@ -107,7 +108,7 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple Lens currentLens = this.getLens(); int distance = currentLens.getDistance(); for(int i = 0; i < distance; i++){ - BlockPos hitBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); + BlockPos hitBlock = this.pos.offset(sideToManipulate, i); if(currentLens.invoke(this.worldObj.getBlockState(hitBlock), hitBlock, this)){ shootLaser(this.worldObj, this.getX(), this.getY(), this.getZ(), hitBlock.getX(), hitBlock.getY(), hitBlock.getZ(), currentLens); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java index 95d8d0a3b..9901c4289 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBreaker.java @@ -12,7 +12,6 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; @@ -80,11 +79,12 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ } private void doWork(){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); + IBlockState state = this.worldObj.getBlockState(this.pos); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)); - BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, 0); - Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + BlockPos coordsBlock = this.pos.offset(sideToManipulate, 0); IBlockState stateToBreak = this.worldObj.getBlockState(coordsBlock); + Block blockToBreak = stateToBreak.getBlock(); if(!this.isPlacer && blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(stateToBreak, this.worldObj, coordsBlock) > -1.0F){ List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, stateToBreak, 0); float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); @@ -94,7 +94,7 @@ public class TileEntityBreaker extends TileEntityInventoryBase{ if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ this.worldObj.playEvent(2001, coordsBlock, Block.getStateId(stateToBreak)); } - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + this.worldObj.setBlockToAir(coordsBlock); WorldUtil.addToInventory(this, drops, true, true); this.markDirty(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java index d99148ad7..d95cf68aa 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDirectionalBreaker.java @@ -13,11 +13,11 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockAir; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -82,11 +82,12 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem private void doWork(){ if(this.storage.getEnergyStored() >= ENERGY_USE*RANGE){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); + IBlockState state = this.worldObj.getBlockState(this.pos); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)); for(int i = 0; i < RANGE; i++){ - BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, i); - Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); + BlockPos coordsBlock = this.pos.offset(sideToManipulate, i); + Block blockToBreak = this.worldObj.getBlockState(coordsBlock).getBlock(); if(blockToBreak != null && !(blockToBreak instanceof BlockAir) && blockToBreak.getBlockHardness(this.worldObj.getBlockState(coordsBlock), this.worldObj, this.pos) > -1.0F){ List drops = blockToBreak.getDrops(this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0); float chance = ForgeEventFactory.fireBlockHarvesting(drops, this.worldObj, coordsBlock, this.worldObj.getBlockState(coordsBlock), 0, 1, false, null); @@ -96,7 +97,7 @@ public class TileEntityDirectionalBreaker extends TileEntityInventoryBase implem if(!ConfigBoolValues.LESS_BLOCK_BREAKING_EFFECTS.isEnabled()){ this.worldObj.playEvent(2001, coordsBlock, Block.getStateId(this.worldObj.getBlockState(coordsBlock))); } - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.getPos(), i); + this.worldObj.setBlockToAir(coordsBlock); WorldUtil.addToInventory(this, drops, true, true); this.storage.extractEnergy(ENERGY_USE, false); this.markDirty(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java index c0fc0e9c0..b84b51dbe 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityDropper.java @@ -10,8 +10,8 @@ package de.ellpeck.actuallyadditions.mod.tile; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -67,7 +67,8 @@ public class TileEntityDropper extends TileEntityInventoryBase{ if(this.removeFromInventory(false) != null){ ItemStack stack = this.removeFromInventory(true); stack.stackSize = 1; - WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)), this.worldObj, this.pos, stack); + IBlockState state = this.worldObj.getBlockState(this.pos); + WorldUtil.dropItemAtSide(WorldUtil.getDirectionByPistonRotation(state.getBlock().getMetaFromState(state)), this.worldObj, this.pos, stack); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java index 31708fe00..53b876796 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFishingNet.java @@ -10,11 +10,10 @@ package de.ellpeck.actuallyadditions.mod.tile; - -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; @@ -57,14 +56,14 @@ public class TileEntityFishingNet extends TileEntityBase{ super.updateEntity(); if(!this.worldObj.isRemote){ if(!this.isRedstonePowered){ - if(PosUtil.getMaterial(PosUtil.offset(this.pos, 0, -1, 0), this.worldObj) == Material.WATER){ + if(this.worldObj.getBlockState(this.pos.down()).getMaterial() == Material.WATER){ if(this.timeUntilNextDrop > 0){ this.timeUntilNextDrop--; if(this.timeUntilNextDrop <= 0){ LootContext.Builder builder = new LootContext.Builder((WorldServer)this.worldObj); List fishables = this.worldObj.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING).generateLootForPools(Util.RANDOM, builder.build()); for(ItemStack fishable : fishables){ - TileEntity tile = this.worldObj.getTileEntity(PosUtil.offset(this.pos, 0, 1, 0)); + TileEntity tile = this.worldObj.getTileEntity(this.pos.up()); if(tile != null && tile instanceof IInventory){ ArrayList list = new ArrayList(); list.add(fishable); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java index 4bf35d1c7..4dadcf292 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFluidCollector.java @@ -10,12 +10,11 @@ package de.ellpeck.actuallyadditions.mod.tile; - -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; +import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -63,39 +62,41 @@ public class TileEntityFluidCollector extends TileEntityBase implements net.mine } private void doWork(){ - EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(PosUtil.getMetadata(this.pos, this.worldObj)); - BlockPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, this.pos, 0); + IBlockState state = this.worldObj.getBlockState(this.pos); + Block block = state.getBlock(); + EnumFacing sideToManipulate = WorldUtil.getDirectionByPistonRotation(block.getMetaFromState(state)); + BlockPos coordsBlock = this.pos.offset(sideToManipulate, 0); - Block blockToBreak = PosUtil.getBlock(coordsBlock, this.worldObj); - if(!this.isPlacer && blockToBreak != null && PosUtil.getMetadata(coordsBlock, this.worldObj) == 0 && Util.BUCKET <= this.tank.getCapacity()-this.tank.getFluidAmount()){ + IBlockState stateToBreak = this.worldObj.getBlockState(coordsBlock); + Block blockToBreak = stateToBreak.getBlock(); + if(!this.isPlacer && blockToBreak != null && blockToBreak.getMetaFromState(stateToBreak) == 0 && Util.BUCKET <= this.tank.getCapacity()-this.tank.getFluidAmount()){ if(blockToBreak instanceof IFluidBlock && ((IFluidBlock)blockToBreak).getFluid() != null){ if(this.tank.fillInternal(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), false) >= Util.BUCKET){ this.tank.fillInternal(new FluidStack(((IFluidBlock)blockToBreak).getFluid(), Util.BUCKET), true); - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + this.worldObj.setBlockToAir(coordsBlock); } } else if(blockToBreak == Blocks.LAVA || blockToBreak == Blocks.FLOWING_LAVA){ if(this.tank.fillInternal(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), false) >= Util.BUCKET){ this.tank.fillInternal(new FluidStack(FluidRegistry.LAVA, Util.BUCKET), true); - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + this.worldObj.setBlockToAir(coordsBlock); } } else if(blockToBreak == Blocks.WATER || blockToBreak == Blocks.FLOWING_WATER){ if(this.tank.fillInternal(new FluidStack(FluidRegistry.WATER, Util.BUCKET), false) >= Util.BUCKET){ this.tank.fillInternal(new FluidStack(FluidRegistry.WATER, Util.BUCKET), true); - WorldUtil.breakBlockAtSide(sideToManipulate, this.worldObj, this.pos); + this.worldObj.setBlockToAir(coordsBlock); } } } - else if(this.isPlacer && PosUtil.getBlock(coordsBlock, this.worldObj).isReplaceable(this.worldObj, coordsBlock)){ + else if(this.isPlacer && blockToBreak.isReplaceable(this.worldObj, coordsBlock)){ if(this.tank.getFluidAmount() >= Util.BUCKET){ - Block block = this.tank.getFluid().getFluid().getBlock(); - if(block != null){ + Block fluid = this.tank.getFluid().getFluid().getBlock(); + if(fluid != null){ BlockPos offsetPos = this.pos.offset(sideToManipulate); - Block blockPresent = PosUtil.getBlock(offsetPos, this.worldObj); - boolean placeable = !(blockPresent instanceof BlockLiquid) && !(blockPresent instanceof IFluidBlock) && blockPresent.isReplaceable(this.worldObj, offsetPos); + boolean placeable = !(blockToBreak instanceof BlockLiquid) && !(blockToBreak instanceof IFluidBlock) && blockToBreak.isReplaceable(this.worldObj, offsetPos); if(placeable){ - PosUtil.setBlock(offsetPos, this.worldObj, block, 0, 3); + this.worldObj.setBlockState(offsetPos, fluid.getDefaultState(), 3); this.tank.drainInternal(Util.BUCKET, true); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java index be082c394..dbac070c3 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceDouble.java @@ -12,7 +12,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.nbt.NBTTagCompound; @@ -98,14 +99,16 @@ public class TileEntityFurnaceDouble extends TileEntityInventoryBase implements if(flag != (this.firstSmeltTime > 0 || this.secondSmeltTime > 0)){ this.markDirty(); - int meta = PosUtil.getMetadata(this.pos, this.worldObj); + IBlockState state = this.worldObj.getBlockState(this.pos); + Block block = state.getBlock(); + int meta = block.getMetaFromState(state); if(meta > 3){ if(!this.canSmeltOn(SLOT_INPUT_1, SLOT_OUTPUT_1) && !this.canSmeltOn(SLOT_INPUT_2, SLOT_OUTPUT_2)){ - PosUtil.setMetadata(this.pos, this.worldObj, meta-4, 2); + this.worldObj.setBlockState(this.pos, block.getStateFromMeta(meta-4), 2); } } else{ - PosUtil.setMetadata(this.pos, this.worldObj, meta+4, 2); + this.worldObj.setBlockState(this.pos, block.getStateFromMeta(meta+4), 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java index 0ee78698c..f5825dfed 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityFurnaceSolar.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -80,8 +80,9 @@ public class TileEntityFurnaceSolar extends TileEntityBase implements IEnergyPro public boolean hasBlockAbove(){ for(int y = 1; y <= this.worldObj.getHeight(); y++){ - BlockPos offset = PosUtil.offset(this.pos, 0, y, 0); - if(!PosUtil.getBlock(offset, this.worldObj).isAir(this.worldObj.getBlockState(offset), this.worldObj, offset)){ + BlockPos offset = this.pos.down(y); + IBlockState state = this.worldObj.getBlockState(offset); + if(!state.getBlock().isAir(state, this.worldObj, offset)){ return true; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java index f459950c7..67d5bdf0c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGreenhouseGlass.java @@ -10,12 +10,11 @@ package de.ellpeck.actuallyadditions.mod.tile; - -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.block.BlockGrass; import net.minecraft.block.IGrowable; +import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.IPlantable; @@ -54,10 +53,13 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ if(this.timeUntilNextFert <= 0){ BlockPos blockToFert = this.blockToFertilize(); if(blockToFert != null){ - int metaBefore = PosUtil.getMetadata(blockToFert, this.worldObj); - PosUtil.getBlock(blockToFert, this.worldObj).updateTick(this.worldObj, blockToFert, this.worldObj.getBlockState(blockToFert), Util.RANDOM); + IBlockState state = this.worldObj.getBlockState(blockToFert); + Block block = state.getBlock(); + int metaBefore = block.getMetaFromState(state); + block.updateTick(this.worldObj, blockToFert, this.worldObj.getBlockState(blockToFert), Util.RANDOM); - if(PosUtil.getMetadata(blockToFert, this.worldObj) != metaBefore){ + IBlockState newState = this.worldObj.getBlockState(blockToFert); + if(newState.getBlock().getMetaFromState(newState) != metaBefore){ this.worldObj.playEvent(2005, blockToFert, 0); } } @@ -74,7 +76,7 @@ public class TileEntityGreenhouseGlass extends TileEntityBase{ public BlockPos blockToFertilize(){ for(int i = this.pos.getY()-1; i > 0; i--){ BlockPos offset = new BlockPos(this.pos.getX(), i, this.pos.getZ()); - Block block = PosUtil.getBlock(this.pos, this.worldObj); + Block block = this.worldObj.getBlockState(this.pos).getBlock(); if(block != null && !(this.worldObj.isAirBlock(offset))){ if((block instanceof IGrowable || block instanceof IPlantable) && !(block instanceof BlockGrass)){ return offset; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java index 0c7ebacef..6522ceb99 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityGrinder.java @@ -16,8 +16,9 @@ import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.misc.SoundHandler; import de.ellpeck.actuallyadditions.mod.recipe.CrusherRecipeRegistry; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -145,14 +146,16 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg if(flag != (this.firstCrushTime > 0 || this.secondCrushTime > 0)){ this.markDirty(); - int meta = PosUtil.getMetadata(this.pos, this.worldObj); + IBlockState state = this.worldObj.getBlockState(this.pos); + Block block = state.getBlock(); + int meta = block.getMetaFromState(state); if(meta == 1){ if(!this.canCrushOn(SLOT_INPUT_1, SLOT_OUTPUT_1_1, SLOT_OUTPUT_1_2) && (!this.isDouble || !this.canCrushOn(SLOT_INPUT_2, SLOT_OUTPUT_2_1, SLOT_OUTPUT_2_2))){ - PosUtil.setMetadata(this.pos, this.worldObj, 0, 2); + this.worldObj.setBlockState(this.pos, block.getStateFromMeta(0), 2); } } else{ - PosUtil.setMetadata(this.pos, this.worldObj, 1, 2); + this.worldObj.setBlockState(this.pos, block.getStateFromMeta(1), 2); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java index 1b38efafa..4a3711cee 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityHeatCollector.java @@ -12,11 +12,11 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -55,9 +55,10 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr ArrayList blocksAround = new ArrayList(); if(ENERGY_PRODUCE <= this.storage.getMaxEnergyStored()-this.storage.getEnergyStored()){ for(int i = 1; i <= 5; i++){ - BlockPos coords = WorldUtil.getCoordsFromSide(WorldUtil.getDirectionBySidesInOrder(i), this.pos, 0); - Block block = PosUtil.getBlock(coords, this.worldObj); - if(block != null && block.getMaterial(this.worldObj.getBlockState(coords)) == Material.LAVA && PosUtil.getMetadata(coords, this.worldObj) == 0){ + BlockPos coords = this.pos.offset(WorldUtil.getDirectionBySidesInOrder(i)); + IBlockState state = this.worldObj.getBlockState(coords); + Block block = state.getBlock(); + if(block != null && block.getMaterial(this.worldObj.getBlockState(coords)) == Material.LAVA && block.getMetaFromState(state) == 0){ blocksAround.add(i); } } @@ -68,7 +69,7 @@ public class TileEntityHeatCollector extends TileEntityBase implements IEnergyPr if(Util.RANDOM.nextInt(10000) == 0){ int randomSide = blocksAround.get(Util.RANDOM.nextInt(blocksAround.size())); - WorldUtil.breakBlockAtSide(WorldUtil.getDirectionBySidesInOrder(randomSide), this.worldObj, this.pos); + this.worldObj.setBlockToAir(this.pos.offset(WorldUtil.getDirectionBySidesInOrder(randomSide))); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index c9a6ca733..9b8e2cdd9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -281,7 +281,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt */ public void initVars(){ if(this.sideToPull != -1){ - this.placeToPull = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionBySidesInOrder(this.sideToPull), this.worldObj, this.pos); + this.placeToPull = this.worldObj.getTileEntity(this.pos.offset(WorldUtil.getDirectionBySidesInOrder(this.sideToPull))); if(this.placeToPull instanceof IInventory){ if(this.slotToPullEnd <= 0){ @@ -291,7 +291,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt } if(this.sideToPut != -1){ - this.placeToPut = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionBySidesInOrder(this.sideToPut), this.worldObj, this.pos); + this.placeToPut = this.worldObj.getTileEntity(this.pos.offset(WorldUtil.getDirectionBySidesInOrder(this.sideToPut))); if(this.placeToPut instanceof IInventory){ if(this.slotToPutEnd <= 0){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java index 006b76f21..a3e1cad34 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityItemViewer.java @@ -79,7 +79,7 @@ public class TileEntityItemViewer extends TileEntityInventoryBase{ if(this.worldObj != null){ //Why is that even possible..? for(int i = 0; i <= 5; i++){ EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); + BlockPos pos = this.getPos().offset(side); TileEntity tile = this.worldObj.getTileEntity(pos); if(tile instanceof TileEntityLaserRelayItem){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index 680b3c5e5..8a7deb848 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.items.ItemLaserWrench.WrenchMode; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler.ConnectionPair; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import io.netty.util.internal.ConcurrentSet; import net.minecraft.client.Minecraft; @@ -108,7 +107,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getNetworkFor(this.pos, this.worldObj); if(network != null){ for(ConnectionPair aPair : network.connections){ - if(aPair.contains(this.pos) && PosUtil.areSamePos(this.pos, aPair.positions[0])){ + if(aPair.contains(this.pos) && this.pos.equals(aPair.positions[0])){ AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.isItem ? COLOR_ITEM : COLOR, 1F); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 793d9e183..76faac6cf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -67,7 +67,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements this.receiversAround.clear(); for(EnumFacing side : EnumFacing.values()){ - BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); + BlockPos pos = this.getPos().offset(side); TileEntity tile = this.worldObj.getTileEntity(pos); if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ this.receiversAround.put(side, (IEnergyReceiver)tile); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java index f6e7284bf..fff75745b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItem.java @@ -46,7 +46,7 @@ public class TileEntityLaserRelayItem extends TileEntityLaserRelay{ for(int i = 0; i <= 5; i++){ EnumFacing side = WorldUtil.getDirectionBySidesInOrder(i); - BlockPos pos = WorldUtil.getCoordsFromSide(side, this.getPos(), 0); + BlockPos pos = this.getPos().offset(side); TileEntity tile = this.worldObj.getTileEntity(pos); if(tile != null && !(tile instanceof TileEntityItemViewer)){ IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java index 0914c578d..5a48e48bf 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLavaFactoryController.java @@ -14,8 +14,9 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -63,7 +64,7 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I this.currentWorkTime++; if(this.currentWorkTime >= 200){ this.currentWorkTime = 0; - PosUtil.setBlock(PosUtil.offset(this.pos, 0, 1, 0), this.worldObj, Blocks.LAVA, 0, 2); + this.worldObj.setBlockState(this.pos.up(), Blocks.LAVA.getDefaultState(), 2); this.storage.extractEnergy(ENERGY_USE, false); } } @@ -80,18 +81,20 @@ public class TileEntityLavaFactoryController extends TileEntityBase implements I public int isMultiblock(){ BlockPos thisPos = this.pos; BlockPos[] positions = new BlockPos[]{ - PosUtil.offset(thisPos, 1, 1, 0), - PosUtil.offset(thisPos, -1, 1, 0), - PosUtil.offset(thisPos, 0, 1, 1), - PosUtil.offset(thisPos, 0, 1, -1) + thisPos.add(1, 1, 0), + thisPos.add(-1, 1, 0), + thisPos.add(0, 1, 1), + thisPos.add(0, 1, -1) }; if(WorldUtil.hasBlocksInPlacesGiven(positions, InitBlocks.blockMisc, TheMiscBlocks.LAVA_FACTORY_CASE.ordinal(), this.worldObj)){ - BlockPos pos = PosUtil.offset(thisPos, 0, 1, 0); - if(PosUtil.getBlock(pos, this.worldObj) == Blocks.LAVA || PosUtil.getBlock(pos, this.worldObj) == Blocks.FLOWING_LAVA){ + BlockPos pos = thisPos.up(); + IBlockState state = this.worldObj.getBlockState(pos); + Block block = state.getBlock(); + if(block == Blocks.LAVA || block == Blocks.FLOWING_LAVA){ return HAS_LAVA; } - if(PosUtil.getBlock(pos, this.worldObj) == null || this.worldObj.isAirBlock(pos)){ + if(block == null || this.worldObj.isAirBlock(pos)){ return HAS_AIR; } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java index 5daa65ced..21ec7ba3a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLeafGenerator.java @@ -14,7 +14,6 @@ import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyProvider; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -65,8 +64,8 @@ public class TileEntityLeafGenerator extends TileEntityBase implements IEnergyPr for(int reachX = -RANGE; reachX < RANGE+1; reachX++){ for(int reachZ = -RANGE; reachZ < RANGE+1; reachZ++){ for(int reachY = -RANGE; reachY < RANGE+1; reachY++){ - BlockPos pos = PosUtil.offset(this.pos, reachX, reachY, reachZ); - Block block = PosUtil.getBlock(pos, this.worldObj); + BlockPos pos = this.pos.add(reachX, reachY, reachZ); + Block block = this.worldObj.getBlockState(pos).getBlock(); if(block != null && block.isLeaves(this.worldObj.getBlockState(pos), this.worldObj, pos)){ breakPositions.add(pos); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java index 10372450c..a2bd10001 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityMiner.java @@ -17,7 +17,6 @@ import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; @@ -105,7 +104,7 @@ public class TileEntityMiner extends TileEntityInventoryBase implements IEnergyR IBlockState state = this.worldObj.getBlockState(pos); Block block = state.getBlock(); - int meta = PosUtil.getMetadata(pos, this.worldObj); + int meta = block.getMetaFromState(state); if(!block.isAir(this.worldObj.getBlockState(pos), this.worldObj, pos)){ if(block.getHarvestLevel(this.worldObj.getBlockState(pos)) <= ItemDrill.HARVEST_LEVEL && state.getBlockHardness(this.worldObj, pos) >= 0F && !(block instanceof BlockLiquid) && !(block instanceof IFluidBlock) && this.isMinable(block, meta)){ List drops = block.getDrops(this.worldObj, pos, this.worldObj.getBlockState(pos), 0); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java index d0f7a930d..88035ce51 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomPlacer.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; import net.minecraft.block.Block; @@ -126,7 +125,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements private void doWork(){ if(this.isBreaker){ - Block blockToBreak = PosUtil.getBlock(this.boundPosition, this.worldObj); + Block blockToBreak = this.worldObj.getBlockState(this.boundPosition).getBlock(); if(blockToBreak != null && blockToBreak.getBlockHardness(this.worldObj.getBlockState(this.boundPosition), this.worldObj, this.boundPosition) > -1.0F){ ArrayList drops = new ArrayList(); drops.addAll(blockToBreak.getDrops(this.worldObj, this.boundPosition, this.worldObj.getBlockState(this.boundPosition), 0)); @@ -171,7 +170,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements @Override public boolean isBoundThingInRange(){ - return this.hasBoundPosition() && PosUtil.toVec(this.boundPosition).distanceTo(new Vec3d(this.getPos().getX(), this.getPos().getY(), this.getPos().getZ())) <= this.range; + return this.hasBoundPosition() && this.boundPosition.distanceSq(this.pos) <= this.range*this.range; } @Override @@ -181,7 +180,7 @@ public class TileEntityPhantomPlacer extends TileEntityInventoryBase implements @Override public void setBoundPosition(BlockPos pos){ - this.boundPosition = pos == null ? null : PosUtil.copyPos(pos); + this.boundPosition = pos; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java index 55d0991fd..ad788ee9a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomface.java @@ -14,7 +14,6 @@ import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; @@ -45,7 +44,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP public static int upgradeRange(int defaultRange, World world, BlockPos pos){ int newRange = defaultRange; for(int i = 0; i < 3; i++){ - Block block = PosUtil.getBlock(PosUtil.offset(pos, 0, 1+i, 0), world); + Block block = world.getBlockState(pos.up(1+i)).getBlock(); if(block == InitBlocks.blockPhantomBooster){ newRange = newRange*2; } @@ -106,15 +105,15 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP } protected boolean doesNeedUpdateSend(){ - return this.boundPosition != this.boundPosBefore || (this.boundPosition != null && PosUtil.getBlock(this.boundPosition, this.worldObj) != this.boundBlockBefore) || this.rangeBefore != this.range; + return this.boundPosition != this.boundPosBefore || (this.boundPosition != null && this.worldObj.getBlockState(this.boundPosition).getBlock() != this.boundBlockBefore) || this.rangeBefore != this.range; } protected void onUpdateSent(){ this.rangeBefore = this.range; this.boundPosBefore = this.boundPosition; - this.boundBlockBefore = this.boundPosition == null ? null : PosUtil.getBlock(this.boundPosition, this.worldObj); + this.boundBlockBefore = this.boundPosition == null ? null : this.worldObj.getBlockState(this.boundPosition).getBlock(); - this.worldObj.notifyNeighborsOfStateChange(this.pos, PosUtil.getBlock(this.pos, this.worldObj)); + this.worldObj.notifyNeighborsOfStateChange(this.pos, this.worldObj.getBlockState(this.boundPosition).getBlock()); this.sendUpdate(); this.markDirty(); @@ -158,7 +157,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP @Override public boolean isBoundThingInRange(){ - return this.hasBoundPosition() && PosUtil.toVec(this.boundPosition).distanceTo(PosUtil.toVec(this.getPos())) <= this.range; + return this.hasBoundPosition() && this.boundPosition.distanceSq(this.getPos()) <= this.range*this.range; } @Override @@ -168,7 +167,7 @@ public class TileEntityPhantomface extends TileEntityInventoryBase implements IP @Override public void setBoundPosition(BlockPos pos){ - this.boundPosition = pos == null ? null : PosUtil.copyPos(pos); + this.boundPosition = pos; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java index 155508cf0..88065560c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntitySmileyCloud.java @@ -11,7 +11,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.network.gui.IStringReactor; -import de.ellpeck.actuallyadditions.mod.util.PosUtil; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; @@ -58,15 +59,17 @@ public class TileEntitySmileyCloud extends TileEntityBase implements IStringReac } public void setStatus(boolean pinkAndFluffy){ - int meta = PosUtil.getMetadata(this.pos, this.worldObj); + IBlockState state = this.worldObj.getBlockState(this.pos); + Block block = state.getBlock(); + int meta = block.getMetaFromState(state); if(pinkAndFluffy){ if(meta <= 3){ - PosUtil.setMetadata(this.pos, this.worldObj, meta+4, 2); + this.worldObj.setBlockState(this.pos, block.getStateFromMeta(meta+4), 2); } } else{ if(meta >= 4){ - PosUtil.setMetadata(this.pos, this.worldObj, meta-4, 2); + this.worldObj.setBlockState(this.pos, block.getStateFromMeta(meta-4), 2); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java index 9c4f8b099..54fcb1c52 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/AssetUtil.java @@ -35,20 +35,25 @@ import org.lwjgl.opengl.GL11; public final class AssetUtil{ + @SideOnly(Side.CLIENT) public static final ResourceLocation GUI_INVENTORY_LOCATION = getGuiLocation("guiInventory"); + @SideOnly(Side.CLIENT) public static ResourceLocation getGuiLocation(String file){ return new ResourceLocation(ModUtil.MOD_ID, "textures/gui/"+file+".png"); } + @SideOnly(Side.CLIENT) public static ResourceLocation getBookletGuiLocation(String file){ return new ResourceLocation(ModUtil.MOD_ID, "textures/gui/booklet/"+file+".png"); } + @SideOnly(Side.CLIENT) public static void displayNameString(FontRenderer font, int xSize, int yPositionOfMachineText, String text){ font.drawString(text, xSize/2-font.getStringWidth(text)/2, yPositionOfMachineText, StringUtil.DECIMAL_COLOR_WHITE); } + @SideOnly(Side.CLIENT) public static void displayNameString(FontRenderer font, int xSize, int yPositionOfMachineText, TileEntity tile){ displayNameString(font, xSize, yPositionOfMachineText, tile.getDisplayName().getFormattedText()); } @@ -94,6 +99,7 @@ public final class AssetUtil{ } //Copied from Gui.class and changed + @SideOnly(Side.CLIENT) public static void drawHorizontalGradientRect(int left, int top, int right, int bottom, int startColor, int endColor, float zLevel){ float f = (float)(startColor >> 24 & 255)/255.0F; float f1 = (float)(startColor >> 16 & 255)/255.0F; @@ -122,6 +128,7 @@ public final class AssetUtil{ GlStateManager.enableTexture2D(); } + @SideOnly(Side.CLIENT) public static void renderNameTag(String tag, double x, double y, double z){ FontRenderer fontrenderer = Minecraft.getMinecraft().fontRendererObj; float f = 1.6F; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java deleted file mode 100644 index afe2996af..000000000 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/PosUtil.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * This file ("PosUtil.java") is part of the Actually Additions mod for Minecraft. - * It is created and owned by Ellpeck and distributed - * under the Actually Additions License to be found at - * http://ellpeck.de/actaddlicense - * View the source code at https://github.com/Ellpeck/ActuallyAdditions - * - * © 2015-2016 Ellpeck - */ - -package de.ellpeck.actuallyadditions.mod.util; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.state.IBlockState; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -public final class PosUtil{ - - public static Material getMaterial(BlockPos pos, IBlockAccess world){ - return getBlock(pos, world).getMaterial(world.getBlockState(pos)); - } - - public static Block getBlock(BlockPos pos, IBlockAccess world){ - if(pos != null){ - IBlockState state = world.getBlockState(pos); - if(state != null){ - return state.getBlock(); - } - } - return null; - } - - public static int getMetadata(BlockPos pos, IBlockAccess world){ - Block block = getBlock(pos, world); - return block != null ? block.getMetaFromState(world.getBlockState(pos)) : 0; - } - - public static int getMetadata(IBlockState state){ - Block block = state.getBlock(); - return block != null ? block.getMetaFromState(state) : 0; - } - - public static BlockPos offset(BlockPos pos, int x, int y, int z){ - return new BlockPos(pos.getX()+x, pos.getY()+y, pos.getZ()+z); - } - - public static boolean setBlock(BlockPos pos, World world, Block block, int meta, int flag){ - return world.setBlockState(pos, block.getStateFromMeta(meta), flag); - } - - public static Vec3d toVec(BlockPos pos){ - return new Vec3d(pos.getX(), pos.getY(), pos.getZ()); - } - - public static BlockPos copyPos(BlockPos pos){ - return new BlockPos(pos.getX(), pos.getY(), pos.getZ()); - } - - public static ItemBlock getItemBlock(BlockPos pos, IBlockAccess world){ - Item item = Item.getItemFromBlock(getBlock(pos, world)); - if(item instanceof ItemBlock){ - return (ItemBlock)item; - } - return null; - } - - public static void setMetadata(BlockPos pos, World world, int meta, int flag){ - world.setBlockState(pos, getBlock(pos, world).getStateFromMeta(meta), flag); - } - - public static boolean areSamePos(BlockPos first, BlockPos second){ - return first.getX() == second.getX() && first.getY() == second.getY() && first.getZ() == second.getZ(); - } -} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index 827ddb41f..edd6df90d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -13,6 +13,8 @@ package de.ellpeck.actuallyadditions.mod.util; import net.minecraft.client.gui.FontRenderer; import net.minecraft.util.text.translation.I18n; import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; @@ -37,6 +39,7 @@ public final class StringUtil{ return I18n.translateToLocalFormatted(text, replace); } + @SideOnly(Side.CLIENT) public static void drawSplitString(FontRenderer renderer, String strg, int x, int y, int width, int color, boolean shadow){ List list = renderer.listFormattedStringToWidth(strg, width); for(int i = 0; i < list.size(); i++){ @@ -45,6 +48,7 @@ public final class StringUtil{ } } + @SideOnly(Side.CLIENT) public static String getFluidInfo(FluidTank tank){ return tank.getFluid() == null || tank.getFluid().getFluid() == null ? "0/"+tank.getCapacity()+" mB" : tank.getFluidAmount()+"/"+tank.getCapacity()+" mB "+tank.getFluid().getLocalizedName(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java index 0a4d758f5..39e04a976 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/Util.java @@ -53,14 +53,4 @@ public final class Util{ } return -1; } - - public static int arrayContains(int[] array, int num){ - for(int i = 0; i < array.length; i++){ - if(num == array[i]){ - return i; - } - } - return -1; - } - } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 50f1494df..ac4c13168 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -55,21 +55,9 @@ import java.util.List; public final class WorldUtil{ - public static void breakBlockAtSide(EnumFacing side, World world, BlockPos pos){ - breakBlockAtSide(side, world, pos, 0); - } - - public static void breakBlockAtSide(EnumFacing side, World world, BlockPos pos, int offset){ - world.setBlockToAir(getCoordsFromSide(side, pos, offset)); - } - - public static BlockPos getCoordsFromSide(EnumFacing side, BlockPos pos, int offset){ - return new BlockPos(pos.getX()+side.getFrontOffsetX()*(offset+1), pos.getY()+side.getFrontOffsetY()*(offset+1), pos.getZ()+side.getFrontOffsetZ()*(offset+1)); - } - public static void doEnergyInteraction(TileEntity tile){ for(EnumFacing side : EnumFacing.values()){ - TileEntity otherTile = getTileEntityFromSide(side, tile.getWorld(), tile.getPos()); + TileEntity otherTile = tile.getWorld().getTileEntity(tile.getPos().offset(side)); if(otherTile != null){ IEnergyReceiver handlerTo = null; IEnergyProvider handlerFrom = null; @@ -103,7 +91,7 @@ public final class WorldUtil{ public static void doFluidInteraction(TileEntity tile){ for(EnumFacing side : EnumFacing.values()){ - TileEntity otherTile = getTileEntityFromSide(side, tile.getWorld(), tile.getPos()); + TileEntity otherTile = tile.getWorld().getTileEntity(tile.getPos().offset(side)); if(otherTile != null){ for(int i = 0; i < 2; i++){ //Push and pull with old fluid system @@ -137,11 +125,6 @@ public final class WorldUtil{ } } - public static TileEntity getTileEntityFromSide(EnumFacing side, World world, BlockPos pos){ - BlockPos c = getCoordsFromSide(side, pos, 0); - return world.getTileEntity(c); - } - /** * Checks if a given Block with a given Meta is present in given Positions * @@ -153,7 +136,8 @@ public final class WorldUtil{ */ public static boolean hasBlocksInPlacesGiven(BlockPos[] positions, Block block, int meta, World world){ for(BlockPos pos : positions){ - if(!(PosUtil.getBlock(pos, world) == block && PosUtil.getMetadata(pos, world) == meta)){ + IBlockState state = world.getBlockState(pos); + if(!(state.getBlock() == block && block.getMetaFromState(state) == meta)){ return false; } } @@ -163,7 +147,8 @@ public final class WorldUtil{ public static ItemStack useItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ if(world instanceof WorldServer && stack != null && stack.getItem() != null){ BlockPos offsetPos = pos.offset(side); - Block block = PosUtil.getBlock(offsetPos, world); + IBlockState state = world.getBlockState(offsetPos); + Block block = state.getBlock(); boolean replaceable = block.isReplaceable(world, offsetPos); //Fluids @@ -177,7 +162,7 @@ public final class WorldUtil{ } if(fluid != null && fluid.amount >= Util.BUCKET && fluid.getFluid().getBlock() != null && fluid.getFluid().getBlock().canPlaceBlockAt(world, offsetPos)){ - if(PosUtil.setBlock(offsetPos, world, fluid.getFluid().getBlock(), 0, 2)){ + if(world.setBlockState(offsetPos, fluid.getFluid().getBlock().getDefaultState(), 2)){ return stack.getItem().getContainerItem(stack); } } @@ -185,7 +170,7 @@ public final class WorldUtil{ //Redstone if(replaceable && stack.getItem() == Items.REDSTONE){ - PosUtil.setBlock(offsetPos, world, Blocks.REDSTONE_WIRE, 0, 2); + world.setBlockState(offsetPos, Blocks.REDSTONE_WIRE.getDefaultState(), 2); stack.stackSize--; return stack; } @@ -216,7 +201,7 @@ public final class WorldUtil{ } public static void dropItemAtSide(EnumFacing side, World world, BlockPos pos, ItemStack stack){ - BlockPos coords = getCoordsFromSide(side, pos, 0); + BlockPos coords = pos.offset(side); EntityItem item = new EntityItem(world, coords.getX()+0.5, coords.getY()+0.5, coords.getZ()+0.5, stack); item.motionX = 0; item.motionY = 0; @@ -247,10 +232,10 @@ public final class WorldUtil{ public static ArrayList getMaterialsAround(World world, BlockPos pos){ ArrayList blocks = new ArrayList(); - blocks.add(PosUtil.getMaterial(pos.offset(EnumFacing.NORTH), world)); - blocks.add(PosUtil.getMaterial(pos.offset(EnumFacing.EAST), world)); - blocks.add(PosUtil.getMaterial(pos.offset(EnumFacing.SOUTH), world)); - blocks.add(PosUtil.getMaterial(pos.offset(EnumFacing.WEST), world)); + blocks.add(world.getBlockState(pos.offset(EnumFacing.NORTH)).getMaterial()); + blocks.add(world.getBlockState(pos.offset(EnumFacing.EAST)).getMaterial()); + blocks.add(world.getBlockState(pos.offset(EnumFacing.SOUTH)).getMaterial()); + blocks.add(world.getBlockState(pos.offset(EnumFacing.WEST)).getMaterial()); return blocks; } @@ -262,6 +247,7 @@ public final class WorldUtil{ return addToInventory(inventory, 0, inventory.getSizeInventory(), stacks, side, actuallyDo, shouldAlwaysWork); } + //TODO This is disgusting and has to be updated to the capability system /** * Add an ArrayList of ItemStacks to an Array of slots * From 5c114e388081dd5666c3b8fed71ae6ed34469d0a Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 4 Jul 2016 20:23:53 +0200 Subject: [PATCH 321/322] Made fuel less hideous codewise --- .../mod/recipe/FuelHandler.java | 48 +++++++++---------- .../mod/tile/TileEntityBase.java | 1 - 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index 7475a3451..e96a11372 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -20,56 +20,54 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.IFuelHandler; import net.minecraftforge.fml.common.registry.GameRegistry; -import org.apache.commons.lang3.tuple.Pair; -import java.util.HashMap; +import java.util.ArrayList; +import java.util.List; -//TODO Make this less hideous public class FuelHandler implements IFuelHandler{ - private static final HashMap, Integer> FUEL_LIST = new HashMap, Integer>(); + private static final List FUEL_LIST = new ArrayList(); public static void init(){ ModUtil.LOGGER.info("Initializing Fuelstuffs..."); GameRegistry.registerFuelHandler(new FuelHandler()); - setFuelValues(); - } - public static void setFuelValues(){ addFuel(InitItems.itemMisc, TheMiscItems.TINY_CHAR.ordinal(), 200); addFuel(InitItems.itemMisc, TheMiscItems.TINY_COAL.ordinal(), 200); addFuel(InitBlocks.blockMisc, TheMiscBlocks.CHARCOAL_BLOCK.ordinal(), 16000); addFuel(InitItems.itemMisc, TheMiscItems.BIOCOAL.ordinal(), 180); } - private static void addFuel(Item item, int metadata, int value){ - FUEL_LIST.put(Pair.of(item, metadata), value); + private static void addFuel(Item item, int meta, int value){ + FUEL_LIST.add(new Fuel(new ItemStack(item, meta), value)); } - private static void addFuel(Block block, int metadata, int value){ - addFuel(Item.getItemFromBlock(block), metadata, value); + private static void addFuel(Block block, int meta, int value){ + addFuel(Item.getItemFromBlock(block), meta, value); } - private static int getFuelValue(ItemStack stack){ - if(stack != null && stack.getItem() != null){ - Pair pair = Pair.of(stack.getItem(), stack.getItemDamage()); - - if(FUEL_LIST.containsKey(pair)){ - return FUEL_LIST.get(pair); - } - else{ - pair = Pair.of(stack.getItem(), 0); - if(FUEL_LIST.containsKey(pair)){ - return FUEL_LIST.get(pair); + @Override + public int getBurnTime(ItemStack stack){ + if(stack != null){ + for(Fuel fuel : FUEL_LIST){ + if(stack.isItemEqual(fuel.fuel)){ + return fuel.burnTime; } } } return 0; } - @Override - public int getBurnTime(ItemStack fuel){ - return getFuelValue(fuel); + private static class Fuel{ + + public ItemStack fuel; + public int burnTime; + + public Fuel(ItemStack fuel, int burnTime){ + this.fuel = fuel; + this.burnTime = burnTime; + } + } } \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 6250ad729..fe28f4844 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -50,7 +50,6 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ this.name = name; } - //TODO Change for next major update to use the name variable automatically public static void init(){ ModUtil.LOGGER.info("Registering TileEntities..."); From 09fbe46c37436815bed03c071ddd5e8591e612ca Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Mon, 4 Jul 2016 22:18:58 +0200 Subject: [PATCH 322/322] [insert swear word here] --- .../de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java index e96a11372..8f8e2257a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/recipe/FuelHandler.java @@ -40,7 +40,7 @@ public class FuelHandler implements IFuelHandler{ } private static void addFuel(Item item, int meta, int value){ - FUEL_LIST.add(new Fuel(new ItemStack(item, meta), value)); + FUEL_LIST.add(new Fuel(new ItemStack(item, 1, meta), value)); } private static void addFuel(Block block, int meta, int value){

    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

    eh9dKi?cJm&V+ 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

    MWdlI4kDPUT#rLF^hbi{u&OHU)3gQ zLAI>AJQskWInlf;C1xcCzaPrrs8FkmozN`Aeu++2Mq|6Q%xa%3NeQ-TMV}N0t1N#> zZoCLp{%VU?LoHb9W2obnb6_5>J;1PMI5y`D@&=WZWJOfb!nElzg5zBCLe@`O8lr#( ze)h2IkJ_%9dGKl`!6Q?moE{*%SV@$?#In;pA|Sjrr%3x#E-KNn_|E#mrCZ_L^-1Cc zVRR^w`;E&~HJG8@mC0ZJu|ogtgss@{ijLFz7)IfziP`OfPm3|MKrQIivDNM7?iyXo z8P&y=JR4SsyjfFTcUDKy38Q~}W>8G8_^<$sD{_E$Nyb_0i6D`(yTCG;f#t4E4i}_v zHI%uhsc*L>#fGKa!z)JVTUV{3hCqvHx?RQ|6|=v7@Ejpxf*>ur`QWnaJY>`c-139b zgQR>mWD8(d5H2c~6`1HOlYGNYi9N|g^|{!?)0iCWAumt}!*!f?)# z{aUe8xrt>9I7-k3hj$A{U}D))Fo>-~w3Za)X$#26e|Y67mBZ=h;wALGeQO;&jFO|IioCC4 zo#)|BWOyD^dln`d);F`vOuMV;rLX=F|B3kBXHrjpy4H@KO~@|4SiWGlFvou`SAC{r zY--{O;jM{a_9oDI_z;V9LoCaB1_p3h*4NeyW9Q*d-bsF-x6D&yr#~&h6~T}3cAvG; zxt_U}6jN%e_)o`HPn<=80L>kcn^A4pIq5ZWn*5Rf#4_3{524588JG5^JmY}_Lg}7v zM_9*}tfyJV5B2&fosNzU$q9t!iZ7{(4M|N1K;}_e+nmbF$NTe>E06vAhWgxiR`q?a zv}9l1zX8*TKZ)sg=8Q1u&im549!;WOf_LDVEI~{^WaAhspEyf1JrR0T{lxiija(xl56gOqt_;{xZWhYQLIBo3d?qty z?Xl?&D{}&kR!NSD@rGp>s}LvAKGr9?jc>JUPKo~oay-P770zE_x+r;9e0x~%Z|jFd zl*}yCsKnE?;}w~WpHp_UN)m_Fo#75j!LsRoRJ(JlsjG{L#>KxW3=e;Xk9x_lDA7xz zZ@)y;)29&VY4D8O^ssB%_>k;NHc$xwqA+UcePWq7no1Iz3c)DGRtln*4P9r|Y51+Y z^Rp-H*<{ySnuaP3ohiP8uGDjGg0;Is5EWg;C+=M4HVFZpzD*uxJTvarEGrco+C-Hk za`=g{QtirMmOvq2H_|5Aoh4LSj4ga|)68OQ7C)0Xr z9<=-%N}0lw4UtN|r(TgLtJ^-hwc>ugcU{hgbyobfb&?~?A1oeZ1)aaV81_MA|C66R zp1WNMI67ex0aJy8BUu|(AAQ>`|J>xi^EGNM6{Dc#7PKP)HUU4hQ8)c;hf=*_Fai)* z)I!S=v6_2(Ro_z3a?@`$tcN-=x|pnQ*3JsL4D#QKz>L=VAT%z8QRo*Zvzja=x<(5? zYX;GVmR18FWKNlb@LUp0P)V1WAXYSrgAAS%nLRxRvRdGu?)*ZTQQ^pggh$W4ILeJd zwGcqRUwf_SaT`$Ss_%KYjwgy=L;#EWCyBiWa%5Frd&E=RXfb4v-6hYa$}x&YcB+tTyRsyMZP_Ho*?)f+9nb5uU*0ppZ-8fcwhs@#FMuJoFah zuj5t0{fzJ6-tk{n(MiFkKv`+lbH;nh@4tR-5*PXYc0@4hP;4Ux%lESF>S#0S?=d?i{+?Jp!e=x9r2gkElyTbL>+ZP0MojE!~ zC}Xzy4zVCZDaW%~@s@Yh|NZwzC`Q^J9&z2x*b~|FqlZX>xanFmwXy$)r(>BDsVupa zvEyro7VWLJc& z_QVrE*yJ88S~)L~My4aTXs81AIk z=mK|IO=we|>IplT(y~w;ht?0Gi1d~__b&%Y{)<)cLlRA3I%vr>Fuo=;do_SJJZfT! zmyCo&_K(q#Ti>@0w=tq(J!VD?V;u=}bo4_Q4=WvA7Cr&NkVAupw0G%EgLiO+pl|ST z<3B;4XT)|MfxrO<+(*anUI+dwRv4^fRt~(-?I^1B+gQ3>{aHD)W=CCAZ9lK}XR}a? z*P}NjqEbw&#Nh^~eNwQf)C9?2X75j6z&_f;1*|=Y`_=e_RRaF%S<`I~4Cn*%qk-t& zs2cC!4Ojf`1ggpqMZ`1_a}K9LysarHZwn;EVT2E)f5}NPUZDU3973ISpSf%)S%~Jf zxfaX^5l7fU9st5b3(Lg^O9^W9{29Lz2Q>m5Z7qG`Sl)G zI?(Fyn6ExtXjIC_{9j+kl4t9_o$DB?-X5G3Tv0WsZ{1N0wjMGn*e}VjOgg%9MOJkP+A7giXwp!lO7|Pl3Zck|5cmqr0Z*a8&#bf)rt|W z;9^+X)g?YInVSAhks~F#EUKKevyM0Fo^Jf@EZ2kIOFi_OIW|LmdQ=p}C3DCS%_@;NY}%jW^=;2H9Ed-tqpn zNXP*+w{C%HRI@HnpolU{)y9DZ^ZlfC$mwxeo-O%4O`c`a$Y7$w6s!i6Ag^!s1M8H$ zFN+f(JaGGF^l&)nEx$%>{;^STZ8Ib!@qMFLconX7NU-)CA={R~xfi>is>uELPTxaW zbop;~)@yx+M}HkQCw8CT^nL!Zl)wIFGXaoNU?6N-0wG=V_TM5%5R)8Nf(CEXzS zhj;aPCdzO)am(wMUZQvWv^mD@-ksW3*9u|-rV>IxZ)oqPcNp;odE+zxgJ>$@@p) zjWc@CV>gKO)hjnwjotk=nXW$#qHmx&WGHgH?>GcwehhYyP!UL1Uhq=QuF%Re z$bYS^a_VPgyK;l*13p#TF`hx-E+6@V7s{7-`cNH|e+9txl_vH1)|+J^iQ6`~dkO{> zF2SL^H;@fFXUWadWeQdCaZ?!FSl{3@axbaCz4J!U><+dLfPJYzYCT=rZCY*SyQ>c4 zt4gEFSgHq~wkjQ~#}BA*OR6@Ws@%^g5tNvfVFmZ93=GJI`XfY+xleW2STjyo?|Y7t z)=vhexNOPs$T{-+*EDnvq)>W<7?3Z6Vc7&u)|vzp*wBRcG|L`lF~^G zM7cLP1ojC#swj^!-K`)TftL#aNc|Mq6wen9HLcx<8entF9eoe)gaoE!BicL)QT=|( z;{yLWaWoJ=RUQC%-@7{)biI6dO29fk2joZ`;=dZcA`m@AWZ@YJJ$$zeYqIb7vWvxYfgKH$>^Kn#djN36Wyzd2;_a1qQD4z#LAy*edNfb38)qM5`yX?(|>d?mz?-XkrP zE?7qi|1{Tm7TP~B@Ouc=Go6Jaq$>^48{-dZx(Z#z={3Z3!SsWTPs+Rwr8QSEvNt+( zONtZcuUa)YIN0B)zBGTqLp(dmj!ulKrq{r$Y}fP1`d-ngYmJwSOXAzNZvh*Z*VnFt zT&BcxtUFT+3xmG<9*skm&eb6V*Qi8=0!rG4`o_l8NUdd2WeKj}g;{+;0HHO@ONncF zflYtKW3ExJUUxb)Tv%Z)rydGMzj<@mllEr2=9A^-sGEkeGWJOeuYP)dsG3t#uKkCo zdOkwI&pTD~{HUFgd=P<%awvx=%>1$4+_CD!+}ylXrcsHv*ci1V<*3Ta8VNEmE>Rp#e;tRb%bXlvc0d*Gh*i!g06nE7^zIMYX0^tm?q?d5BY_2#VS`qPc;eZc+lN z6SM9sVrS_gizuIts=t^W@P1y~)Er|mlt=U_2jS^Zex=~#O3X7i`z->wL3^8L>+loZ z9Q6`AXPUaatH6AS(0LBYAJ{|PNPb^t_>y6vRneT7ag;~S%f?UR6#`hSzM+QBV8ska zl;r8S>&-H`?8biLrGmIno7%@Opdmaxknsi)gkJd=`T~K_713VN04xA=8B=r;nljlQ zG`>(yIK@#fAg_7Sz^whsyFvFCz=#Te5Zm5}W zQa&uEtXO#F{PJvn!fCshW4m0|#GT<*6<$TGaq4w92PgN7JmS;C8k@Z5Vf%h2LSmFge+?hfh3qmMTe+kAiZD9sz?+G zR;t5jptbLkksMJvh=jx-!bZIcYypd;mtl!G;BIV4Bni%ctuz#*t)N#5d$}fX(q-+j zA#{k%yzZ$F=m8){ib`efov*~e0f`{wf%{47;`+ z7bSX-%>HW_WSrT8bb3eOP_Q3x)>mSS&gOcDYS4W0LBY;IwlGQ7=Hly*TKj9`=ErfN zy|e?zoCxZG$nWfSL&5>5djC*(bt=|xw!3tX5(}G6qd!dt6URD z-f_KYv2dlbY6YaI-S~OZ;v=?gG}8g!?I16Rs%*PlIpQK!*Z8)Y_~}nsY01>FQScn` zeQ3S^AOBWj4%A@LP_^b9ZQd-*dH`*y&H7+>P|G+pMkW~nK(b3*bi)Rx~s zEwmeRHv;?;GNVi~fMxIO?`Os(g!iQhIz{4`mB|aXo;B{phA^QIn43@MY5t z1yI6sl_;q$b8P(kYTd6`?;Yngh3T*6-rwcV-O8SNAVG%jToOWUlOM8EM?RY8I7P8q zc(&-#9P2jdML5TwQO^czKkjMMW+81d{4&AJEqk+?-OiqcL@14}!)|a~{zOi<30`in z5~^$9MawV;NLi7EldC#Xt>V4L2`6^L)C>$*XJ>V|mxTi^0lSO-x?fX&yS3x&brfOu zqe>LKe7~lnwvy7)PZ8ZMA)aEYffqZ0qa5Ny$?qV!iN}tCkC=CBvNTh^CXd8zm;JtO zD@ob;+zrCYORCF?iVa4x|B{#n|NJzOL(DHcB-x@Q+1tA_hW@v05hA(eGO0TRI}7I5 z>7f>B5+Nc8!UK3UWP5$}qO%Pk$=dad%W>eCo{M>eF>{-iEEH!UQ4ca*C5dP29O)J= zk7p+Tsrn2u4LHgH0e6xx$YjhPcR?U>LLOFur;0!A%|iexGhmRk(Ul|Ck8JXH(F z!S+xQ6+D#jYLe|v1>ydzP2(USk3VvBj|qh-N0e|uwKeWr*27o4|e44?lVA5tX5%KQ}F>XAvcC_wnDlkmXBp|@6+?y>)CZ6mF*3zxFJW0;#B`qv8NQP^WvH$C+KYYKg@65dU3OB2;WTzjSf4`Vpk2+70GB zFtgzy$F>=*mrS&4bRBQMofCQ=Ujk-LQ}ws(=(%kj+wTqq!@~;fZU}bGAT~sA=zYuj z;(D-|M^g8n`M-#{k8hQ)S6EF7-aqb1)PmRK|M9=IgjQ5>K& zwNOa=)@A8d#kt)p7eyMCADM*FNvHssFk;+Bi!9zH>BRjKs7{AZXQ_b52dHbKn8F$P zpC?f(WcUw)yO=tKLa)Oy-iBc+e-S!sB&E=H(e**TUUs0{i)vMRK)%_>n=ilnB60Rb zdELkS8It*R-VBEoh@AZW8zZKZp@j8`i@iTIdU}ESksWWogHLmF5WJ* z${%5iHbO!c=R^ft<#SeD)8e@b3<@=jsIIR5-V{o)A*d-M_`{f2`F{@1y&t+wrcoHH zVdc*kG=T%T&5o@X+Ra;CDb@p@d`o@DwzPx-GRkD))qhXov62Ik=dcn$9$+^11<@>` zDTMg5$^)d`U1+;Sp?(RWem16GWEJ|&*y8Vu@4GT8CVSuyPEE08|0+a&=SCpDxQ()M=`tw^w z(X-BOHu&1jdhv*WmUbN1(dH`b5j6<}?zV|&g}WG%WgUhDY8V`g0WD1uFbFJ(j@C4L z*CfRMNunBmkH6PA$9@3{MMRavAk5=yfjpTATI8?J%GTCV)rw$Fkf}pXZIubl!^Jl8 z=yeLlgEvEeSH!d*kn{FeLu0(s3#%bPSG3uWjh|#baOByiWE6x9sHj~RjSOwx_4R?EMRsNG0H+`>)5sa9)6E^P`mSp}dt{G3xVbDEDP$3LX}y$}Gmv ziUUd0gEVRb@C4GOy``~$YTU32343a1@=*!?w^u)N=QJN)b}1cUA07T3soV4kqKYRe z538gXCaF-Nl>BGm{rvd=cU(C1mj3$XT&V3Zx!25gXfR_c+FYcQ`DkT9mDG~wl-T0n z8xYy&6kL^##V7-Z7Xyi4c*rDm6SFgxgFJc%u%!n2O@E~wQfWpd@!^eUTNN?Cv~P<~ zoj>#CyYR+Bv z1aOAh(pqYHDGEWIqDPM?09=E0)w#WZJkWSLNUV)VHlqWW({lY*{vpCOR}xMqtMX=o zDHYL>SNQ!KN3~9$Xjm!c7OL<()HHuJjYkxd%#238PL~2#WxzEe1Aw!XeyFe(&VC4i zN(9bGnS2{JQ&9d{g~`c$35#URfDe`zgZVW80jQw`L|TRCas$uhx$7}vS$*Wn!$nVD zqGoqxfmi@Lp1G5_f8pz{U4%l%psUqKCX^kc284e@9lA+|4CgX#P>i9Qhhy|RmCzj$ z*Pw4j-8S_uMD6z*gX(#s+hF_^)z6BFQZ&@7C=oel!gJ`JhEVuOx4`CtW)tDsB_=8^ z=);<5FX^4#DfJ`EvKQQtY%dRiC)5qq`Qa!kVa@4+j5_iMqHFt!KfbPO4dVv=`Xyl7 zwjkLkfQKJzJL2WAlX&d{N=`~rKA5lAR9mA7*kQY*dA>{uFjXxtxVO9eP4gJje)Z#I z>cBA&7TuB0m)Uq$H(6J%vGwl2Bd3;DhydXn?Aag)d-irUu|j&R3$1I9d9Czs zS23!;(<$h1tJa>uYUG0ppF`f^9d@#Ii%y8&*2s`?%_!!r*6=IxqQhy1WZk6+AR#v$ zYMTD42(*eKhgzH&Y5;efKH3Qj^dW=M8u|f_tTz!4K0h{y{HP}@%oQ-Jw}M|DP;|rL z2|88C^9YhV1~PphO+&iGcsKc!V+hU_N(w4U^;=sAgpAH~M+tj}zn9$dFRT<1`M0!W z0J#wHe>ug)K&&to5AO;HSiw6lm~yTRFx1p=9}&e8@bDYjwAX-=gP!aj(m-Pl0&Z)0 zYi~g#Bzb>*TqsNJ9jbHOlDKBPlSbe+)vsJ@H?PvXzh7>>)lcQN@uNXQ=aKnae}yRt zZG|dHhlTvCX0q`wnM}p`Q$NJfrpfMqM;k<7hJ%TDCUFRWpisn^R<^eqkA!{AZ(2T- z4?4w7ynO`VF=gzf3=Mr_IY=t6D}{GJb*mqdCU^G{v_HwPB3jk-=5s;RWFP@+_@y;B zL|_xJxDiwpdlAxO5nGo)Wgck2@sSu4>4S_!<`# zILiIK)?x_%FU7K04ATyF*Qddzd#%nsZq#2ZvlF>LfK044VSB)%iU}~fYxh=J=U+~% ztE)Twda*5Z39m9u%z<<-tNlWuD*}|b{C?w`uVsWnMEd=lDqa@%w#YO->1Fv2=C+Z( zyZp3+hSR!dInzqLtb6!2MDM%oa{8w?XIO&=Q`ykD$Y3_0?4h|f`~*!>bz&Jr@!1h? zV2xkeL3~;0{knR- ztcZoTbRrK(k$nr+(JSVSB-Oag``}6R5~gcZMAeY+>r}D1E<5NoE{f=+3eudxyJfV^ zndFPa`#6!!6_Rp~2@7Aj8DQa|UyM z$F30ZUut63KO~ZH1r@46dKSb&+d_q)M|L5IKmtke!5uHFwA|KsukmK|qo&b|S^9ph zFjXW*1x}j;e1I=HKnth$7Gh3Ac&|-vaSV@zn4nhmJ;54LPpXMKjh7FirD+D=G#V^R z^6QmL2YLm7pxTcdIjfLYgA@67l}(A%UYpL%*JrwWr?c^sjZDG~K6`~)qAtk_sJNQq z*=Q1=D`)0XV|>6C!D#j)U*=Z8zP$vW&QSVOHXjVFFuC4%m(QWXMS=EP{u?J84pC>L zXPXY;ApW9e86>zZ{4I%14zBl2mDT+aFXl2gM%C+Lcg&qbSFOsT(V8s_HvGUDc@h)I zAlh$C8RlZM1PltFlGdM@`>5%q?yYf)Om?OAWMx}(w$Ray=8&1!%)b)j_|AMj`cfdZ zJJHfohBO-EJ{x@1IkjSkllSH}P@gjMaxy_mw4YH7H9?(MEGBDl<68!0Xb@N6MoU~Q zP~Ivhb)sKppUC|7C}|gsZWQo`2f)*1uFcc=D?o$8oPen}^A}Bl@)*R3kJOp1^xbPACH@R3+_xVicNmw7Nw+ENq4b{jdk{syFqOc9>#8Jj{sA<|sV&vJ(k6GQHZ!&^OH$^x>62SDC(ZaDPJ-Zriwe znqJ$toeO86b1eNW+tRD#|8B+@&;RXSpK$>kUqtHf9R%qMAcq2s7+M}4hY;XY2zH{G zQ?O{MOTWS9Z@y$5V#}pe#A(S)&>i=pUdv)Od@uh-Q&}H70*zuRc{9a{pUu!?kh?g- zTI294`j^XQ7ZFpXy^X_}4z^63$oPw0oA^^z&!Troyv@OMaNe!3EeqcJom8X}i4wMD zgAzkbS~Tm@>~cy14t6o!9Em#1I>S(;$01IWw#Gb{7Dx6v?Ycz+Gp4RTKvsMk7s1C>X<~1a>9tMh>f+nUIw6@v4bUeWt-O8W>ohoE-M_hxy2hPIw>pAg zZ@1yyqky{UYpJ!9y^WgvgE6SWmfOpF-ZByDclmjl^oh(gr1L_I4uxD^R6EMlC&@)Kn4VqZu60ZdF=YP0#HF+rkr25;GnYV?eDIB#N$-p4^;%v zI8nIBiO^FDeCT&JXF^fzH>&-*3x& zXT~)XO1-StNfoK&3ZG#YFJygmfNuwKl4N*K6d5K7?X#)c&NMTr;`nla z5B8HbDU0g8HG8Gq=)t+x&YeNr{kTHE9nl))WcVTK$;#WfE!dZ^ia#}4D|h#XP{Fey zF+YHJ%j5X0Q&_p;*gtuxI>KeqQ(fhNZ`gJj7Pt6CqC8Y5Dc^y2tM+5za((9Jeq-vg z(LFXy^>uc1WzI<>?kS4<%uqKK;A+5Yi0UplSPXXSDhLu)HSw9WNTP$Rvzn2{x~bWp`<(AXWcjr+XLOnc z`TCUr8MHwu0b*2jGk73YG^N%QF#u^6Dv#sOH_u%xhWdJ~zcA+f@|qNqQ#gQyv(&#>`c|Q?1_@=Zdu*@2Guxk!&c`v*>ea;Bzt7u$!pJ zk(M2Q9cvUEhs9p}%@|IDwf&MbdK_Z?Vu=itmW=G9v5l;`TIT~}T$BS%dx6r9`7zW^ z-313|Y2v5iT&;_t#s>q_@t@Rm9_yY~rIQXNaa%7FXI=h1o(o(uZI7O+k#JBb_?RMt z1kV;w;VkEWql&Xh-hJ)6PLMpW0J}JfVp0DrWN#TGXvu?@WTVo1>gkGFr@?%&hNJU8cu6r80xbuV~JAQMz^(_ zd5mf81?eAf{!N}Ei9Dcae?zL082GI)*eSRzaa9qMxIc^a3>D(rS2)z z!O{~kLl7a|>)dM9d|(lHMYm_oUElQv_Ij2d3gn%ULvj?qJgZh>5HJvn` zI2rHX&to1qM>f&_B6STjCzy=`*|GIK;Gv3QLSy9RUTD6j5qMXhSZ*iQ^3P?-^Yc${ z?%%BaEPwvUlJ_T%mWc2Ab|=Y z%?10e$swXC=m1ouW0aES5Ymp!BWG|OGQE^4Q=)08ldh?z=liFiKP-NOa=KfFNqJfkXZ4fGSdf~yZflE z3sjz{iiNA!ctz^owY#m?pSM7`G_S z#8&yxGQt#*?t%$;Nw6_h2Jhf0uvU>&5Mu!Qbx_*VZZXV#E7-o_p9-73nmo?At<9%t zB_Nb9Kn78luK`W}Eh32l^c0G=?RCfJcC<;&k2a|9HvLb>Dc;y7^|=|cpb zx9J>1R!D*pexI*^oN|Y2Foex$h~{hSc+?HbtSk8kz-pS}OW0o+*no;_yIAQ2GXKYuSm zG9pQqZ$!!ZB9gyjDTdS=!e22cGXFLnPf&G_RVRlMcBB*u4-eYy9B|v|B;o!kIp?XLL_`p`3s2kin}F1#B%m~?&vV$1Mw+e zt;^SJp@IBR@{_fNl>~?s2aQBvDA@j5%hQrXMwwbmD>BM2#(s(Zh8eN>&6@k_+RfTT zynTBwuQU7)qiXnqAlnMRy_(SlAJYGb`vGoj9nP$1GOG1q=~K(?aMS z83r(}UE!wNNvgpgUrh^-zKnDmjwGB8sl;Spz(UV8ou`OLOKPuFg~vdLN}B4kf71JN z#cjQ&Nxge1*Ys5t{>zsn4m^J&j|89eqob{8ne3ERK=CagX6+^G9Kd}N|Hd)w@`Y7A z-dN!F3)Y_2e?s|H_v|gAL;HBgPkdEC4D;t^02bpcH)6!BxWGFmI~Ideht5N8wf_XR zoxalhD1Zg}Yyws3j*Rq{;EZ3#H)pOCjPBsiOWQg}`cu2FC-y^lao`lUn?$*sTjbOy znv~)e_1`H9I2rxx3mjV1*$8bY2KZ2-3mQ5AMrd!P0BI*hKYRo;w`81|{gUjMSAZC< zQw7y%B#B1>y>rFueqT*JONwsBK@q}#bJy3bHBai!3;{l>BX!o5f7R5LEkCEUlN!}V z5nW5u1j%>u#W1k39fSph_qjK!)`&zU<;bDu{ILD&O0?{M=Nma6YbJ`;b4X*q`jQgw zaW@+~GjBtKg|{V(>s*jU;AcjjSzi|0Vp!pzb$Hb0sp_;-1IU2>!~Oo}ozywLI5T`M z=CR+fqF{#_T@?+L=xt`?3~mXr>=4!Fn}Q@&?CY3mNW87UM@0ce0JW&>6l7}_OU=d(clOFtZDjhxej4bNUC!|rW>Y#)wyf7tP=L(8ic(y3 zV4%KXxZVxoYA@Sd6}>8jFzp_nvmumZ{ZMktgM=l0*~l^xkd z3IY&gJ)$-P0qCd@8De5}6lwvyYMIM&kPz=7W|0%^Y6d6=|7x!gDbN_$#h?MWE(y-F zNGe?kr9}&XyO;_XWPW#PEyPR|;G9zzm*?e9Zo0&3dkCwXmZkBRa_o4l|4QI=sNex= z*7+;(;s953{?emH7h6qZmJ8?KAJ=o4yKa(p7_Qg@C(@UOzdq5_KD%^je?62gn=;H? z$xCtr({_GBfC;1j=j|3V22$G*rFsZ+^G@t^11{sNdsjj8lb?0a0B`V17VUR(vmVA~ z3kBpoXnCS6W@@DdJxogbkI5K@x}5qiqFID$-uXVGgWwvjAgi*2odQnRR+J=+OF4Ez zAT$}^Y>-0tiK(&7M5L$n4;Rq-{&FOAqXbzuKu=ZOvwQGza`y!iG{(H!!GklM*{TTr zZ0qqY#w6z-i=A#-boo+3igeh|Es|fDabo;;HPPR-mUMef=s%}mAVlF%kR;?xLVFe7 z4n(Y8zRNBV7^H0t7gDC_w@Wq}CDIPorp4$)eP0QW-ldUNjIpORWV^Tq@qwiBs*s~x za^z549)1v*D}556(;|u!gGrF#V=!e5>+{plJrKU{>vspM9IL}*zE_Kn4lMj-29#&1 z*GOG9St%B_jue({dF!S{{X~MoBmhf&v9g5uJ_!<_DoqRavHVUHuzv z<<)Tt49KBcP-t$K{W|&R4Cb?rmkV{2e;2hm4)bM@e^>%J*g-Ldmj(hUh0$(LcMAYS z395zX=Nez}@Ai0c0m!YmSX-~N$RM}E3F@zr1)Pq}3lQ9@vN6hMU|y}Y{F93;j^;|1 z&@Q552wmj*d}sGGHeS8|)JDO6MWr;>j=9i*A+v4I*k}D4$?o>jNuKYqFPz%{Qr+Y6 z@%iu(E%k+>$I7R_R~5o=Rzf&<*!QIEy1niC?@IfTgQv;KT^d;|krjU&_vUBE+38g z+%L}DLZ@=f(37~(z~{nq%nwvn@`0;3e};W1deYsuz6-9i*Tk7kX_NXn^XxdhqRkNK zVR|@WcKqV>Bj(i2pyN#ULq|Q?;o}n9v2N;=gyzO`s33XAV0#5A)t&PG$sNV{eePeA zyxew^qGk5mbHq$P5bafbc%{8|;gWv$o3TqzN0OCm=wmvDVW5f`{l0!)9>E3Q&Tl8g z*$kd78+UWDS%qxc@$X_l2>=t#4h-Su81Gyur)kSP?lsEOMDjW;ms_%fIkgh`u~UM3Uc;9q#7w)S z0Yxj!KDVAZ%1iuVG>Wc~C4Cm4YzubG?rGuQ*k!DMI%-Cm-qtncRv-{MI0{yUYq`F zm^1mM2wS}*mxNlLDf*l>vQMFf)bsm_rhp_+@L4J;2`l%(#v^ISVCSE|7{hEdpQUBH z+jM!RtmNDEKF9uI-9wF4Xuf69n*R4iWyp-;Uk|~rI)0gaCK;RKVaS*{X$T`Le=t3Sw9Zi>=NgW;^#i%iP|nj#*EPI5}{ zZ@zg~JN<#~fp*|hu1N~ass57IDH=62H2RaM(N$@7=92SMj-#W$!e=-z6{7Gov^!LC z_%oknc7nVHKGcq?@!2-7Wq<6Y&mp#K#`V3N;7yQ)#dvF6U-gT#r4 zh50?Jz$>f0^pyw3w&%TxnaBC8X|(KTR`#qm)fU^Lmrwo9Wrw6+UQxEu4qO-l6`4C= zPX7mH%+BFX!Y{Yi8YTm(h;PKTjo-sH!;6p(m04-oQd3WUl~abiA5TUG8PB>}`!u=T zqZ%0217Pc)1|U6cx3sI1dqq|jy@KT<@hRB^8MJ`d{)i6Mtjw+CpM|hXhQ%~af9Fky zGxc6>aiXAno?rK#)=KH|6?2su%#Lc5Jp@Yw{3@2aJV#6S*?l)(nRR2v{HQ`NWNd8K zo^$S^(6kbMOCbFbW9pdrLrv`OTiUeE&T+h+4x#}C43X@0S zh54kH`lSU8il`O1o@Vs6`D^`8&V=xXRtCuj0aw3elpGu>lug`KW7SXEMV`&o>R>4B zf$m%}ktPuwMMy5TEti*remOrN^xuc^Lk>OPvn%h(>v zU&1srI1-c{GLs^q7XE;)>?1wX%cV!&-ju19R0Q~+;*;J8|Pm-5Pdp{K6~Mw zvLqYieyPT?uuQTvib%U4>wc@=5Tp-Qb;NXgA7htA*PqCuHkAgPS9Vz<8Zz)=z^rWY zwn@Tovbdc63M5~!w@Dk)q$IEZGhL#7Z5d`Tr2AI3Yh06XU(}pnmtW;JHX7gL2+OZF>A$ZFQdEg^tW1s!5W zKbZ^%W*w;TIaqhq#)w(kBSUApyhr{$t-s7^f&A*r20xmM9+n6>2SB}9_i=W*iEdY4 z=HLfKswJ~@aUat|Q6vg}_44QKl*rz#87yX0t5xpNoa&0uGdiZA4&AM`$*x zTg>(s^YV--@zX6QB47Oe*_kA5cyj>r#^V5ok$<9QAF6Bs)zUuc&)4TQ4Bi7>IdtyaFS=srm_5tU|6^X8( zBF1MDXUB&k!uYty+6^8Z(a#$rf8NI;uq^6C?X(s5xXkM&jM<)%!Y#v6+3VtCGqO$V zt%x^5mU~?YE?o7B7=*ldzVbK2^W`CDR@I z?yQFa5P!H$*8^8g+zDiYImzXT(3p(*(s-h&r7IY{3HQE=bg~NKqpV=kIxi!~#9M%V0yBR^}EVF z))YI1H4p*rWY3f}nec)DO@enaVA#0GL{ooor-1ln^~}i7lmFQoZ(Q7YU`K zf4IC7^g3$Yol*A7BB&HkAiH;WubtBExFi#FUw2xz(?yo*H?zcm2 zw|(MEkVmy~!&i-d@PueBpKt}B^w(%yG8Wi=cK(46(vSIv^x60cb{K8G+PwNub@k$y zDFyt(#%hLm@r$lR)7HA-;vA&=eu)m{9v2LxY*RT`B{aG`$qKzUt^$} zhmOfywhtC)${C@Nb}8BH%@2w%0g!0CP84!2at;xCWcFvDGDT4aKma}RO*Q^0_%-Ov z8xmCXGM}CD?3>M?7|L9qq5(L{^{Z>%h*&k%PP`c%hGwh29a()PEg-H09=?F?O!AtT zOCw>Z5hCNQBm{hQBbkWXE9)>PiQogQ`{*w7H9lNWhMm&s)13WcXtyb^-x17?E=fmU1S%+EK4&$j zb-;}5O$x`yPvjUGpWyxBfg$HVDVPIQS%`e^N?L9&a1>e*iFCV4Us(sq{nP2`>`(Wb zRwcB>pUHf3|Gi9? zI0l{11dWk@ zrMgBQJ&4=}9%!MJcMj)~R$=^Ogm;f%tll%;lw0b~m$=f9Ncr#BHdo~^t<4;MT!=a3 zufUt@c`0A_OlQCELXrPinws8Xh2??_3?n}@xOi4+phitM-Cm;!k=UT z|7hy5Vx-5w14YR36Sj2FQ8qMTNJPZUoPLtKd@L3=Fr{Z=OX7M z`>JGpRZ9YZbymsvN`0kTTW1CDon#Nm??YqW|$ zoTG-0TVm^9@!>yYxus`;9~~Vl0yL?SR&>M07r<4*UcVe>exF+oFBvdjQ&2tJZw}!F zO2s^bl;a-Tmq~0!%YJ~tPC55GeFBf@x7R$2J7)Fiq>my8l)ZL%D{jjNrYr5wW+#;; z5NfL>dhpc8a`Px=lzESTy%t){tNj_TXx`oyukLV=t?$V0=tE$quflNOX4Qd%HW`5# zDwNb0cRbRnHDFFX!=9_sp3D^)Q|Zw@lS=G00uBIl$9)pr`tk&`^B=mz*84Nl-54Cu zc*MGwmc{5H!`aXN0xxK9_t}r6FIsby1+ONkb&hifA;yx!oQp)Wn@n+(p&!MaQ6Zei z?!cR1GXkiroTdGWE&7*yA#=Naar!bIZ8-`#iSI0t*>rnQ@$g8FL3*Rjl6gAXCUZ6@ z%K*BpToJ|#3>+}@Xsq5;BStbs?Z%iy#o==xkf`yx8P9ScF0#Z7XW?t#?YAQ*mDHAZ>kk}}uKeuVsPx2B?myNIB;X8D zQLmttlC|F+Sydw2wO&$>qqwHAbS?%r)F>1A4gZvTuz#{!4r3*=LGQ~Xk?^a9hqoLpOO;1Y0uki!lZd$3y9CIvI z`%>61wTF3F9w!`x-bJ}EYwhJH_Dht}Fc;2!Qebh1DLt{|;h$Ov{j-~L7?ML6Un5R8 zCPSBYr*w3lKoAj40PL4VM-IjFutxj*b(fUSVTm_kIEGoA8y`Bt@PC;4%CIKiuZlrrW`#;a|9>@D_$Gv^n zhwHr0^ZL~Z*;6lGR3J3n`RjZliAB9(s7(f1Q;T|im2BbA`r7jgFoftdH7Ss;1rHvy zAOc{LhMtTGv#^a&Y$LtMYjWrp->FDrQV@x-$A0SXp?aMd`2C6CU%iTh^>54o>Kpy1 zBWY`Ky& zu;>4qoU{MKlnR&u5%j=sMYmO8#AYv5VZFBQ>voogM`>N1Ga3r2oRo2wPZYc=zHH&S zcI#IflLrUVB~>FX^JL#@)`;n69+yjH>*X`Mx_mRzujMkHJ~$1IG8Tj^6qf>qO4?&x zeuq#iRbN;OYF6>AogTOe2>7#a?cnOtNXY8R+ghu*zdP|g-MZ-ieyyowWqHn+&|#rc z{P@xR!#l&6@6D?^?vD$H@>sLMrA@uzL8@(wK{~O_-Wo+b51#QVF>8!BH|v*AVfxeF z?_>_lbvquFn;^&Tdo^{G4h`djDc|x-ffxUz$7cRrZHR6j zayIr&&)(<=2w$;nj5_8Q?@ezuf0TqKt z>pWu6u%_V5jS@j{)KbZ{pG;P@a)e8NL{mYj4#eqVC+l7&AqXlBIV8bSkv+vwO$+h? zG)yj!SV8aEOS8%(V+O%ua)1#0ld-6X(e?nM)4Xb@+NcaguF@7R?w?mP&l&%1p3H5A zGEGF(wfWiUlsio8lonxp6o;|bviYqX}0;a z?VEB|!7NU=aMQVglH^e4>=Kqc*~H)iV;6<&>+hkhvbVLfBSd&c{i0ymrC0S=wW*?d7(dMYY~3xEWi3#c)LvH3!3*j#}q9$>Q9(qp0C! zdP>UkSt-f|F#p~$<#dT^Brj?TBuJbxkgTD^h9|@dNO&*)Z0Q)J>_+Cw%Y@3eeyB^s7Xo@oK7`lJduD{tE1YE9o19Km9OdB03!%EFtpkXk^-D} z$Ut{*q}*Pah?}rg@b-Vn0VWj8Xbh{>GJ)>wfG^BY80vtK3<@TU6qaNMfI!0GON;7<#!ld#{IZWUfcu-GK3s)?~R{5cM(d++4)@k^x=Yx`y88ycT~ zJNQ4UN9w?c5{;a<^M%pqZrir9jIMZw1uP5mzUiX)Q|mtl6Kn-0nhH*zauVm|Q19&R ze9QxnM@w1E-$yV0%HfbwR2|U?R7hFK?sy4nb23kGB9u6+?MUoWHUt+`pBZb@abln^ z4NAXNgPu*kskx-b$_>&WB6|NwM|64L+LRMy3M>mpxnJpy@BEX_{ahwZ89*`vbUi)| z%D?4e>B5A^_*hg|2xpRxE>t5-Hj`8%T(ZXNl>FU(0=JgFdGm6j=ouZ~OdKQybmaKJjz#U@Z=T>Xnj zm(s?wl1-WjyJeHJ;=d*74*%zTWyY(U$$5m$~n0RgUrjvR!=2hCh8+HKXi+VAh zd7S|z$pY@tr!g5<#+V5x2IrG?nR>Txx+*Xoen%0I8KHQkodA*s$p?N|nd5{!Uu1dO z@cE9JAV&4Go&}>kQ(0kXRKEeC2D+3bQ6C0f7Bre|nAdC-cA#o$Nk*VJE($=fg`}mD zPH#X>N4C%>@D@Db1DBf&9UIqN8nHG4deamD*gDCdN#lsMtlqYB7M4kdZgn3TK@$JP z`h1BF!}1~8-5XvrQ}R4a!szSDNK%5Tv+8}Imzk3ev(WOA5`2=1u3T`>7%L>dJ6`1p zMkBivIkD2Ju!N1h*6OqoXW=Y$`Ky)*L1M)KERa2N&m#$u zdhS5(#QphWzYO^Bsf4w%(Dt%0#_!Ho01nrIlxm5T;LevNLsI`C51oqfWY@n8VrEOw_>g_P0krRGeUe` z7U=*&(3&>wK)sUCOz)#Qr$w~$|Nr%7CP1_|u_)Hc#?I9{&lUZG)9Rtv4ceo-c>&3j zI1Wt_jfaO0mC2+a_JSFI1CkeW&$8y#^D4wnH@%_{)!grT`mcK0JJ|2eZ1psqHcCbM zItp+16y1#>1xiQ82h{lievdBp_Sc$}^!OW>nqC`B!^8I;899&oLLjryfS?EhLaHJk zT6z=%#fFBanS!KzD|vnEd62f#Un`Ca_l8^Rg!tV^>HMhEc`&z0epk#h&V@<%@ZV}x zQp4BoTCvRPD5pWv2Q{O8{MXVoxATd-jd${lNos)YWS!zxp45P{&Pjj-r2v@cXEQf`bPgqV6Y7bCZAM} zi@~5Y-SiJhZo)PT)IIj3C2Eg7{V(gbpL$ki#_`f+4%6}omb`*cmJeSFXO_S`Uenp? zToLAxfqIrl;*)GO8{MX|`CH#mY{*K_kkQGtCRolN2U}$waj?ocT}2TAu z!RRTl@yZIwxf>8qwD0n}xNyV3-m$bq-cFMkVK2O0t_ieepI#|^kUvoYf_A1o+h8^p zaKzpki8L2MG$;KPZs)@aAyyBjZ$!mJq}@}A7`Z>9i~_#a1m8FwdW0l)29;zmrtrfK z#Lq2srTjfszGHevyxaZI;h$cy&zsk!O>#Iiqi)>5U;DNIQO~((sYm~7&Mh+k5ghN2 zoOo$Nv@w|r1td&7fm%1HQBadU>ud>rZneD*6A*hER&8e5a3ap{MeRSMKtKM-pbuvc|mL^>b> zBjh`paGRQ8wBUM~C_e4-<~wUam^Sl=6xurAcrhpkDFLr%W-_P6ZgL)gdsl@>&WhV) zxH@U@eOJ?!CwwIUpZ@W+sCPd=`+k0bIxz=Zh(yr|A32KO|J>NF*=>eQo}c2n@cM_5 zf2z#=>dT#(q)3rwyql8FeUV@GOc>Cze~fHO%)e}NqH?!52@B}+bM%uD=!k3Rw5tj0 zJw)IyO?bSk_Vv3`Psi40(T+WzB+Y<8CD=iC6s$&#flH+VFY3DxOO;C&;1vV|1B>tW zSCc2H-6z4ht2bGpUPFTTu$Kg5;Gig_GM`Q~bp~`FNe-I98L*9##-@E>yLFel2p86D z!CsjxIi93-X*&c^gf=%g|L?uG8SsixS`6qq1_eN8z7a#hlAZ&!@Cxd7tF>fMrBByM zN{uVAOYvb9H^O5VrkpbrWb*`@@6YvLzu>qF1ss$HsXB8FeP^0W1~``cqqhR!UTPW6 z3Vs%&?cakek7#qAk7~YI4S_dAW)&wU5^9flH3Z5J^5S*I{u+&ZK#`noU(N!@elW|X zs-Cg=GyF)9pE;_>4@hy>)l!J@8=X5pLj{;?nZH_Vl<% zg}+6@`4qmYnSnm5km=XY^Gjk6vH!S`eUw=Xj) z&xUgvFXtJO!&SfW=ntv79P=uT>u;F5;&o=MeLcO8e`ad*LB4^PZ1Q4Tk^!xUeI;Iv2A6vJH(;mb<=v! zdRCnE^&4^ogE>q^O8wtXt{PKQ&9gN_d|2!~?DI7(-?Il#U;+)_RKCcrEfBx7`^(vf zIL9}CGgCzgZlCtVTVAg|d}(qzk4M$+#G*{hQ;cSZyi}TxgBvtfs6>gmhL@QQNBzZ4 zey#N{OOWsV2JIA6a~f=KZRB-yqzb=SPbLOrRtRXY+Cl;#KOjY#J2EbW7~#6+jdr!x z!H!)9;S4Yo42Yjp2O9d>_Ov^A|&tzCNXlR_<1%W$QQHk*Mre0!I`D9MLt>q4IOgw~MxoMFP%`4!KINYOTPx z6gO94o9*P?9qNZp<^_rUZUok0rB&A=!=tF6(wbFF`-%YBVLjf#2i%rG1;@u_4)6lo zbh#Wx%tti$Y>Ym;v6gPD%fCy->-XP1;?vMS&~tK%sl?O#U9A(~zjpYuaPND%={b`~ zv=6xS@{hQ^dn6`$a?eRb^bo+&i-Y^9$kFTGV7T^*Y_YG7M@bGnQ=oMz=DIsMtQxO9 z>eaGe&40>ZoJ< zL5GqHBmH=)cvR;_lexlz*Y}_#f3yB}B=<-Dg{!ZBmQX}|Y>I_pavzRn##{!Z_RG!l zezu#ZI)JABwmy%GCiuy|F+Pt<(q-AIX}=@^3yd7{LSF) zG(dFXcdRBl-MgB^5Bx@%lIER?T=zSC$f5t=H_jTj>A&^&5&O&(O;Y;5L>UJF7(2^< zY##3MDG}@;!Jg{sI~9~U(p|B$MCu3ZLb`yco9&I9t|Z3y{Zhm_08V%4=IL~`#YcSa zO8scBxC-tF9cYT3_EG!TYSre4V8KW9{0P%~YV4NZXKwmxbUtjZKh0)?&l+7+sEyfX9Od`***H)$erUYO)c-AhGq_RJ$2}5-oGnoipYd?(*$~BUE4=VoQIzq7q;%LkNtFm ztdXIcU8t1S8ybh*=17>MqJ5+B9RCzsj|Ak_y+_`8P2xp|Uw$GnDWaU-Y<&x}uUj&# z3(9^FV##SDjyPKAw4(;ud!B{4Hn&(O5Zt-r{uM+n+SL+o0)j24uFAdAul~rJcOjff% zQ{bS0ZhzShKfb})2z*d-+J^MoB3ZBsjwNG7%FZ(kaa+(0n%MEe*JOQqO78GAW86n5 zDzO<0#jn$wW37y$4n|cH>a`wSE6i_;%%f2C?T@J8jvL|g zU5%iO!2QNRt`?hs$A_e#Q;m(AhuNG5L(kv0sJok-N8j6tw07{ryNAcs1=K&1#}~Jg z=r10Y9|LZOY^CIaPT7LU7Hiud18>rT3`aIe&^s=6QZMczto$#&nx{;=v^~*zmz(y6qtKs~$Iw(!^1=b&huK?WEf`%a-i(v`)M7V5(b*AfeI>kd{5yFv=%xQnr zE`Hn>0bc8l3@mCTLLphq`=g@(^ z@WPlGKbJSeemag+L1xqo`@e3Gug{BdhJWAKL5-&Rh@x){N~%=%>5HqkO4wDS8?GY* zDn3Ffi9zH?(37(|5aJ#3)LnJ=6|NHD=C9!d_KE1E7yAkfsHF6?APZIuq?E{wZP&0& z%g-$LX$ig4huxHJv4JSd&jj4R*3d6I6Ghhtk&}`!Y{*loKhA`r@Kugkw#lI$xpF-{ z{sx8I3jlYZ{+AlcNewLRJKbeK7s)(mH{!fCoU4sr#rC-otOtwa&*a*h=0Ml<)?S?r z7ZJF802RB0>nD|uX8DN;xVmDu=_(P7+FDnF1n;woLO$BqQyWlrbd=aRS|b!b-j@CN z`lb9UXK8JIOl!8p;O}8K%aW^Vm!luNW!?D1M$1QUy4rsZ}BdtXN7d6(8W1F4O(HbDrXmhBcD z%*Xxi+_{dR9ws0Y|3*y~Zvw;3KZ~pUs39sxpYuqVUbP0f#a}t7bKfEsIy2}?!*p|>KX^h=f5Z??13IJ#Tbmn`xH==#*UeOgX(iK^@0PBF9G?eWc?an;I502a z*2&dr-%}hPG-6w@G{#2dCsspB%m`qPyn|JRu4YLyOT5wVmH61_KDL>H@wk;Wy{5Mh znS)*z`Ly+?2ILLl$)D12tn9Mnl<-dFl;~0RY2FzJyi&bMX`5w}H%5){bDqbF&0pKv zWVTBF)&6tyJ~fH=$0AvXv4mv@uqJ0_i#m5C)@2YW(~H&wD2rvZTO3AMGV^O|aygPx zAZkzlsh@PFYO%#dcv@a$xG2`NNqQ@$yZ5?{o4-LNTU7wcx?dZ8+i_9E-?aTMV%BH$ z(I9g)ZJyPPH?H_mp@6E_$Gy=C4_$b8t>NF_B!r*dbiWn)Lvv@~vhl$U+8_{AqwQHl31qfU~2TgXm6&6XU|GgkB2WIc(QX9$6qHxaG-EphJGHNSrS3CqQq$4~h58(}3ojeck zxRiRB*_O(`S_=H)yxguv`1`J`sx0)q&5hmfOUZiQ`R7qzlYhLcGf{O>d>?-a{xcDq z#q{;d(py1Tb}sNR@5^~tisX5hDiA3Mx0OM6m!L76{b?wtL-++cyLBi(%T*YAPF-jB z-)~)^Q)Jho{yTkVH-EqL@KSjl5JrFY%e5JUN8c#Tw#o~bJs*})yW8;iC?egZN`&ARzE>yRLZaOQy*;;D z^)nH#XfDaYZ13}m80yJ#*9wi#ZaL@?RH>h0>Y>X&)Ahr?75Sy~Hil?T=XuJWQAD3A&8xQGtf56uemy1Hk~li-H1nB z{)EQ?Fhwv3xga8B0>FuW;72nSoM#SYKLcN%vWAcc5x}vkUIV1IMMrN|ZQi;*LsJo5 zLwK9p0y=MAhqn>IcF-S{e^NOZbIOO>R3ETw^ju<+&U!B`_F#b7`BhkwRdU& z6VHYrrF4H^SWnI74pvpv|0w9EbXU?CPLX{vy0kUmn2W~$wKUM8m=De_$IIv}{i9?p zr|cM`!9`Q(T=cs9RWzoaU+>9~Q1kq~yM*ZcX{A$UPs3u0JC9^iR%Q69*FXdCj?UBF zJH=xDDg z@bvOe)VhHKW4VX^_MKx*;UAUsT1V!UzJ20pMNZd%XAvG%uh){;0ik4^kO$G(MzRHo!qC4emU^pcKZ^Hd(BzK@<2nkE zE_WtY#nwb}?g#JCzn9mG^~=vMdZntW%8de}Bg>=_5r)*WZuP8YmwZji(qDo@AG85m z`p;D`o*s3OQ6R3$91rx20jZzbm>Pvg7D`BR+Ld$e&VQUoOW!%&7UkSMe;CpTN<+<2 zbtsT5-|l;^O_lUqn-vtJ<7cEj(#n6i=(rvG64cYPnjdm+rV?qsZVKfO9Tu8Ra317g zgqlB)Z3-VSyIef6!JfDK-LUA!Z>fjYlvYwESeLd$16hcGaBCaOOdq0gBV{~FI7$XZ zA;eg+h7u>n=vM#$k$v#|C)FHH(_WgZl(I@`$=3||Ne)4(LvNI#<5j8BtF7fBER0de z6`IlqzT)4OjthYXsxJ0^6+Bgp1X-mQpc;~mr}jV&36YTtggXwy|{Nny!lz(;=9USz^38q%3?alyQJ zw;}?vKLKj4f?c9k?Z)G*Ss{TM{mUF$%@G1l_{@Od=NM3e;q^XznEJU}E;?ubPNd5K zGoIA*Ss4M0`hhAXg4<}h$ro+Q*p}E9h2eMhk4QxT{3$IeWsZfav1FO=!X34NV?EHk zM8Mh;EoUTR@?@hva@wlvh10kE@Hc{Y6{(*jraqGLmLfR%vMK)mnbDky8)L@#;r(aTafho=EvtILS)VhWu5rx7dWJ5d?(vjr))3h`+%!fgKhO|9M;=*tgn8SEK^N2 zARf*XqNM4a7Y0JWZ;sH%(Cj2|vNwl#3SYNY#K4G!&==4zu73SFm!84%daQl*?h_TFI?9Qp z%zlk@ILk*ZW?OJ??v7JWU7~Ppm5PX!BSlqv&rmVG0L2zMGsCmpv;F%TU zu0nSewNg$r@hL#iBbnMRb^JXNB!Jyh2ME_{rAX37$=^Dwo|GT}L;cmCmPt6;c`Id5 zJCHRZig2$49MC{x4?G_Oz6=dfcgcAU86We$67v3B0<*RnNS$dnm>lILJxgWA6tWfXp+eh@a=-KBK zFB*{$IIFek2U)y)CFS6!genX(F+H7mgq6GB{Em`sHDih|Q*v$F4q&G1anl>x~@hNe*>zzTl{YX&` zj79leIUvF9mGM51(~YgjT=#xggf(|Yv0jfXo+3EIUkCDCOdZJJl;`F)l1}39{CgAH zV=K~mbsg~Lw=_2Ta3&&PRfMGjN)dn!cn)nD9?TF6p5#XNH4>#7HY@EswGI3yI_gV& zT}S|10U2>6D)I+RTSuq8bEvtsl7Ayl*lmAl$a7mGwC1xPtE2u|_Q0?^PL#oU`ES?7 z=z7)<>k~&#-(nzW_j{JoP1Da$k`y90wb|%BaYT6qItIGEgVOR@^~ShOzA9J~j+LcS zgb%llp7lAj3r#v03Bd~&CK?hq@&}Un|ETn|W%|hwrE6S_olj;^8QshYK zFVxgGUD49mSS!gQmtj7d$z5^2B6K2SGT|vn8(f(Mnpe%GfL7*$2hc?cVW$XG*lSFbQK|y3~cU+{zY0rUb(_*5@#FL$-PhE1MV=L}8a@~ z_%U6~DqGNu6V`F*LJnB+Msz;WL{1!D{9GU$f%mF{3;CUa^bi@s+iS_7S!h%AoiRy1 zhGRNMd9zaHKY3DA1L#Io(w*n$7r%zdDJNq($N3t)Vv2}zf89xnyoNGP@rT#SF#op$ z{ep(vg}t%p6vEJ%&}*F@EQ?kwILpfUjrwc{E6^9C6sB^x@%jD9>>`I0o3YJ@>Mwhl zVOUrqB;NQt$w9Cvxtf3jEVx}J&wb(fB-2k;6<|IQN{)?FF)0P%ZVKbeDV2?}>gXJ3 zvsTgrSV~G!e8!zEA?M^OboE6rrTi4pC8)+{djRiDLIJ&eZUs_Qh*94W57;ZfrM8_u zYxsM8338zL?=lNNj++JrmZf3&u6!L<))Vl2<^Byx`OYHAqeBPHpi z$&Q0g&8+o}d{@JD?wj0x$KxZcC;bxRS~(%83=DL`?21m}-N)WoHo}6yq>JlSxi}Pn z?$cZAIKoG0#X8m5hbp$_C5T_#jt>FT+G?c^0nGGr6~k%w+0;MUd^r*YYp++_v2n5t zN*DY#IrvOA-yrRB*LgdAf2E9C$6c->@u-iWnzlQd;^Fpe{rY06c_T0RiJGjH@H^QW z{=KXTTjA0o#lydZQ9h|@vK?qG1ti?v3P!j}!Jw zRT1UWYav37r%5c@B>I(fTjh;-rg6f>$1+NbP&g{5(^kJIJ|M7hd9E(}I6$#;Ux6(-Y6nkK#1^D=t zV|qUur^2GwG-Gw^_r^MCv5{;S)C<@bc1Lr*N(z9G;0GRopzmpvF6WWBlQLqSLGUOk z)(4h2?r*M=XrAdGsL{t%;yMbYX^lmA%!q>)DFx~+`>Y5uqF#NBt4Di=UJ-O!^l@+i zpa+EjIxi{&K?ERq+?Ad3v@_91jyJMB|A{esv+Y9#3#5TL;5u*SDq-hXS@*e7h*n^4 z1AFaoyh!#ZR)*-7s`!pw_RUn{-xt>nj-yC&qJeKt`V2NW#{I^UYS=_~>^U`@YBIF{!)E_2wX(rq>Qt@ZQfF~Tv?+rHBDL*_!Om(CqSRTmAF$?8ABlqndV~BH zx=|PPEDxzvpN{->e)F7KkctgJgl|UxW5u8cYDRS^>={#5&!f$g2oM|$fwOQuf-|sm znO>*^?U_KQB-_rh-b6snP6FvK_On$@t;iG~ZJbo9+EZR_>Tg)NuV29Xp!ZL#JAT!; zCQ*RFW9R1r0arhki-OMMP^61(epl%JJ`xA^d>15w@A(YnfHtFW%X zEqGu5Z zao{s5%uA;}!2az9u!bgw6sQo3UGXxsswT7>gB_(curKb|8?9l*pyPhdLNwEwSSenI zEn4s7oqbQe+xz28g+qJ+T9ngq1Hu*`Q93D^Natg7=jjgK2QxH1+uDuF;`(y`i*@cZ zZDbM+8QkH`q8K~}%0r$K#EV}=7~c}9B%q6>0H)-euq0}gRA6)tlkbRRdZIQSehfYH z9Kc%j(W86J6_JW6go((yUqqf*I^Lp4dPfbe;%FH+;^*fA(HucKF4~OvZ0S0-hcwEE z=nNV16l7sSTi8%#vnVer4OG&oy2eG^hnQ?$F0*ZEQkA8%#o#A+WzosMp)zeaq=bY& z<(PC%_<}5kCuh$;ogz3Q8sgicy#h}0^+-lL;O!#U_>pw*6KcUDfjTY^Tx_lY-Dz_s zG?luJ*{16CN6b*>Q+LrH0d0j!a*Ee`N3vhQ4uE{ZHDU*BCNUcG?dtP>0Sk^9ECX|j ziP0V-aX~ZSNY-)U{z=Vl=W`}ag0`X$pFcQ8w(U3&-;}I_gX3eBAX!{BFV@*DMg4zvPMK>a!HnRV>z;ZFu<6L|th-V7)s9P9ov_4U|& zwPIj4T)Ul!YwQh&TNxe(MkLJjMAZKS}o1nbeCYo^!`}30zxN86U z`ZEhNK&FKiBJ7Me0YAHPqe5hdbCiza0M&;u1Zs@BbP+>*d1K5@seZjhtkiHmtZ?l_4abnL3X?RVdM9| z2A<$@(o-ekIbboB6Qm$X-+Z6AeNWeGT=Bsr`H*>+a4 zZ}El5)b&e6`xk6{50(ce8_X<>r-I??!6c_#stjdXKyBB~Jwr$e%oOEg_$Me^h#5 z|6tag)_?U$uIP`HDUWxz2e;%)4YWUFkgmN?HcRuzp-pMCVJL2nxO3ZpS`tZFOJr{PT3y4ewuu=(GqL0OtvmcpB>Q zXi}Y4dwMENDe;eTN6U`Yvf>RvxGd$*TyZE-GtnWDuC!LyDpM4^i&*8i$~rqQuQz(X zhf1?Ah?xPGf`UTV)RgCE&>%;7c{$6Tp#In|>?0pC7uY?9Avi9*&oL-cD2Ff@D%&|#0KJ3Ck~*SGk;Wd zPTZPKE|YudHeGnjNdF%@xFV$xW0Hri=8w2jt~Bda@K9zKIRjOPwAedEg?J&SDW;Yw zT59~%)#rb;vEOyY3m6>pYH@P*fVG{jj$$gyBHUb^puZsp5X4w2Emt9f{)0Y-3_)aR z4{a=k^_|IK4a^SyEoIprn|-E6e9$54Y%sm8t#q3Fi(A9@SH-M=NW7 z!_aOPQ6+JXz0|#YYz6LdDz--fx^aXX8W>APDA6kXeb0Iad9K&%17{ty>tN>5el;hr z00A7@$&;7hz0wAVZJM`WSv1k@b|3-uhy@QWuw}QBH0_BP+atjF30`N%?bnWc>4!<_ zqT_&LKYphFV2KfrY(ey9GXW_nbuTZk(>em6<{-D}AaxIZb7_5TuO85nY#4Unz^HRx zLRce`4+M$aPKTi*u0$XhDR>)q-@-C!(ZC)IXHBB#8f>2hidzstBt~4`lsALtn=hkU z?BXR0pIcr}p4?*4EaF;P0GJ^b9mf zxU?rDo+%GVheJ`|@bI5a>&h=8+T(TZIkNKry6(Z`H2YA1T4aG$TXwtWlJ&|6ZI66+ zkun}5Qw^L>`BE(ya;LE< zjQAn#S)Q@KyRw)LNbch0eAs9SAmJunq)pg=wVOXmq^MFelH?|KIfz9c)`L@xsVS<7~Ly&xZ-(1XFbSjGOM%A`y4I}5Z`r$V$Zcd7V(_=}#Q4#OL zFlJ6q!7JcppV&u`M>?Ty&ej%rpDYWDuroH+vm@0Z-olDKTxrD~hc-*~*r=KU{u7n6 zb|ZKPr;4lh7V%ut_sM6CkWhlCv(j1~xT%MrcE+mon>Ch|US}FfhDta$^Fc@v6bm8Tm1L5EWHj!no!mC6|#L0w41bG16 zwVb3jWo>VEqTi{X0s$x8e@}x5{;vq|+VJ{2?z|skqoSj8L|0wYB^ctcm;mcNyzz(P zl_cxM&)oR#?pQy4`sBz+`)T>Ov9HzUH|1RYyCk~f)XJ#{S#$H8!jck21%zvWBTKqf z^|V7AwN;Nnqf?{QHxCbwL%zoP`fmY_0=IOwHjyOid?QZcFZwdyoox;O8G}f1=UXXk zJelrODELL#;8b_COfTLjKJ$D8V|7l#=M(N-Gjty5Fp&Sf+lPRV@X&Yv@X%(|ssJA+ zbmQ#C&e!*|k+E^5A3qJ+N*2E^#kO8(0%pZ1dJ+w+*|sB3vAlJ2H0dd5?|_p#5(k&O zfLpv;dh=@Pgiolgl01OX+kljPlvPLpJGO{Wg51|+TtQlDT78x0pJoGFn-;=Xs)I#U zVkg8=y3m}DD<0e&-jw#l*OpL&d%xrGFL7AR%(#X63SYXCCmH;7*8%t zm*r~6J9PG!4?9SbBTLrPCDx^O#JSFCgJy@xJjv!m15)B(l&?W;#5v7eCOzvH8N zxYK$a`kqaquW$~&9#MxY`p3FnA@lQVg3%0Wt$YrxLDN#~juN67wall~!A7oq{pEwz z+}6gvPQAYef+Fylq^hL$TWI-kqNRR*$YG%F2);E&tQ}VNE9?esCpD;TzT&^xyWf`3 z$g4)?YfW~z9+?7GP8;#E9-q2*bHty8{OmLEo|x*-*h#RXxN`8+y6%im`n?w}d&h^* z{_*~9vZG8Lju}8b9dK1nVPYzN`3_yl9E#6A`)OWPIFv?0K#9EM?j1@c$K;2W?YTiF zx0&V?UGjdq)7(&@cQJtJ^QHB1A*@-EQn7OxWg`CBQmpBVnZeAv%FPH}v%)CZcIYtp z-4~Eu3m8qdXyceeKN;l%3Ey>kh%Zc^t5PDx`gv10pZNa5hrt1tQ5~adq+t(Yz3G|> z`czswnBgza8vyqBnnqe}!JM2Zq#dKEYsOPUsrOhaJRSuxTJYV2=i&WcxR( zT%4FzU!?USsn@$QQr)rag&c7swE*eKxB*XFK z-~>W($;KRAKwT#1r`$!gsSpaiNZUMZk{i`imSA^Y3cYO|Uk_L@+w=v6&b&42cMW}3 zHVk=M4h(WQ(DDf=iT>qZcW$So*URxA;!}zNy5Ii0)dN+r+W*5p(dP;C1XpYdvw{*n zsEPelUfR-?q)y106p?kVgPd;u{s?ZGX#w18Jnl-5iyyb14f)<**ZBX#Jv=;g&uVUW z^p(0s2?wqV?~Fd)kFo|GA3sPo#C_UYX!f{FCvCjq?&^| zFPW7RN>q$v7^rsg|jj`n+AI?mR9E-o%U;Cmc7z9*jVQ}96D`}(zl^q#&9Q+PYV zF!$Yo>S3_@K1y<{I_P2lzqb#~@!DEG*eJ7i;TOd*>G607XyXY9R{DeC`c#wMnz(=zP#M$z!l2`oB$88oMvK#~R z9Cgf>Q(NgqN2>tL==*lr_>DDJZp9Fmyvo&+wZ{dbv?42Imuv2*$$5T5M#}c+*%JUA zZ+OF~v*DKBw>pQ&62ONA0mk3I;d~xU7aPx;o>4ex3?+z93hJzhBSd?4itpE9g%B$0 zCI;ZxemCZiG=8+I{vK=}+lJBSzvp`PnHadL9R)T{PBwzwry(7lc+LWva|u6rBI(p; zSVG9rsdUCPC0$?iyUc!{M{pwElu=aC9(%cDVhCXHd1o*vqJF#kD*G@wAq?a%)^d*t z3PGCj*)aC~OL(s8pE5iP{FLOrAO79UT=yT*!q~>rAgMnnATRrjUyaJ)>Fqv=X5e4` z%`{%*nU<$fh)Z+w!)wm-hx`G-jMOR~Ltck3@bY<5u4{F|K##CzAd z_B{}H1_vKm-*$^4<18O6c{S=hSIZ;VjNywnpt(d=_$!Z}15o~>YlG0H?vNh#Os31? zlT4v2lQy9|JxD&nYaX%z8P)uJb;_VhiHghX~bQ%CKI#AIc?ZJ?{%g+^aF*kcOuZZV-NAEhiJk z^0CNfjbL;LgHW9$S|%zWS8sU)g(f`nlO3YY-x%`1nfZv6K6@(GghE!myuwBj!+Y3| zNKDL!`10}FfF^7dHxYplie|7iAg|fD)tP}7wjnFxvAzuxAHpW6-uQ9ejImQ1dW71`|@uhX?vg|Xg? z*_M}CwHOV;TaV}2cpw0bFtmLiM~Fa^?HL9wxk~3bA?zfg*$jjgRGJAKOY~iPqpRo` zTG}mF`9W!O?2b?7uLW@hA(GIRpfgVDcIWfiR;J6`J_0@B4!CV?ZqH1dUIiXszk^{73b~uF`w+O9^uvt{<%3;&^@B9)$G>4^ zqBr@9K66{lC({gGZ&rqLtbk*}bVTOf_3K)x0jpkP4WeSENwL$zzi$hCP6M4-aGWr8 z@v=;QfJVFbhI%S1LrzY#AJIQ)Z#knI2S$|=w+(d%R$ixMzZY7gZ%745L(3to`JS{9%X9@doK ze)5-SNc*gZ`{L*e#hIug;q>-ye*w1G)e_M3)-GYBRdPN4gEO~TG*zJUkm*5!o+#<& zq=3mY8w=&o>mQ9>irE$oFH293u`i# zK=oJrDw+Rb>8zugeB3s^jUgp4V1!7FE@_mI7~S2{r6AHE4WkD`Ksu#U1nH2JMx+G= zq@_W+!T0(8&ifyKz&V_qJ@<3Rb$u>nz1K~6h)|LvG_Dc6KzpL(@xyQg)H=k6H|;6T zxO8x1RL)DaeET_S+0uvJm^FIz8S$=8Pm|ijYi3E#(0( z7|M^uayS08ATf{jECd%}yj3Xn!L|5OcEktybfq^pG$~kzGbYN^v`8}sbP8Wb*96x> z5p)ZJb$wYDvBr1)JRrmPED*quyIscxGGm--aLP+D5^ZVvo>lLBh_QZ{H$3IXwyY(E zd0a-5pgL&yUk(cMzdgvFetY0`(y+CAd_w6_9O85=f|pQBTswj-jAxJcj0i2Xw}~M` zx!+0LrQ6d>#D$W%vJx4W)^OsX?}Ya5>z^qDr77XzrPnPIFM^RDOvS-dLZhH3dNIMl z5S+)(dVsiisCHHQ`9c}QxOXfLqoW%hJxb{0v&3|I;vt_nSjI@w-u)%KjpgqnK!PWO zS{#?(73&QoEjEBKsy}F7fj^&}PNhZ{Yswt;tN_{d=lgW%FD6L1fU<@~c3pH<;g) zTvoJM7+}b&&TqloxqT&;m-3{jzL=jRF3=45iV!o3-&uD&A_-=Np)j*Iw!?gK%ah-O z=Dc4i;Y-mF?-Cd2@J*r_;FzqEA`ybOA5tMiU*pL9X;Qbo*pzMoMx{-$fVOpAr3tn; z4BX7vw(uqIAHyg1yNA-pEs96v$xQm*$(&-5WzKn;;xyjTIBRd+?h8G4zGI7>j6!mP zTalDf^|rY~Ef*VGy&seC!gKL>Zx_0r_RX2$!+pU&d5SBW6+pGFPg>JE-+0&msQOt+ zMKX^7V|H)rJ;vT%39m+ijL}bT5fd=!{-MX%&>5$rhiD~PiDS)>GC}ys^0_|yqb=4Q z1m%wx5n>6N3z8stK?D##V*Zu{FlhUd;<6XDyH5nbJZx5}Ui!22jhuhPo=D)rt3^>U z$!qhT43&*T?0?{_QX{;m zPU3bWt3mTzea$U*K;!|kP3i={4p)bMyGQBqd4xMVn^f4_SNq8k>W31xR?^Ih20T0! zL#6+5Q1;&q?)0fM{i%Xzg(O>YfRYkX20MH+eDyJrLOPpo)Tyx%_k4!O)vT=l{=1cu zN9gI0#b80ks}8?ubJCsm?TYCf>qBwNJBj4{$xO2W9D&5`XI!M*)4)V1Lg)AU)>~y# z6zr|D4DoxE>73+Zb?P`7Rj3kajijn)^14o0y$p_A) zb@r|9){RxWS~YL(vAFrsud3b`9~v7!$d}<_%Vd)#kfBhj*o}WId>=NkBX2)h-E)&Z zBzIVw8XPKAlejZvpj#x92k*>Uf3o~8rEw4T3iJY7tsX`61`c7Ug+=(2@DmhUP2Xcv zB7^ueMi793)_B*jM%a8AWIkx*T07S37NmXK4ZL|u`=zxVa@5O;6eyMkhe5^E}` zw_PBxQHu5EAbz~tpQ--h9HgGRo0#ab=koufHzI?*LZRyuv ziU?ROV%~UI-u}`bWSqK3jY;Q{n_<}bE*^=;$S@&1JC;nPD&R=FD#mb}w2MWOZB(e` z67MU2$_nVt`luax>IyXFtXNe@I@+_$4_lQ~M%ZTR*Uxp;1R*4M4BuN#M$}uV{NIDh z$Iz}n<|SkkUdC=MJ{fc7d~!0_fWv@g^1Tcx3w=9c@J-L$021RQ8@HZw739tpGyPAAeka*BTK@r{~pq^BQdC@2q(ylC65L4-QK+I)t^?cl3Ow( zcY8av{BY6Rb%L(+q9nA_&TaPoaUT{fZwoV*5;Aac@4oNtUTJvlW9Q@8`Kq-bHM-Ms z0uiDw!+deoOrv2rSQFJ*Am}lTI+%(!3`ZMvB_Ah4mJNS_2S;l`U~njgL(4V<-F2Hs z8XSZ6_@`fmg?oB;Owc^o>H{`f=8YvoDdA}-fEeWgMJ_(@%xQoahk1gswSlJZnGz_} z)vfJT)c^$1m~QS?&d}rk6B$<4J9Jc;t&%}xz~m~jQrh!@@(`Q$Ydlsc=JDnLc|31} z67nEOiTtfIc?YU3IAQeLJ8uc4Ka0wA2MeLc_qZw3!~S-bE~T+wvs%WvnL1!s*el^) zt8mU^p!XBoTKmbBMLbj2D^S1iuQQtn8{)W9~Jv=hWeQXKK+ImW>Kbzh>VC z=<8TG8A{b!!}AI!UzlYBH_)qdGxc#o}EB`^@#7a^nZQxA_^nd)RI`yMdCNT*aywTb4lV(I(zAB(*ajyL2ZI z9M^Jv zY^vR0dCs*d&yYvhMOcpvUg-Af=&;Zk2u*B0U_DQ&dtliJFS)!2e#rAF8zymi!vFH@ zKVGH8V+K&JWT1*m^v&O+Zx`F2(p;wIT{_kOcHHm;UamyFxk=GldkQ>iEWl7T2@iS* zNC2^o*!d#pqj-||qH>wRWvZW3#y8~^V|a9fwp~ddLb*loUY_Uo=Hh*EA#HxgHsd0G z?$)9t3;R8`-?k7}-c%FMa7cdL+w;LNz`(z^;do9THOrXbj_vD%OPn(J_0h8lAXV`5 zARM*Q+<~uK_F&JxbmfAwR_8k$FuO}shLYL-L%dnyk-4(&}# zAn`Ph(*&yW{Hk^L%2ir(N;!T8O=>GQAt~lvtBXvuBxUpG9&tKk+%X!uj8@BcN|EvWiwOfHRhr_LGR*z9fJyc=krXw1 zW53;xx?JSAOTO%BnCNb_#YS}b?$i?RN)5xUYG{e~PSX7M){wZwbZ<%|D+NWYKM5L{ zS}1iCycr&u=bmMn|1{JYR^n+kE^P?-;KnS*cpugiXa8{-}wVk%Pnz=aF5E z)?FLJYQjv+mT+A#S*&+823OwVY4l&L$ENgE1p@uytNhn($lFEN_r4&GC8IR0zx1Ib ztCZ_vCUk2>l%K+CbaOt+M##Pify83z#BP66PyS^exMe*O z{(BbL_)g)6a;&6C@}=(2YPVxe26MyBKX09PZYK=l4|VT0uiGZ{EaXx-gu2&Nxqlmi zuMFWeGqGXp9x;NYASf3evYG;$3OBNMOg?pQYQi@6aiyMM0jSQS-R+py2u`ud)WQ39 zl@J#^0bnE|)Qth`($b1vV`GjtEEGwJeMJklb zu~;zjvGpi^s<+Su4SStv)c4_+qD7YhMR~djz%Qayr`-=obyGf-Y<$oM_h&1 z_)lJQYgtjfS4g3iKR#OsRa4DIcgoHZDlx+|jTWtnn`A<*2&Gv%6Z&KJZ+drG3d|V6 zksXK z`eW?{1_wP<_@b-PmSG@SD@-kSxqPf816#~$5{q2g-dEdZ(K#|YV&3f6tXVV4<4BVzg0%b%3oiWc5ZwNP7@0jmwu09GMw(CEMJ>Bt_h0j#qZ8 zYxWm@vV$*AJ#q`1I?l=cP99qTKU}Y!c9%-_HL6B>5_AzS`GqZZdSxt12FD&~UQFP` z(~sl0bPhF|5oUu%zK@k4-GYW4L5rbjDTiwfZa^7XYfW&Y#!^FajzCYk`SRt2F789YY(_Z9{Ot;b#^$^7TZ#urBK{ZPZd zwr9pyWwmccQnIVxk)WCz^U)^(ULp?ND-?M4D(OE~$xhyH{=r79;|Z6Xg;Vlz723w* zd7F#1wkbn}XEY%R9?kt5cS)oE?C(MA{q>8k7Xx$4W9s=!Y<~#P+AgQYBj_0?65{ar zODK!F#$X}YdtrN%($9_8nK-Z4ufr}X&u|zXT(pZQ`MVgq?<}`l)i@>IrWmkTV(WNl zD+@31soObC>HT2ZqAQ#WVR-#vt8_HNoLXdD-G;4~zwp>$)wVt%+VWhdN%oipLR?g` zx7J1TE|2lxJq4G_ft=d8TiMxNqLs=>2G2cW7I9OlGF0eJ7ccSQGrznk|S*y;776=?9SPjv77dje>Grb^U#AZ&PA zu#ou!Q0N0|{0T2~qYSpCTt9<4Tt7T1Iw0(FZj&(zX4kLZA#X)CC@SoW{n?q8llf!d zXe%xkno-K*VP#6x8PWIi1VvbYpNSG%QF^PqC@U88BYZ0W#!Tg38_2Yp@NomVV$XmS}}N#$&PCMe^w*sPY@8637K z&ZiD^Au{wG|B`>RkuP9dN)JOm7Z%D&QbqMxadOsHI5DouOYrT^fBzfudUj!9dvJ|nvO<~_Ha_E&SFlx``nsSt4g zbSV)i$RUC@u4lB@-jSh@z@t*yck@gi;1sAalo)C2;Z2f*FS~L6PF+n6Y;Oe+|2C~E zBGyQo^k@6FeW*v4Bj#olgLLkc13oa7-i)nPb)0Ie(PmKt#uQ*VEf@c4q?CJ3$hvyX zKf*(btc90tTP@aRTO|IKReS#_6Q5nKM%*l;!wO}T&!K6t5q_kNjy((52#%+#A#F6w z{roF8^^XmOpswpDD%f&_8ymhtS2)0|Pm(Jy`LPR+ao6*xbdXEQ98~Mj^`GP?HD%~4 zJ%VkF3pT43H$fUa>d1C@z4j;9n!NTci`FHULni`()MMitGwzNi5N=jNY5?7EuIe@K z`Xk}gGh6Q6hKyCs?wl+c&EKYY&TYBOr~bH0Vd6)08wb%Thu807CRR_B$j`=yNKVGy z*-0q>%?!rBztDRg`&A-Q%q)>qc2QwGo1I){5Do6L zy9Lj~yz)^tl7yUSC?Y)ltZR;Y6K_?exPQ*xW-^3k9S}FnV1@h0`<;dOGr2Fuwe7)! zSStoq1S}U_14;Tsxks@!nP-{cn{0j6V4W{5K_Ur$Bj2+mh=GH~i5*kWht5z(dUdNt zw?#_!7XqGTDKFSQI%vLCx~0u!x@UdL*hz|#d4S#Lt7o)P{8dNuwIf_6HNCuvE95*O zGC`vxyZeO)+FtOYo7%%^p0pGqHD^;CUm($cR)FCPUk?)zh@U{5|GADb)wwH48l(sc z_!+5Z?Mxp>#LsIQLV6lj(eGyh59Xf-XEVuVFU~*$qb!JSXsRpTf0m=+cX8XzjDwNT9Uja(i z4#5|6*TQm|2rd#}@3t*50R_44FiZSy$9!=9ZB5Ws`rLb5_o%DCVbhfh0tt!!YsdwX zy4{lXTidlLR{eMCy}iPFtL}H*GS+W?Gp%@fT9;cq-+6Yibzgl8X}?;tP~q^4CP!J1 z0)I!}?vr#bY&cnS|E$&PocZ?$y1XXdoC5mbKXieccf#9+ir(9!?;JfZ4piNLi&e$T z73qRjsrAn7+F?ubuIH^jYB>~WT84YdzucgbU71`N&{rw7n(n<`9nDk*dOqjVD zeeN=)8L;ypaR2v|=go}Q^;Z+ht$EG(@g{RAjcUmb#autv$e`;ZhU=Cl-box6@uIP| zoA8dSLwMlHk-Xo+_jp29ZoeRl@?W7ziG%7#gsS63p^QexDULq}4Dl zfBBHtvC^McevpI(2cBT{CMK?k-y ziu$5yAVV2ECUYNhir4kCeVt+j&DkY+#ncv2b1#oyt~l_FDYwPSA@~!~rc&rCSq6AJcR0l?#XQM=$%PXm6QS9;qW-IP zryGNdU0_KRr6esUYb|AJQ{^rQxOk1@`Q&#FB`Aloo+!x+&+^J~wwSz!=jkj}$Jji+ zIr!P0Lml;vHkSnSF9QlLTV_Ud{iTy+`AHhWL4ZsN>WP*V2JY#A8bl=A0v~xzZW!@~ zFJl{yqTgFm{OkR;w>MYgZDYV)&vWmefnGDJppL7FD9@eE;KJ@xC#BnRCQtXB*b7Yr!%k0cwXav( zcTX*y(_cQ%a&WMUGY>eDZ=?sB60{80M-o&{PLAHpq?&|Fn?e}oL?|;$)kaiQD6%?K z`$&SSyK!q)y8E+bSyi0hl7E!S7qRm4^5}hwZoIC9W;XXWV`YM_=d1U!bNtX{uIe@! zAVQR)owK9kemL+tx1&*Q>EA71;MI?{)44VO(_MO+;wAr|niie@36lR-vQ9BBbj875 zf=U+c{^^Up`y}nR$KTx5{4Wmd;<2ZFyugF)rQG~>=)edcbwEqb0qSWz^#DxQRQxm4 z@SAe9<%m@U1U7kc+~-jrToLBH&s{oZ!CvCB$eEwprYmjHs;wr)a~XGeHQ&Uw#paSa zW$0osVN&{Sds&XjOvFFioaEx!Z1rdb6v0d>X9R({m2ZGgcs6-rI+f1IrQ)L#CVA#M zIsU-yZ5ra=%~A_u&3z0kBprwQ;-BWLTI3kzjs~jX;T}cRn^&%-eIh6jf*jeY6xyP+ zCi@cLcEv0cJ1xaJgLcxubM+B zO!r5Rl-5KZyZ@!Od7RVHvF3{S5>N;aGE)Dw`G7gQgNSY!h#I0YeFsXORL!o=CaC;4Q2EJwnFX$)tN|+U ztL0hsgvp~l9ftx5Oo>mxk|d^`Gy<)jtRCyAQ!s;EpOMfmRQ=Dksi7p6SA1*9m-DH)yxG(_>S?$1J4stnnGJ?tm)E2kg z3N}=!J;GE*DAkx`1`2q*p=*HW#i6F-@tkyk8zWwx63~J(q$W&`G(AXR-M$DuPX`lU6qy2Bkn?r(v^7>F6@4s&=9RNL~FM z6fm3Y4(veq-b446me|j?^NbZBtSmqZ%hU?6lIbJ2x?xy2a*b0$i05Jc{@4{$*(i?P zGE58JhN0ZK>q|AAjE-I%-jBrokd$T~_rvQFmb^~T2tLp~jre;Dm$*!^$m9BV0;I5Y z9_e2%PvsUUO5IF(?xzK%Zv4A`wKa@sDnI#}@st2*I`$^s=j8tf5JU4;^;bCa+h32L z{1*35jPsnCdZW&-ZV@J`k~yR(P71M%GSlt``YEW<^1K_^L=*c9-iSF zx>bUc!~VzBQzq3?B`)p0p>zwK>Y5+K3#vPVGCL0M9Zz@Ga89p3#&4&YOR05wG^O3I zVD3&&e>bhSMhUK(9~>Nzde#jrLc{M`{&MgdO%=Ydq)9HR1=XNRm^rUd#EUy`691u!v zJ?BlGOmj&dr>u_XyRbV=TD{>l<0$nWo0(Wgk^$8v#yseX!Jp=HCfqUtZl)dGzslJE zW;|-|TlxUG)-k{b7HdlooO89`Z}BilCxy+AoHSrt!mBOt7-j8?A89aul9QZ-^{lSc z;F9!Fz!YJspve(nC-enz4_^&=sw$p$d^`r(Jtlu3WBs8|wzU)Ojvv#z`BwVP9{Lb~ zd=Lu0;wkTBHL8Y{cZnrrB?KKIQ$IZckvK%LD;Yqn+W@g7m1Z^wj`r=oy#XrDNl!s# zTjDSmXP+U>*b9tS$SQN|<&-irSpBGUd0oC@J;rfNIbF{;6_8N#;p^VIr5E%QMpe3f zb|<%laaLIkHe4E4WTgEC$;``bKqy>o#sNWe8w?eU-j*%tq(urFz$?_c{?3lYx( z*c)ud9g$x+MTjqzleS;TRHSms>u8BWl5mT@$eh#q3-J6QoU|mVp6RDDznKj8r;K*@o*c)yT9j9$X`w|R?@(_j<*V{BP48WZye9#My z?(ZX6VHs?u{ecGAr5^+^$@;=p4>C$FzJ+jpS-AiC693y8$DnAoi>%&P@@SjpPn)Hb zLeiNBVbD9-z2A%Kyr$#}uvy}ZP!8rJK~CsLe}xdyh%Ggtpx8&)Ru3I^SV2c$3SSLz zfXI})7TeE`1tGcJb*p#L7wnR{hHzB&EmroH2a_pj?JQ_2*S<8ZqAEUyCxj zzn@Mo&G*m|lpO&DJH)3tlT>lwy;x;U0Td2B%Eh?59G!hP8F!ocBS=BP~%$!UOjHw`Bj`m^+vE9N&(W9KW+FAkT6;HLi63J0r za8%dYw@qxsMjt>75ubkEOAqtV(PG|s#(DL+cZnPF`^3T{yeM8(l`#G%Ferg<1&A zrm;Ae;a07vNDz3H+JD3A8mcq88CTi{iaK}>kae%0 z(JzyQC@DTF#|4m^K>sth;#a~5a&uWR4?9h|Sde$*?%zIvl}>oRA#960LGmZJsP^bw z?$7;J@fV16@O}_(iSglaXuw9qlp^G{(@;9l1E;*WZR*!_<$1Lm2*8zByf8fSTmAW4 z(c+oL9FyX$6Y@V=#=59ER!%#+wZ%Vv#y@^O9)4SIL1rWi+x=0l#E+)NWot)b&7AnN zgn)!FqDV-K{(1yxedgi9Y3OCvYvPn=*j`}yl& zK)p0vE0h->D5^6cY;k@d|txS_?DR_`6d&mLIDj$8dVEHt+YVr-XSSkQOSE# zSMjE+t`4Aw5H-hTkbPPF*ae|+&4KuLct0Qjy2Q^YvV|1@pAS`Zc(I5MgpXZPiUt6p zK;XnJD(4)hHs72gp-Jz8x`?M(A72saD@dQ%y*8daZE(28m&jxNMmFvksTOcCZ zv-aWoo0Uq|f0z9^p9SCa^i|C$$A50%wQt`n{9lO9UMO@8Nuh2yjPu)OZaAn&a>=;c zKyq@ly)i6k zmEU~x)a&~Xt=Tv4k{{psKemTDrbjn|YRPVhX`M@2?@5oLb@o#wJ`S~?&)^Da`s-ZZK?| z3J3<#;wrrSG(6H~HZ5U6dGRRZ1}vkgg4BSmD$vn-# zKi`PJKC8oatpWSgv~8a6S*uLd05P}uJ~b-dqC~fDHSL?0u=;HBxTzCA_m7mx?@5Y4 z2n(gz+;hdIvD^aLeXn{`3zexKBs=g6tzgZx*f(p}(<{KXHHARNe6H5+BvS{aU%|_G zhq!_NBtl^6;~z#mEdi}bj*bi|y#SfF`=t=YT#5Qv(tlTvpV%7_;(jtRRMvHObD^po zwU+mJmy+Jx_EmL|8*5lL4`HFm%-+QoGy{N&`aIHwD$&J+-6@L2#qpN*62G;7j$i>{fUIkJZB+jy0IEfS z6U z1_stN<#VATxPy`w-}NVDf}qV&)=QMS#_c|^`Nt+WFyeC<1F%yycAR@u z8{d;ElG)~g6{r&J^ZL&n!b*gspFc4F8$~dhG-)ENsj}e&5oIg15T1kN3pWT(yZ2v>%Krf z)_Ftym~X zV}K9vh53tuKYv)nYQa1N5{4Kg-=dSju#?to;$p3j`nMP zvEAj$LFkRKPzvN0`uST0u%GIn-2Ypf05AAx<~)wHRkTW(e#lyt4rs z)9S0DVF~`$mQq6G3#MrU3zd^Va$t~o`u#jbN7oCz^X;U(SUgRPQvg^)B=u9*mX&g5 z1+@6vyIFmZAhOg&osbbAADgwx*RVY5nB^@}F2|AGuH+!r z^Nypy<@Alqb*e%eZOFI^*0XTKITGSR>^2aTkT4Yl1#ETN9JV24Qo10SC(3?ERO3JFE&KlDGOHu-oybHkLNVIi4U#|_n~YRcCC!m}bZD;n%0T|#e{S*yr{otv6cwa~cXrb+ z)c4N;n>&|b&#=vfi*w^-K`}Kun~>;|nUiB!2Rkf>M7*Ut$c(LC-N-|6KH~H(^($;;sSeA(Os^zj{^1aJu0ES6(lFLEbVrW za}YPUN`KQE80T1apdQQi=%|#5iT>Tmlr|~M+Gp94sUbE+we%F{o+yGYo=sCFtq8P?~$+=5Eby*^oeJ~c#4Y#b>Fy#d_lpoB=rMqT7&{+vgS z$SYPIUWVpeMA&azj{d~4L3yywAML}Q+c#b9A^(haK2)bTf@OAAUa4NY88K?5h1}gx zKT`lHsK_?vnM9Kp{)0(xF@pYJaoR$#SOtNZa>nGewG*|tP?JOH%W?c+xgl2K^!3XJ z?Wsv*-r@!zzq<97|1C#|`wS1~6zRvK<3H&1{HgQ2y*KmQyfbo3Y#`|RMvGf(;12G-Z{KJh`pi6H z-lr2cY1G@Ni$P+|d@3ia+40<(6FFgK_4Un4?d|P42k*|NC*>@-z3Q8^g3~VZ>^~Jc zVqw>_H=d!d%+;ZJGV-_JK!3}Ki?**V@sTl4-ukNt=*vhHKLv3yP3u$UUB^J?X6f_D zddyn|whKSjfyE?tN~xa%9LLJ)&y{jLXnwhXkVIgH@!{7=D(&$6kkcUc0Tvp3_ zNqH8FC{XyDX>7|NBbuI={(mEjf!49qH>KqjUhjurU+6lVfjO(h z<=!9nzh06<11J?aOysW(qdo9)t@_bBv4(cUt1u0)nZFIn;njCkFzv z7f`DS=n+#KNePrBIw}Q_hP2pJ>ZQ*BYK90!74PU{Yh4Aq3MF0Kk7Yn;=6piy_vj9} z^i4e93Pu@{E1}2}_^j)pWm2pywU})&)di1mZ%7N$zio`qpom$RD7Dy|P+Axf1LHTU z?R)W;=<7p$&qpEQrxuk?Xn$Q5Q-1G+5D}@NAUT+@mcF9)LPz2Ur#4fFlBjt(V>M*= z+ARiRDaC1yl~<};96JbRxfqX?sS@fqcKn`5y?qVLmp>)8BDpMXMdW`TmSX>=j; z369c%C=`NpQ&7CFI=ti~QDkvS4)3|Q4Za3-O`{OFsmly>$6Y^hwB@vm#BI-U(#LIq zfq~%&5!6x>Lhe_7e31Ix)6!XkLKj8FAHT^1`ov!<3#xD;mbylkfOhx0>L^gv?YAhR zvxbS9ZjDy24Q5)GPX$x7Pdy!jVm0E8k)Ep=ZE?c~~1}x~wGoZ@Yad%Br|D4RUHf7%VTtMb7 zXP%9$c`M&W;cgv}gm+L_o@z?%I8t=f|K!Doy`ow3z!Zh3oATD5vb6ei$NsvSUm6Et$hpGcsMYTJTngiyZQ zm})APS*VFAE)v2>zWH3f^mcWJnWVkoo!o z0$+>1S{|Xpx&g#Ya{ek^F1C2`)HtL}-W>GeO*jZTqyUlR0^{P9e0xMz-TbnucZgcf z=~HBS{faHUVp;P{YM^sEurJF>ihoY!T?<6=1v7O~kwyQRW&|55er`@a?-Y5B>6{9c zy?9w(^D1L__guSZkB^+39>W9|Rp~w?!H3h9d>xlQ#v#_q^9iYVZc2i#7ZOkc4x*w zj}z=S!U7n_*}hO%!j)cp#OI$eqe*qd5gT>D1_O5~H?@gZjJm^`m@6r#Pb*P@{RQtM zxk9cK#rS|~Q?vfb^g?@NJ6VJd-x9@;Bl|sZrRTeQ>_Rry2!=(B`}*SPP)sk7?{&2I zTItg(IjeF-6&k%G1y81ed&HgRXI5)3N-}V>GOFNFwkf3a?Lf7~Ku8dxsaX>7v-aIN zyEC}Ezah#~uA+X?JjBx&KC&GCQ?`bXRHs3n8DW?VB}r*8`NUuNl|O9*>P|E18SIi*pN3a{w2RabUur?L*2iFMwN9q2!4+Iz^ePQ~RG5}!g_E47N zkF!NHazH`RxIFDiQ(xFz^bx<`*$^2=KFYTZz`Zm1-7V6#es&4rp)oCaPB}ISs78%p z>#iOwInu8WUD3!#VPVxbH@9+j!BAJ=F~Bsa1tbI=2hwEK?%o62S-?tkhID*w&_Rc6|o_KNVF z#|7#O_uAmWA!gbUt6Iq6pEP^oQf`!JY6BS?-|MpN@0`eZkz`l;asBQa@6B z?3;PA#6H%slMd!b&f)vsGu_cnn?Q>APX&X)q=;wKKOdm={{N(ifTujgsD2l^2Jb6 zC1Bu&Db+010Zy1&FEBeg&6Er9EQ4RacLij?kam}4j`adi*pu69RG%BU0;f*ym}Ua1*f;XE|% zQBGg4fm(+6r1ETZGP3e9=^ErvQfXtkC50mNhoSQAc;0=m%3Tdc@itb~9BjM9(rhjKCOjnCKT zvMAV=(i5G$R$c)M%2I8sbdq4hNTF-_lUIQ z1)*ZHD3+;2oEvs9+UpE)qgHf_0Tvp9z>@65SQ->MG<8&~`KbwgHB%j?qT0X@lm&JL zn@{@#LmfV@QkJ*wvD!yzN+3vfljssY2S{2Ev?>9{Lx)l;5uZcr$f^mONB4&3qzSQD zR}qz0}=Kz8b(mE8&FzLs0pw z-c4u!Dl*HK-PSV8U#tgA-}r3*DbeFEO%O+OAwqi1^j$ge>1&q~YvV;|z52GbU+_8|OF~@Su>fdjm{1Rtq@m)Y|g9>FiFuhA8K5`8d>?qTE2&YV3U5VhhPl20Ap;$~TLme1+ zncrz`8kMqCm~XQA6|~i#vBaj^C{xJp`U-jf2GhY*$t{D0Qx(yvjHn{T#8}^r0nToO z6#-cU`}HPX>fa6``V@GOI_Ow(v?seY+a*RuBut=MlFA2rSxz#ia?`H44)TD18F7D# z#Yp%z$Lk1(Sci=pD}fB@1%@vZl|y5p>Vh~%6{y9(uuF;MG<`ytPke||p3mq%7wZMN z5fARG%-NtqA*2gH8$9N1KeLRBr~6NRNnwg*&>UvV4SuzMg4dG^BpYKV5Cu?!g3QXl zf5|}KS2n^U;{ssFmG3e!&eS5QrO18U#p0LwR>MZtNApT8y~eZRkAe7p3BH`wtZosW zc2BgcT2o4AU)cXv07^?+b?-8ridMSK{&dVM6$oOlUhYYiZc`WTjBrzmjw=~e#)Hdp z=dr*ol!3G9TSnant|dy_jdTtD2X^oh&0{8zz6J7cRaK>xnIZXx41@)$Zk8J2F$BGc zILUgB+0r_5`FZ*iji1lXa2)znSmQw11;&-nz_ivr7gG1wOD|ekzvl+2At?#ExCY^y z%O8>W-czn?VPIoP6k;Gs9|o`By5QT$>e7H(Kiz9p(m5^VfXlh(?zos)@EO#H7wg|i z(pCIy02hDCKU%xgK~qIyNpq5Vbj-Zj$BhN9zwM5kZ~pEOp8td1bh_$5C@x81*--XT zxo~Y2Q4ZizP-r1c?yP&oAA%<*d@AF;s>*G@72# z#6=4}{CjV-dqz(}sUUE%zdrZP|CNHTBtPDyx5cZ_`Imf}XOTk6y^`EF8?Y}_Y|S}w zIU((@drTP=u2Pt8x|`q%6l?RgX9aE}3cy9QYg%FiH2<+a&QMH>%-tH)bdV#;2sm~S z8^Hh;A{w+=Wz)W%M*^lg519J-bV|ROZ+LV`K3ZDb=lp>se+Iw#%OQCAjpDr0S`9sP zm!Jb2e5PdmWYta$_*y%6 z7IpY#G}F|LWEsq#`~_9dQl5hQUn%YtmFXkgBftOpW4jl(q~q34j(;Z#-*&R&TA+3+ zxL@5IE46NRJ;!RhznF8%65Eaew+CG)9JD5OH8r+%bfI)GI{9plo1i+20hzn9BEY6& zvJj9f1dEh)P{|3BlrBcbH@a8xn(m{|nl`L&##^(%l|pX8U(EE+aUR63F%J(?JNr(B z?O$;zcV6e7hR`?9f0onpeMZ9;aRW>E z2TDnSNrLPjebnqg|Ce`c2`mr{m#-pZwVmOF<~P^xPIo@cDq)K1RY6)0TI2Z6z-(V+ z&QH*^tK2ymh3Mbaxh}f-b?%G=fj>#yi+>K~!6_gD44DRb{%<%)+a<6WJ&qbhITkdj zl2fc#2+NRHZ0e1p(V~P|3MAo=^N{0bz0t|Pvzb7OLI%J{HmHo=fUy*;*09{HcVB91 z-f@IyBqs*k-0cJo9YKGW@4S5iTAw0w0bvt>LtUl&`(KQtl)z3w6UR*0vZ^EGU-Tt5 zSV!ePmWtsVCq=*%0kfT}d{#1VxF=bV{NeWXm1PkZkSGK;LZ-x`7l1UPbWqgzS+S7G ze^TiX0TL6GS>%7n1kiU?y1jm0LBGXiRCV)rg7Ma2>(D$Ikl*19C7NoIlc&!810pF& z93nu%!3UtHJ;PoXp`LTX8M<_5z}Ypb88Qhbt7$(rdA~!sMLf{IA(8z_7{OJ4HW4K6 zmaIt)x*2sGbTwt}Oy56B_VVkMRP_io!fmoF@+f;vs@2H`IPn$-uk;KQ&`2Z(5=0G|2OpB2g z4bk^MV!Cp%3zJlAfZA$U)&no5Oaz;ZxbANtsWP9XN7s~w*k42;2$MyS1XA4Su}iv; zmRYd78nhn^OGFy&9)3>4c4^C#JGk8WR$1e}Q$>JuAVkL6fdsSdR?-6x0kYXu2*c-Zr&E&RjwM|(5?S&n=Tz<|UudkT<0qeIW9V*n;c?dmWP`j6{3 zhK<;r>)!y2jsP>oE3Q$E@$oL|{iTL@?veA~$&rN3;?t_P7hG!B;U2_FXg>BOEipc` zJv@@GbQc~16Q=Q33NvG}$qV1z^QFH0dyOI>(Kt(N*@|a#cnR1NFy=b-?EdpL%84!l z@zA{w%?MpfTs;n`u7SE?5jHH$J%B%JB*u4pJuQ4B_I7JNE$iZvME7M6tDe6SWsO5A zdvf2G8v82xkPlS+4!VBQEcNJyiO`JQAp)B|ZxKG!R4S3BMo|r@^hLOG^eVpn%qwLv zVZQ#@pA1tCoPB)m)cs=&H>ye&>%raW8a;^&X+-rK42Vy6 zD?t9~$XIDtNPNnlFkInLS-r%v=w1e(F4*0+?st%U4kZ@ zT&r3u#7MT26~%yT{lPX{J}^5z%0cK>Zn^i0DZ8~Jt$sI>8r|)&v09gsH!v$-an30D zqdkWL>1ug38GBQIkKJFVj6FAg?t?59z6Sqw9_O4-d>R04?bMyzA2NCD+%@g*hJy_G zp^M}>2kD|sAK<#tV@qF$WoFxoQs15WmSh)a4t{Q4wavoqi{26zU(ojpy9!~`tBFS; zj7UXG9*p3UcQo5cBnV89Ej_gD$%5X`oc7ZH!%MW}PdaQ(865g4 zg-fCGzK&T_s42*XZTo}AqW`kgQ#QSUWJErOQ{qfbVdfGz%YCzGJ>CI8`K+R8%~&EVhC0gqxVeq zF8EO%vq19K7+-bhBPJJr?jMH^bo7nh@cl^~i1iIaSsm~knbhsq=lZVoCt^u>@(;hM z!Y>qqKfjGtzH^c28^k|e)qiCL9&9MVWmn8cvTD5DX8dK^Gm?a`1V7N=$uF7qR|}n} zg%X0Ht>Lk>nybFMu}+eMv|JHs;kM;l&R>(H6WKU2TOOf7%H)~ zN8RtA74XbABRM}jkB7?3JxB-&q|xDC)=|zS-3c)+8UAZeP7%his?gM&7Rojvq$&! zUIKGyyS41gL%F?S-WMXsSiqeCi6nD8c5&PJz&>lukLz!|s{SKV5Z6s2uKmb|L7vJ@ z{hjISCxu6A`1g%LZrm7A;cjNxH#v1qe{dnJE|S%1H+HEA<$prgOon-%o)^GUU#)NqJD;#86nz zGdoEBI6ab#8MkX4_rr*9&IrR++iAVvOl zzfNK7>@Q|%v9z*6!EMhWjw6l?O+GOr;cqhgytW2K`+s){)L#e#6FzRC*Wehi1#z!D zhbG2>scU<1Th$YMCFfH}h%n6p?-I*<1RWSabue%v-hC2)2*n>E0hLX?f)3T(RV{*OsOc9#UV7^LcIql26qkLN zT$<@E2NXXW1EYe16#`kO1F<4e_M*gNGw;z!%EB{wSG9s%SH%iB0Q!44($#M`+EiR; zn6bTIsI2+}TUo`m3Ff-lp>Af`PIUdmrr67mbgcL8F8d$i1?Het_2_Elwu76Yb-{uU z_}g|-+;>lcdiPP_``R*>lY+{KGO{#>Gi>+`7}&CA1_jq1S}d=$eG&NSnN1lipBBpl z9!sX^s)?AEd!$QZG zb8_!R_Q_Aa*NyHUF82O1(vnIN)9w^OJF@;cn-^SWF-eD4B3<>%V=L`6Vl#@!6Wd*o4a4wrjMxaFu3M%U*=^uluQ`q6_rP{9!k#Ws_jM z;$XU++tNr^lbeu0c|o_@Z<-L$*$?6@v=&c?YOP0JDcL)?CUTElj^7R$Jyu2??Cloh z`I4=-MML36Yi}D{B7J75irdO#n@y;;ZIca${gKULv&BV4;h-J7^FKd#Gd4ougb+WA zKy_IZzcL5PZD|o7Y_q&5FP+wHi@LlE;%m&n7_tdb?g}X$4GniT5u>-e)x2CPtA8+5 zOhg-zLV$-OXgg->hO2?8jY&=tbi2b}Qp*uu+Plk~$lxl;Q`-;8_zxy(ve}P;z}73{ zlP^dYEy6M@WB%}V2z+OFI_V_#4@$$$_4*TS1Us94K4@(B2YEgrR~k{whYWcDYHWr` zS)vtdoBa;u9<&ZU0-7h<%p&5#i2(6d|M3+&CpXSa(tFMHek-gtefG%m+f;1;T6EWK z#|YZ7{tB^9uZaXwQQU8-U!J1}p9BhuVxo&+Ms#RhbvSro4yZ|EpLdj&1heIzGfmgF z^Ruwxtrq-_;()D6{ju2WiRRRy@BZ;K#U1R{f`E^Aa3Ur9Wzvt&tmaqcp;D>N#n)@* zdiMwnx66JL70;Mmjo0iO$CqRy%nK)Y@*G3dP<+RYb8byAv36(?m+U4c>ODb>L6bZF zSz*VRJooE0{W1QQAKM?D8vBFQw5`Xgr`%oV(ZLK;&B6FV<*S#L*s)o492L3t7*m9Q zWCRvftu=$}Wi)ScFb2TL>-O(%9Y-7?*QaF$5#c5kbi&UGkzO>}TrkRYhWr@rn|VYX zJ?jl&kZ8z^o&t+gl?Is9gUr~daLa)t>BvG@HaCQC6nKZT8U1~q`kfY-Mr?}(Y*Y<^ zIBL0dn<8TUG+_+M{EVURSY}3~n*=lRur^eziNcwbf}S+~5%hI1Wr$3&^ya9ed@apg z^^x8m@npA61j=+GzCUq0DYx@L$2a&jw-pu!R;Fic-Bw*iF_5w82YDP1Uxc870DU;dadZ-J%yZT7HIrk=;2XRHT~rBTuRNh$7onmElUMphpm^inWFFG6uG|=;psLJJH5`ni7qMtVq$Q0T0|Dr zc-rI-LAq2+2h}b+0I}WO)uNpUc_F+t+(k^Y^EQ>x<*h#j&Fc!nxk881^29|_xBmUN zNe9Hs)~;I9G!lrHZEd)aVr=QSs+r1_8G@(?^jmOaQ3P7~N83+F#QAAxlHMMk@c)YT zy*SawZsViK8P&8MJKx5=ri}7ko}ZmFamW#UiXDtlJom(C7TfUM+(@<1H2SR=D{Kte z;(!PSvGQ5O=h|wU`qCUXOT+SQm1vN4OTGAdRB`E9h)d=g&OGZo0bn`$jCgPT<}r1mzZPwRU0FO z{*fBWs~Xpz^{yw2mCokh`tS{ydVYX_!RKsk<*${>SnVmD66^#Gq-Wk*0u3Cqgtuj> zR}(*fa=OQGEg(3)Tv8nHWPk#*GcD-4(QDDr$8hR@jk1NOBOG`e?xGo0*hT^SRB9>-7X;1IYp zqJaH6V(m-KXslJL;3L>rXbk1md|)O-T0bqpK%`8ScX~7UxI8~YN#tNoq(5hBKAYg1 zwNmHs`2}8xZ|E1O-JZEOrr%r&54yrP$aTW`R(rFcC2J>?6>z`t|TO7Kd#;&4Yf#_W!Q9`@ck z@;vq%b$#aLYN7}ic^GHZqrjlx!sib|CHXpj|K6d>%p*-pj|Pc1YW@LlmU@-4Rp2Oz zCoOi#=PAi1VqP?|yI0)buEM!{=aDgT9;S++D%y>(U3AcQ&$&8Q@3En8t54@_Wy>-` zc55-G!LzrZ!edKO$*Eoa{t)-lUMU}YH!%|MXIwCpj?V-6#LcyqL!Y?TiAI?ct(kA; zBmTRfw%K~uLw}P(GMFN)D$t8juE|O;nyt&(8$BV#Uc2QDTSqJ1gv7?nv-w>(P&TjTL^nDk~|f92;8 z0@k>C1V}MM9*f+O`d2%}*kchf7{f(tj52C~(7$neJ?`^A>pE{DQ==GVW;@1BZDL!*Ez#!Y2F3bcQ&o29(2S`&DP8xLM(f;BalsfY35_NKZG7p;E_U zR6bL-kfwhNGeDov@Zf3i52PGG8YWv0 zJZ0zpwB5mhRaI9u%-#-Deb|U_-Nf>HK#HVh=eM>F(-#c(jDk82!ODP2n?4`2Wql&r zn^8HibX=aHSGNbG;^P;OI^Vw~we%0@?>>jPJkdO2pEutO9rWppOmR=(hOliceZcOt zAFPxKYD^W~wo4i`L8ft<{VOM(#1jr@!FQW)OK^6{JojZ-DE1u&O*(knNrA`?r76`= zP^nbC4*z2kk#L;MNX#zIFumC=7MPJS5j4QbHqRPh$fIMkBrxgmOXuZ;IY)^+AHlcW zs{aZc-m&~`2N;0&``g4z4Z52#EmwL7fzJ$@Ikq@h?nc4+TB;-iBH|hXxEcUf72b3M z6@M3Ae=na7$qcF0u`b4(I_QJOP|>`Q35boVmdmA2I^GknbzcebHf9z{1O%Ajed+2q zJR?MxSh;uk^R03FZMrwigg!z(RJeI<;E%=iS8;7sqQFahN)-j&I>nv@ADM<1Gs+Gu zFvCYs6l_4ILk1ngE?lL+i%2=~o6WGDgpoycI0-V62_99YJmxj4I@;@DLOgBtv+)xC z=nlu#i-So}@j#BBnTNpXq{AF73xqlGJut7M&TRC(!(e4joVkefa8J9#e6SdbqsIr5 z^hUgXJkD&+wuf#iMGh<=SI8HTgFBP%8_d-qbK%d#%W~<8m180#%=}jDh|!w3&FSVe zdAv+>_kmm}9e*y)F6tB?A)e!YP67t&6B4$apmTyrsRR$Uo*;MA7z)suP@FMbzKKrR zQ=ND)bRIvTqPMqV=VUk*NiJQ=y89;AX|6sN3;TZc(8%nf2`q#&()yh27dcZ!Y-!wU zsM2yG`-KEG+sg~&E{~`}@lSX_-xuC_u>|&_@1bP928Ywf|2~7a+-(nwEh+{h8ZcIX z&s@I9YIw&&3B=}MG~CnA-|q8a`fC#}vjFzqxHq$DZ4U+*h-3W7y2Ym!iE^dejvF!` z!c0Mvm$?Uo{0Ynnf^p<)fZ2I-<8ury#ea|zqp?x5f4cvmAg%^aA&An0^W&t2aU6-+ zuKQpj-df2II~c9v$vU5aZZdVSf|nS)epy5b3AoW0D#oRNCIoegk(Opud$RP-7y6T_g$z>SSzY zq&4(Rh7|zw3ojrpe8uaUNDHKR zynE7x=g5^?!?*sMugu}RgeI1QSblZ}(10k<1f51&@Y^hjrJeaL9moodJ)5aC}t0yUGpHx~IoP|eHyQfpWd_+l zx)aJ>T5Gc|?UZxVkI&(g_><^A!@l1q97L)9h`5;J2{<5_Yx^>TA%ecoP2m4tKJe9d zOXS1+)D!(|jv8}G@<}Af!Z+H>I}Fbv*iP-m7<|RY9U4n2yx`iha|;UtWNhIn23DZSN|fuya1ak)Kb9<`Nl@L`}LWMSo2$BEQ*R)Ojdw? zocABsi-vqAKo|>zY!~=*L4U(~U&D7_+1YJSA|tN8q@`s~oBPJT=^*?sI8et7KYe%( zBUkB-k|3%!+ozje1l$@y+n?KUm-p+p4*AN(391bAVqTV6#AT*)Daua)l1~`!%Ku68 z8IE1vuy>DXMib1Y4DQ~25KMC7es`jvu*4K*c*0s#p#WzUPv6M*c!Frny2$_HUpIH= zgBOk9=~|BLq9k2y>&M`IugXSF*pW>Ew!c6kJ}&c?E-U^3p?6WLm{Z?5x!F^6f&kgy zA9cjQUjlTf(FTLc=zNzo7A1Ro#&0!}Ht7V5<@ex>8)twaPljy#6r`O<>{z;*-bMTt ziy2K6f^l~J+|7AVn&yB!(rA=egV?c?5@bw9{3g4sLt}lR+e^s%DSNCpOLf#1HI`?< z8XJMudO%{~{Ub?iE1D<}TvJ(AGzJuIsfB)S_`aMr3bQ zU-}GNMq9Gk(p%7aV}mml^019d@k7w#6>{)3UbEtkvEx~6-y3xAMNt*c#kwnMb#q$i zS(A8PmgnJi?%;(``UU5-zRiEQ78)iRTg<7?U)n55SY0B>G{&=Q9KciPiq)BB8mXj^ zPJe&Cyg-mnxGUmJn3kl~FUG1Cl|#t8PBTK1q)g`ToQ)IrUzu*b(pZ09B}#-_=$`of z)RW9WF(oo-lWa9QF0oGP9!v=$xh<7OPbmAet;si$cJgpl&JTcll=OQDTOJVqebBKs z3Fw*qXf&k#9EEiATTfQZnHu~N>G7tg)!{M~+z`Me$=J6NkXKQ4mJyY`j&1yzq>eW- zH-F_P0$j^_2!FE!FFB5wzokWibjs#HUG=E;G1AK^uw;3aGV(G??rysW8^P=MCkm>c zE5zbd&Oo1Sm!nxBh~+{(|3a+)tNOq#Kv-2QW}%3;+GNA5okOY<28_Npr6SEI$UCV> zr~QHvAtVocmObp^HVnGxTE6Jn#izx;<&X)-=!m2j@{ zJK7i?2Lr2WYM%uBd%CYiLQ0B)fwv^ky7}GWWln7~}|1iib%#diq1TTe8 zGpiS2SpRs4_Q0;bU6lM99Et30HyOUWy-Z3B z^9g%yc2!PdHe81G!Zh-dJe=JYNt}keZS#{_vyllU4#kQok0{T7XH_dP3V1@wYVkxq z=O3d%72U=A2rjgFJ-(+ZeG8o1z+_<4E$Y^EAamorK@bJVzq?7lt!3bi^nKEEP`M?^ zGW+gQi+{QCpXBp7W3G)XW}u}vB#_QP=pc2>*Qf3)vAeI2!}NjX@qL2aVnOtRZ}Usk z9y2VxwD}Rjge56|pFFqut)>t#^t@Vny>icF@S-mTOCgr2yy09<$cH2`awQ zvs@7Me1gdfhHKO#L+{4&2b+rALI=bx4GA>rl#ZiHxeBe=Fo@S7s% zL(k;D`SmGKMH#W&*#F0m1=>$AJ=ILc<&AbM{H}*%D~A^qJ_|3OHv{+yk4hWkdprce zIX9^3doI3>EUp@)Saq)T4u#E~kOx!_FhnqmQGVKiI^tTT=Ac{GwGi$nohn(0?#=zA zQ92f|Vf$sNtFc?c>t;s%G1A=NB-3>B;qO}5_#gUvybktVqlEMU&uH4GOR_u?ytBL6 zUJ*$N_#WubBgjLyeAyZ^Wq3^I-;@(tI4UX<;HF|cz2Z1qYysUMRq#Mx}&#ih;vS3x1+2ub6RehS4u4EpbzmDjh+0t6+A z-1zF*DPXc80e)#tVz1aabW7X`c3?swmjQmfX|ICF9#K<3-x-*uxJI{iU!Y`yE3-j+ z9qnymmt;F|;pXNhHXwGF`3cP>W<~AH2dQCKWBG!t4^rlDgThFz$zrJ|#@|mUMVg}j z&Q-2Bw^Mv5fy#K(R$kqKD;1cfXT>xr5^zk|;eXAHX{2kSDEbib6hFA`Wu!3|d6_k? zUl@Vvdtyrj0mdN5IVx(vi4Q$W>)3UTx!f1t2Y`b#@QS?go?snxqPh0}l+GUg9>@Mb z{EY}%0{MX)kiw8b9=i1iY3AlrIZLnyoyM*b^K>Th9M5@w>|DVT?qM?c9i^-e$@1y| z=?ON1P+l6g>Y_E`K#4s;zN(x0T%{oHJ7n`_J}`~!R7zL=b(F*1N9GoMh{*er)Ym4Lx@_3Saolz={(?l3 zK++u%d>ef0p$7N^emN@r%N#Xn8f7BzplByKoYV<&E8`8&YGxpbDm8RLjb&|fJ?k@` zTBot&qfDBWX7$pB7MBXQiomrU1_Jr|d-Lz;ki@`JZS;TYSua>W0rHO#zt=YCT(A(# zkm~2z=1*Xo;TY1x4Ilf`Q2NiSdNQ~kh(8=X`*B@-9dkGV4c1|pU7f*y$1w}`D-*-< zFHtXqH?o3>kbq7mIqTGG`Hwpfsc0{MWHH9~J*|^Ph;8whKWrZ{Xcs`m56q6AjbJ*$ zX?>Zi0eyt3?8EA3`u#S$YHr*z6o-Y5h!~p0v2SdOy3>ZTE&TOGfm|{QeJnmX?$~X- z&0w4AtPGDjW-w-47*=~R#~#ahDUM9hxHpK}u|={;wChn@>{2BWviIHgT%5M_y7n|C zpe?j(WTZ}MqDU!Vb&^CQ(~M5EQjtF+I&lb)iTuaf+QH$vtjBl_eE3}J`2Os{JDoRj zj4YRHV0h0zOmND1sr`-gUEutGt3K`HtF!Hii?mFrc57l!+GIz32q3>Wm$6=y(U}{+(Z#t}*5b1p_T9K9LW1C6Ese(Ydo0(@bM;j{sk?9e=A$8-HUaPLp z_U3w$!N6+{g*GT7wAtc*#Nu>~>fxj41mFkoZL`uo6%=Vo!Nm$u1wItCz9T{g1m=Le ze-e@uT+HHVHob?G6#DVexr*x1?;gyF_!y)=Z6oZQDv;qJR!XUN>gypK7c~M4vK6UqqVz zvMpVIEg`Zq;|16Un0Ct)P7;K*9iG+XYb_Z`rxmr_DtL9vN&?3%zvW8z<LnV7 z(2Ijs#@{XQ>7$|35#wNPl;Dc^u1T{$f^!PY=lDTy_!)kG^!^4p!L#NwLZcs-RlZjk z{Kg!iXd62I13k}uYlWQVL&k3yya%7v)XANX5iFwU(h7nSv3&;q*3qqQ(=O+K1hebC z0ej>E@BsZmL97>uY)dog@TV$3-^VCm9V-ZdK|iaB$q-RZj^e&^zWouloD-g>tKI~u zmcZ+Aed)e7X-=_0_C;9uDWup%3kB_%5Wg2;3n6z^j|pm_)hrXd(T#=Hz08$8XKfGH z?%CaGV{URPAkQlfXTNs`RY%{j=Ckte<{KPwJwNN;>!#l!Q6 z2v$b$U5W(8Sb+tHUObFu0m^5hNp*leoPlIjoS=07r*Pr=XquaHzss8+pK~FG#1Ro+ z<(SNZ&x|oS4&t0P_1x)i{Jv!DCnkwA&*q6${gont(-8O<-za>vntT4ODuNQ5iLqS? zLLkq_ub}98xTuhmn|(zkL|n`HNFUqJ>1`Jcig2uGSJ;Ut_9x3^T(bU2X&D)E2I3EWMyoBT)b>o3OptY zlzH6mxEH=DU%KI{uZ)FGTAm+6nStZZ%2Ht0?e2Os@aw)~o`}be{(Kr=-`>1BI}iBc zeD;j7|1N~?4*9T*_ki5DW8~|1#6}#q2LV0dJxlj3fz$0g0XszjQTujz$bqT;Z`g>2 zOD-_wk1vt&l)oBgEaB;%L0`xlUL0ChaUS?E`j{@66)PXFj>-oqW&pTEex^PF-OI{C z8X4&)v5XaTYoE8aDqWQ!7=-dDvI3t{O$Tb-wi%E)8EHPQM zbe%OZn(V4rl<(MPDg)^>`o8S}IT`pX9)vB6YYgUffQ^ZvDzGq)dp(BY09tvoLR_73x6hMi|KtuUoH z&l|!xOy)Lre=%l$Ok7|XSx`j>OS9R}=MjIhQ5i78QRQ+gr8r8R@^0Ea*%iR`BiM14 z=f1viO#T_PCMv&ErAE^jQHPHo*nS~qN??9R(~+v3V8zsTPu`kFSlI;7huRE&RKt-c z;W#deR*Im}JZlQVC<3M4?FPH8|0+CX!mMeIYvMPrk}+QZHH5$Mk*^noekyQwX%wEz zCPeyTITY)PV6EQ-Lx)?w%KrN0`a}(2@JUV$L?j2Im&w8tUgEc$%zn8H<$O*IA73dz z=-GFHmoG!LniY}P(l0KWAed|ysZeqo4J12+5AU_qzIU%6>FHCwfLs0l>vl6rxYBiGe zVDWta=VSF@`FXl!JkP6;K!?TCuVs4v9J}Q^J7~%`idWr4K=ZeE-}ZI}(OI9#=sZ}d zK0~VapILv=-K+LsrW0nn-NzdVE#EyU^KB)%pqZudJoKe+t=bi(Kp_pAs~rtcnkMME zMc=##^H%4SYQg`cb=EcC^|AdhJ_|#=!M~B!`QZ5PVj~2z@W46*7o+3MOIbmlyoM%R z2~vVy9TBT>ck^Kehk`0jA9SN-Fm7yjwSaQNg1J&2kot*i3oL7paq!gUycNP+~x5CMg{A~S5+7{QZqHZjAcbn39fe)uy-DDPiG7~Ceo!0fItCNYQJD7X7jR%&vRqNR;cDJ;2jDxUQg zOHnX6hc{jK^W%7V1~5Ox{h)(12cSGaHLj%!@G8XOi4Xy*{ZdJUz^TPa2>>(amvQ-3 z=hG|J@TRSsz6>|d{ybGpmpjEL3bW(mx=0=Bl#Dv+^01TIlGds0LOLvi2@8M!b=Tz)`;C1_jk03(Nagg!Ucu?(6LyYnfJcxa&P(zOJQjO%D&5*{3I~d{$)} zua=YA9|!Tc!#OLnu#22ClWjT`IBtQFrT5E)iuebUf)5E7s4IS+2ck`zSq4`5cWWdm zE~wXrjKI?UKiotSOkH6VLiLRap0!y!=8U^9@_=k7TuWJ6z5Jpk9<=b&A?4Lk;X=2a zCVn%RWG#;`|+6uHUHcsa#SNiBs@8Q_#yl5!C$KqOuQ>$;B$ z^r5izx_=Ft1sNEiI?Q-txHyAlcThIu@5n_h+JQecdgg|U-EVF>?g10#9y}epo~){A zBKH|Oxswzp^4wp{Tg!T5vwN^lR`m%UP#I0zN3>aNiRDv_Rq zuQq{*AMRo`%c$8p_(9Cac2D}DF{O4Zk+AGkUkx^}2pXUN*bafq>wqk7WI55wdrX3` zbvB#$UhLymw!RbgyZCEY@Z)j+=UbL|Z!j5V6v z&jgXb(C#muA?BewWVg|~xz(BD&kx@(wbaNP_{uV)L*9bfApXXid?7FE#RWy!^6uIx zu1eU_F~zT4GOJuR)XjqNLCaM~A7_req{4D~W|xZ#~9nm-1sg?7+hsG4JZs z)p(@^`sgUj{}M=^scD%0#)=}Wv9_E6rJr4X8*`#-XJtjeAcDiMWRC1^ zd|X!rSjAq9E;J9+E_;>_DwwQa(Ik*aYFTDWjtAZO>V3^3F!(TauZ9XQCPdbgMxpPo zzDGy9KoCFn;daU4OO}kK=SvW9Lt5I}>wHC_yeUY1{TN6xvljIEr#@STS4Ck@ETOL$ zn7CMO$pgudT4>J;s}c98Q*T*gs~hgW_E zRolX=CNjR4cQ^4{k`D!aNV+Rqq|-WDE#Q2!fNR;w&^ z7dmtMIxwS8-0RcZ1J`$W~c?}K0;DN_9?*4p6> zJY*p5V9;?)l9osbt;f*H2CttDlBRXf_2fgiWdi2Udb?3tG5kQ2<<&#+D#PBapk`}e z@oU!PW%ZS~_@x726~xa~=Gk?kL-CP$+T}6F|8;H0W!quOh`)*D4)x$3Y6SX9|5ZYj zTNYYn+l7gU%Q9l-`)!!4C|N#To`w5OwFQE(<}?efNGofK|5trsewi!ljQ$DmsJN8=c^Yv)J+x!3!P?h^Qx++kO6{^xT1BFTqj!E zM-9t8TiB9cX*aB#y(B_fR<(kKmsijR9#0m4zO&Wd#N3!>N-&QJKsAr|5yKwnV1u;% z9y;#gVHU0b%}o)}db&D#1jX;5(z%g=ksjm8C=5dJ>%{#`-i2Z#oEB?5y~>#$V>+-q z=@XdLtJGyVELarBt!v_s--CQm%a@ec|NjviuG{Rs*Q&JtsKvo{BvyEH@hKYYq{3xb z9#Pt~<@MJ@o80Vb4>7%<`J8x~IubTXwAnqCg1yq!7QJ%wCAF*keKlrR^vXeh#HZ+! zQ5YPiuLmg>KYWf!@nc9Duu|yF;*$le2l-C?PKT%{H!f!5D|^`6(~mko>apCEb}Evn zpBX?R(b-QAgx}Y-I$V>p9g0Blslp|0?)_5&vmQqsn>ji2%LX<7+<&9e-*UZ1{{a1+ zmB;^l&=5>?J|rje(Pq(9d3hgVHBsLtZ_}R=`EDfexgx_o zjWzcIK5Ta@heyVA#ed*sT}#kz=qZ&-r}_i?iLm@@l?TxF2Y90PZKC>9Z~h|)Fu(E6 zxH`3*AmDifrgm()oLl_v==LHV*nT7HRe0`nuGwR0zWCV8l7zoaFUBYOc63pa@@Qit zD||>=o7g|EYIA{=0ho^C3Qw`o^d^L_;%W0_$mV8bd(fjsy^v>{z^_sDtm9fNQSB<@Zwc)yii!SiF^kU z+=P!gE%R0YG53A5Kq5qxD@&m(_igsC&4P|$m5wd$SnEGarOfF_6^5&(WCS; z*}=75ZJLs*lWgkl^9{tEgq70E=ix<=LiJIPS9N$M6ckf&W#zyk=TI$!a)-OQrjr&2 z#8q-bGIn)nFlo`kfEY_e^YnC;Cr5}dK@~wSE=*!9E^CL_nDX2{Gwj+KEUl?&&8-N*=X-4@AIY=d7aq&5Tzy#gzHdzbK8fFB>%Ge6m3q#`p9BvJyGAEhBP zIM4P`Q_K>~YiDps@1L=2G4d1G6f@BW7qB;9E4^1aprLwKIs3$ILBXGkgwKY4yD+yB zmt~8V%*f3}@%?IMQBozYk0fQ+ZSNYozwK)KKbiYyM$(j7?H7WxfrQS1F4a$2UN>HL ztMO5?B^%8Yy!Y5OHInp}a(b0?*f(c%%B`sBe~Aq>AN^VQC<{C=76OLgF^57aUe0iL zmTY~4b`>z)OPD|0@6xn;%OroJ%X$Wq$u?}F`-?W=bRZ&yh59dTnuGCcGIv!Q#O^e__2aOhxE8Y6& zsJxY$?{s2(HzufZsoHq9Y%Ah_YGfoPb+u*We?$l(#4>szohfMyRdzgg~ z>CZ@q5K4!QK|S=L?!0~hk&392zbGf!Qp5r5Y|n%&bNsv322D{#4MZ6sJHQn%RNRSQqA2U)*oXo+U zRm2>X+=M&ux_rf~7K7Lq``Nq+t0yj&P&;zCsu$4jQZW~Gpgb|TLkA986rNfqXsmD{ z?K`o+PPick-mglii}i^R{=^q^tb@`-$RRa8YdnOm)ti=J^%ET=zss2pa(A~omg7zg z`RP;q!;2R$493>qS7cg{4}=)7JPOcx|DMfRKvwHSroLUnLcG8m>vZm1Fs}qW)imRu zC1i~*S)TB831gN-LHB;07WZI~A)md&sb+NJcJoQsP?=X(-^cq1kxA{U+3I&2 zH9Q1?XzQdz{s!=PQz3)nUuu+@7k!4)C_-3Gm&Wrw-D=YDsWe2Go$uHFnBUzmPp~B{ zJ}?V8kt^DGgR@YF3p7C)k=gg{i;`ujZ5d}MajG|RNFwjx>MY~(aU(9OFFs6ZX>j!I z;kUgKBIMRH{WF6ghfe!Bc_0_Bc6XcN1%Q?CX3wn~A>FP2TAi`qVPKy@B3$C)Ib^msnH<~ zBE6B4N`pv>2slwuK$_7Zoug4oqy{3PbTd>^Mu-T4loF$n_&x8>?~m{P-M`Q4-gD2n z=iK*Bgqn@{7-^T|8P`IK>3_<2wZ%`Lx@9|*=n77b3}N?ec9a90BX|^DA8jP72n`>% z>j2m0m@!3rrt@e3;G@^mQa7&y9^9`Lp~Dovxs-Av|EFFHWek> zIU>D;M5rpu!-tTLE_ZDT32LU1jg>m8S4A>;?xPzalXWnW!j!lUrUeOV@mE7UR*g<4 zQRgN4@xRyO5#j;-*U2Mp3zkuf0x6jp1Sbs&nK8$eZghLwgghaTk<$8&hK|Vd_TS+R z@70WtG!NSZFHvT!Ur zY2bulqsqo%8r!7W{C!sKm4PND7LGDRix2XHcBdLK__MN4Zzp1T5^zqWu*_2DpEvFi zXi##T$Y3$@Fe)=MDh6DeH4}!hCUQEZzLZ$a51{!GY5oY+LQaw$`y6B^$+$0+E?wZ~ zI8om*H;vU0fNJSXRg)@M&*ZS`7Ue_7f`Do( zlJE;|ZQyj(d{p}(snn+LgplrYmYt{Oj8%oKQ!fSk%1ImSmc6IGio~2XxJ{;iJrk{N zg18e>|2>j8dSD#4|L!MfFCPCosyi9~Wq6<>51=DILiQmpH00Y3^5Rl#XBF31*{pz^ zPE-Rs_`Fchq{pmcmtTJxd00`g3k4u{nrDVpB<*_z%|HfBqV=( z&AxCNDVTTK{-Nr$(B1~W__6B^GdrZ3=7*U@)6@HIMecmwTE0k(DOe`z4HMFx6!lIxglW-2 z4L4^wy(=^~`3EdRo!#~eZ~Y*kd5#Yc|0W&^$97PQM=z7oPp5S7oUw|+-zy;{ATjx# z+23a+s)MEBqY<1ii>8|nOnSs;@~T1vT6!-i?`9_|(o$uly;Gbsi3QUMW(m^p{tW}t z$t&~eF!EPe_fI|XMB6(TTP&npX(1RrRbvG!#{pIn25=rN&0rS8s3gL~s8FqzsUK)! zzPS%9@lM&Kcum#$QTed^mg*X35)5yo;{ANpGI99ajL6C;c=wv73%&%=mLK{pEmYna zM3AqR=P2EB6EO!BWxZg4ddeVPmL`*C+2N&=-CX2{U14j^Tu1uAt7A>7{6^h%d*$Z0 zvAUxaNa|T+d(i}gG^a(#LzLGfCCJ|!fr=fB7#vg7=@k{Ggh>w)d0OR(UyL^UBG3ZH9dg*|E33X^ zFL9|ufzr%+O_!tJ8E*DM`^2@OWvB8D-$=$Q19S@jqqT46v~LO0Y`NYVxat438lBbi z=d+iB*P0{E)Yb1DAq#2rp}<7+^)foXr|G40eb)$IUEy-TSS!Fp+Gr2Dzv^n&}`gm=DX(9P`1#r8@ zD(=Hm@#ZJYMSrS-xhV4XpGxKcYQ@26xlCtim|?N#lKiQWRrEIDLx9PY-VB4`{x_54 z5FMWRV;h@B&r$g*;bQWEQjhy6=+b$L?p@}?0x44{d{6i$(Tiz3*?E-K+73e8j!(t_ z-dhr0-Ar0n(|qS%-?#%#U)kFH_;G!j2(GDUw70)gEKya%_xjw;G}%7o+bxEwnX}RkuRu~!c5t;AZl>A^dUPX%I>BVUs`bArX6hw7T*>H z-TC!&+dbEBCfZ02(S#_ZyL+@%`(*QW9~VXQzhv|E8|iag1R3CpHFS6B9!vL%!T8Iq@1~U2eSx*?v(<|E4>uKkcQE*yTBP^+bj0T6^vRaa zR||sVTX(vt{As4YHZ0A5dKuZ$a@Q{^L%Jg?B!S=2WFw(R7c$8GaKPEcj;lM{>lqH> zq^}3y9e)%L3>LjlG(l58@{55fUonMzn)1E=*>-5~1#_GT_o1>GN9={Jo&JqxNotkxV( z{eX^Z%x)d|YEXwZr&`}e4U4<`X7}j!naB1u4_!$M0k#)sjdxdvW~Utg+5@#h?#tc7 z(i=f{^e#ZT3hKw{k(N1@*2tIU;eM}drOtg!L^{c7HpANHk1B*vqsL!l=jzbNkZM0m z7WG@eU21pLoyzRR4ATr}DSO%SVhm-CN2vF~@@r8R=X~wdmk(^XGC?@?|6fA%!DVYh zx11Tcrj`Qodtod-WYq%{qdx9R;$YGi=}!&yi*J;j<`)njj?Mr>;EkQ(=}F@a%E29v zHK&O{^>PAj4DP`Qs$zdnst#-r#y(I%iyTy+zS&#dY^IVXS)9L2KQl&|UUBuchZ1zE zygxL<`4g^@lf{ydG8!x=qFej9`UqhX1;z10koaRYd6BnCpmqklgXwGQL4<%6g_!Fg z!EU`E0q>_EM*Ivn_Pf0KvOBt?ja}`u$;vB8kwW0C`ne>tjc-B`)EMuOszJlZ|5m7s z@a7`fDcRZZIOCZ35iSZg1L0V;ol0K83u>+CzIvs_tR*mbZ52#oY%WWQkMS`Zt2A-b z+;#Px8R$Gox=^(*l%Wf^g=*CEo*ETz2K&gio>R4KT?W3wBT3GCYO=a&+~eS=bV4jr zbK+S2I}f24t*Cz~212{~^)-3s{GoOxyB?F8@F&wegv#587WCzBX!#(!{}P(MMh(~I z)097X68VKCDf-(NKBtqlkMYv9!>lii3bKaZJY_OGv9Qi{=as))^U~dSAc4fV-jh7&e{Bg6$!B)iKs%J? zcqoD|L&RBD;}0N+Qqhgh5ZC5=&tPmN`E2~dib~aEku-Q`7(Z&}Y$37R?+T28F@(z} zu{^oZS$NBq{nrt-INGvZxL2o#xEs&Vr_k^4G^(+f!%ENcP$@ZSTQ>e9+RfY!*}4_` z*Gz@QdspTyJce7cf>rm`5R#VBhqTH=c3kP_X%W}{_o%hRWq+8xd)4E6?5qoVtzBIYIk^#(<2J3hC{!DeXkhkrgr|Mw7fe7I=;?;(8K&UY6B z#NSCUV;b28pNYQN@ykD!je^pJkxlq#g8&F`qQSyA_)b|Zm zY8XSjp>!qVlB8qV-V+$)>AYP_qv@T;*1O-lnX9dbYi=J(<8o!n)@bHwOe|&CBfY{A{Pxi!reBx;F-~&ZUfYHx4wQ(*Iml%~#2|bAvozzu*N{MGA z3Qs&dis>kQkERZuQE!U75+zATrefgxSf;#!f+wFRC)4%8^K!ZxTJ$nAtLjWViIHcy z+1ZryHSuG=UC!Dtu68N|N^H8lh4cg{Mga6Yfk{AQT0*KSdA&eu20tHY#iOXfHF zH2YY#$|D>5zP_l{N8I|FFQ>Dpx~?- zruz*n@eMqT7>r)$ic3qPn=CKzsZA}2Ebhz>n9|VxAIcB^c4LY3r}T-~&}tKpa@|RE zs1eFb=z++D0#5A)O_kVOWYeB6?qg!aVX>aNzl+3oWjpc9&RcAEVU802%umh3DMTbi z6f_|e6d6Z2y9&&UN)hBtYAVH5~a^fvq3=_u~7E}p>@x;{28m$TIl2V zFTjrk)l6Qs*Sfh-~2jdJV##O*MOF6x%lCe}bbl+*2#9V0;A$;0qedT{`&1=Uzq z2mC2nOBXnq?<@2VivdGqo^a_w5F1?+&uSuJ!NkOADlhm&M&={-;X8l4@xAJk}}q^K2VcBkFJ6dbOR>vtAG z)AgBkfpcW)j=^1Vjb(er=C#WE*~3W0h{rEn8k7zUc8G9@<9wALY6LvtLhAPwdV2lR zrTh$EKUxKOaT11|(bvK>JO_qkvkmt#3*vEf13&X-W@bj$2W3NQt)MHc;GIKm+V~z> zU#TG5r4i5uW8$0c6pqvpy)Fnb?O!&+|HN^m#c+^SYR1*@+|o*j)5m6ERxll*LJ{ajPK z>)#L@3o5%of`|QG518>rE_b8!)GTi&H#+OTp6729rFR=((z4NzIQ0_UN|vimK}hP= zib1+?Vn({d*pBFWy}NgF0W^z^8V|E8sQG`+o}Q&_W$KCIlM8{M%Z}~Zr4qcIaLM6o z@(FIkopKIo!SYwUU%ZedPYD6#kkiu?sYtu1HrQiY_)4yqES>xnUwtl`VW{y2)G5oD z!M_+$pA_a(nT+|R18G!N6$QF-S_{=kwDCk*sk&}!Yqc77Nnfdi27@(8?zDe2EMjDd zT_@CkE|evvwL;^Vq4M`|2`tnSra9qPs5o*&O?h(}?XyYp4%3M|WE#~PE+Xwh&h(Fi5Ra$5RKCj*T zoedBi@u9muAI(#!7Ep&c*@*d+n0Q|p@Vxzza*+HoN3U^V-YoQJw+TyjS`?pl%R(jf zMIEC%9|-?#RnJb#^xx73^Q|0Lr<3r5P@H)08aP1Q-(NBi-9?1rB)EDHTsp)wZ_CS=+y16AHs209I zbhD#ftr3W@)$ABvaS+@zJaxKqt8s{;H|I9U9jDhl*-K*DzhQf?fu!X6?2G1r+Vt&W zs>P{*)t-c=k;uxYc~@Ar3u(%0@+qS4aHL5e>Z~2o4$H1B3Ljkq)cgAi>ue$h+XSDD zS@k`?d&WlmE>EK@4utA;uDAI42^N$ujYvV>4*E@7FXL1?q<3AVAZ`d=$&5gw(8=7~ z+=)RovL7ULA!Ll0{y>NRwHv(2Lv4a8;h`j4x4A0;+qCE)8DX-=qghbtt_W>L^G6TD z{qjXAWhzX0>4m8+qtlh{I+t{hV0zy_58&xWsfqq$y<-f#nctZh79>NH({A+6$_jiz zM&|bv9ehUR;^eO*1`tR~7R*t@2%=5&`;E875``RpHCz9NX5J!JK~F~gmCVHw0MlE1 zW6Q@JdUGL(=01_u>$lbN#fv;R3kmJ! z3r;`GlP@gToORQOzfVt%3-DJ-wt1i){*AZv_T2RixGu6E>^hE03!Sqc>^78gDvgJj zN{ue13WTX+X?h18g-eA74#+m27o?X$ZIc?QAEIvIHx>-ECmg*e+HST3kB7YfN^;YR zyVKHsdI%h7&6SSV!l@gi5Snc>A8;3>+0lnbK@z0`e@#CAmKnTXKjRY(J1-^v)3K`2 zuGrSg9{#JsRaFx|&EkC7Q5}*$jNsdnT@P-<1p1!Bx-9zxa*d?HVH)o(^ zRQ2oOrz;ERUE0in=4XndmUKEsq(1|urL=2eSuoiCYVRps*$UYQt0PM^LxRAK)1;Vo zQE+=F*A(rTBM!UwKb{8=QLO>btMTBmR4Dh&EdFZq;|vUteuiDH)GUv?RH-o->MRq$ z=1{Lk=Z9B6Cj3xgmrzyU{Q6ymEwNypI=U$lf9x#sd05usR>9rV;akfWE%rro4p{;B zke6Fy+lBNT3UcK~Pe51|cuRWl$ePn-=w_TtDL)XZA{5^vOsR1FXhsi)@S#;xNLZbe z025D#K`~8S&pGH^DkB6F3u2xCBljkk&%a;`!XT!Vx^Y}biR$4c_sJ2343Y&<3tq=$ z37_mfb}V!vIo0>k1vL6mDkW~$gg+UK5M(1`>1oHS(m-@6RUI(fSTOyyE(kEFtrts7 z#p$E2RjHbdKAA0ZBhje1BW3KW*hu3KLhr7P`-uG3Ld(UP@KFEbdPJe^6Z#ecOgw4X zik$fHU?2O8xMmZtu#n;)6jpnWxz0nUcxhsm?3|i+eiV%;lzooW-HiM=Ay04Iffsq7 z7|RD4i(+e0NZWtD{FGbWbwzTOeiK4(E%2qE%tadF#?OnJd-|=r!~y@-4K=Bl@uvER zb1EiZK(wjxmCgX=1hI$=D=e#Y-e&_*VAXYSc$Wz6Mee_YA%yRcY-J8F;%y=blHG|8 z8Jm&1{Y&N#1=pJanAQcG7-v)i8<-=`3O*hw2*pDl<5=MF%ilfy{W^;_Kr5Lkgu+nm+WZi$$sgjo_uJ81E?Wh3R6qqhEri6`9<%Z%tsP(Z;s@p~YCHniVM?X}sv8 zvE`||$I1yLyty7Oidj?8RgPiP+CIpV=Pwk#Fb(8)WEP%FZ{P&gh~CD`E;xjM=l!#z z%ozA9>@6x+G#))}XFdF{kiJ+kTH{)XW?cQ|cub@<5w9-7}9; zH6d7AartB2nJQgtkkuWs8li}X6_5Sbu2g(@I3!V(AJ|=p{ zn87fn?rSfD^IM{kpKhcF7-7~#C_8vQrgX1nWe_gbbKvxkDIg|b3#0R4yOfT=BT*3! z@G|&j`mEtu+lh-{yUff0N^3y@Dz)I&OQ}XH?~jQ&-Er7{_p`U`YT+57Qu^cdltAyI zpfP(RQpCm^^wE&tbOp=!?joT_w?kBl6blaCSfD|q@<^?X)pKbCV|#tDBZ^@s-(f!W z^u|3ZI^uSMWUYH}%v$lATC(KietR>_aHsB{nDZ-%X5gPf*2e*b=uY9R_c1 z(8r#IiTW<7vTUCkCie?DwR~4&%Y*aelklm+3lGIxTO-kBbEk|)U4LUxgB{s_xbK)l z^|?-yDzpwQUK1rlwMk?k6jLjA6NZqTC55i;o~RXj#&L=cC2%a6p2fVpQN3v1v@^$p^Hmo3|1MX8GRPCT&VEO#q;DMhX{9O4{ zVr0jAf{Jhc2XYjb!oYC3=zW`-z(kdf{a`Ruf**^=^}PmZ?Y!v9Uo`qC=AcxEy8x7< zr?0Rpf}3Q0QV%sbW6(Ju2&_Ip*f88vRyT>uh{z?$b;Sa(AU^<{U1f%;P#uSbL0JLd zxdWgLP~lzpMG6r{5TyjfUqpQSVy0I9%|U_^HCf5O{uYdO-rp;6pTsdvV5|t1E3eUt z`~Sijtoi5&-Qf3EvhZ7Q`7uAUR5IQ1(6SCZO`KW_Hl=-5ifa{A-<-VuDpM4DyyxXF zGn#tQM}{&2JtAVg4RUbaw4nHtK0ac8>kS6#Oi)+jZS*!d^ZV^pG^w&wOUa5|%sE!G z(%DD|7WR9;nbUpBK@vnq(%H}BnFev`&! z8Uba$iheMEr$*;QWJQx(D>%l>CAIcy0(AM!$P264(+&3W?mqH+i^s2Sb=OgCE>5?k zIsMwVT&o>YHEiEr^?x4Hjl9W;HN`J;3lDb03s=$Uwbg_S{JYD90gfs~A=9ZNswEB* zKxDWXmY!tH>fs|BP=oz9Mgcm{p1VD|ot^U}()}ctvV$oGIih}+E+@o{aibCkmwb-f zC}wf7KwjqRGeJOI6v7=1^tQa0l{MeF@wx)`V0?rGLUBqZ<0CPM^gDFObX}(wJlSBq z2XM`IzKJ6uHapQ4t4rP#oq=?#f}VVFQWXCNQJU^2F!Cq`y{yO zx+{)28TzqKez#;I`btMlPFcBk<((wTYnpS4BHZD6NLu{E`(iHB{l%flPTil4ohE+T z)cNelRWxO?d%RLv*)|^)HsEZz+AP5qO_|EwlT|J^pP{Rkl$Am@-XQ;3k2u!4oP*m_ zbt^O}3K~cMb@D4Ox_ooxmdUZ$P1H8$&_VBJWTR)1+Tg&eI??fZ3+YxNYSJQ>&<3PH z?{k9__yg}eW9Zcf4$$i)(-pd?R|=DdLp86S$~t;)?9UMqJFNUgD!zsvDRoq}Mat+y ziKD%D$NxJ9e--vKERbdwNQQ)hIU4bN#QDbt0j!|Hf`;a>exL1L0J(cR`&5i+f5Z3I zCnD>Ll>#8?HE+$}4OXD!G7|{Qky3;NpQ?s%XItrdHvRG7-tFflM(>(n_a`n8PGtqhQ}S*+r&dBtn4-r9}33%S?%g!I5PD>tho79ZZ6| zjjwJe@t#XW+T9`BeCl0to*>P4xnNI z3e)v04e;=-Imq{=aPyve?Ik)an9NXQXUDaRB7m{m;2vnGNUI>QyXP^lewZ0Isl0&X ze$p1w2(urM{@q5v!{31Ilx=v1w);$D=c-=gGCH;{EV#{SisqdX{+n`9XU|WUtvAj z(vL9-N?B?vXfo5kn1{Kqf>u>$myr~i+rxe>K>D5;gaUge3l>K3i~-0aL1orgr6Jbw iFfn|`F6qzb$07Eu2liI2CENh`)6>4KRioh;_WuA)wr61g diff --git a/pics/items.png b/pics/items.png deleted file mode 100644 index df042775bb7117c124149af963d50c004bcd86a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511684 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