diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderLaserRelay.java index 8278a8db3..508d53747 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/blocks/render/RenderLaserRelay.java @@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.laser.IConnectionPair; import de.ellpeck.actuallyadditions.api.laser.LaserType; import de.ellpeck.actuallyadditions.mod.items.InitItems; +import de.ellpeck.actuallyadditions.mod.items.ItemInfraredGoggles; import de.ellpeck.actuallyadditions.mod.tile.TileEntityLaserRelay; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; @@ -34,12 +35,14 @@ public class RenderLaserRelay extends TileEntitySpecialRenderer{ private static final float[] COLOR = new float[]{1F, 0F, 0F}; private static final float[] COLOR_ITEM = new float[]{0F, 124F/255F, 16F/255F}; private static final float[] COLOR_FLUIDS = new float[]{0F, 97F/255F, 198F/255F}; + private static final float[] COLOR_INFRARED = new float[]{209F/255F, 179F/255F, 239F/255F}; @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5, int par6){ if(tile instanceof TileEntityLaserRelay){ TileEntityLaserRelay relay = (TileEntityLaserRelay)tile; boolean hasInvis = false; + boolean hasGoggles = ItemInfraredGoggles.isWearing(Minecraft.getMinecraft().player); ItemStack upgrade = relay.slots.getStackInSlot(0); if(StackUtil.isValid(upgrade)){ @@ -73,10 +76,10 @@ public class RenderLaserRelay extends TileEntitySpecialRenderer{ ItemStack secondUpgrade = ((TileEntityLaserRelay)secondTile).slots.getStackInSlot(0); boolean otherInvis = StackUtil.isValid(secondUpgrade) && secondUpgrade.getItem() == InitItems.itemLaserUpgradeInvisibility; - if(!hasInvis || !otherInvis){ - float[] color = relay.type == LaserType.ITEM ? COLOR_ITEM : (relay.type == LaserType.FLUID ? COLOR_FLUIDS : COLOR); + if(hasGoggles || !hasInvis || !otherInvis){ + float[] color = hasInvis && otherInvis ? COLOR_INFRARED : (relay.type == LaserType.ITEM ? COLOR_ITEM : (relay.type == LaserType.FLUID ? COLOR_FLUIDS : COLOR)); - AssetUtil.renderLaser(first.getX()+0.5, first.getY()+0.5, first.getZ()+0.5, second.getX()+0.5, second.getY()+0.5, second.getZ()+0.5, 120, 0.35F, 0.05, color); + AssetUtil.renderLaser(first.getX()+0.5, first.getY()+0.5, first.getZ()+0.5, second.getX()+0.5, second.getY()+0.5, second.getZ()+0.5, 120, hasInvis && otherInvis ? 0.1F : 0.35F, 0.05, color); } } } 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 65cd618a0..3e2f2b473 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -161,6 +161,7 @@ public class CreativeTab extends CreativeTabs{ this.add(InitItems.itemMiningLens); this.add(InitItems.itemLaserWrench); this.add(InitItems.itemLaserUpgradeInvisibility); + this.add(InitItems.itemInfraredGoggles); this.add(InitItems.itemCrateKeeper); this.add(InitItems.itemChestToCrateUpgrade); this.add(InitItems.itemSmallToMediumCrateUpgrade); 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 2332c6d50..35720e7d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/InitItems.java @@ -194,10 +194,12 @@ public final class InitItems{ public static Item itemVoidBag; public static Item itemFillingWand; public static Item itemLaserUpgradeInvisibility; + public static Item itemInfraredGoggles; public static void init(){ ModUtil.LOGGER.info("Initializing Items..."); + itemInfraredGoggles = new ItemInfraredGoggles("item_infrared_goggles"); itemLaserUpgradeInvisibility = new ItemLaserRelayUpgrade("item_laser_upgrade_invisibility"); itemFillingWand = new ItemFillingWand("item_filling_wand"); itemBag = new ItemBag("item_bag", false); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemInfraredGoggles.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemInfraredGoggles.java new file mode 100644 index 000000000..2c245cca5 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemInfraredGoggles.java @@ -0,0 +1,72 @@ +/* + * This file ("ItemInfraredGoggles.java") is part of the Actually Additions mod 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-2017 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.items; + +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; +import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; +import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class ItemInfraredGoggles extends ItemArmorAA{ + + public ItemInfraredGoggles(String name){ + super(name, InitArmorMaterials.armorMaterialGoggles, 0, StackUtil.getNull()); + this.setMaxDamage(0); + + MinecraftForge.EVENT_BUS.register(this); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onClientTick(ClientTickEvent event){ + EntityPlayer player = ActuallyAdditions.proxy.getCurrentPlayer(); + if(player != null && isWearing(player)){ + double innerRange = 8; + double remRange = innerRange+2; + + AxisAlignedBB aabb = new AxisAlignedBB(player.posX-remRange, player.posY-remRange, player.posZ-remRange, player.posX+remRange, player.posY+remRange, player.posZ+remRange); + List entities = player.world.getEntitiesWithinAABB(Entity.class, aabb); + + for(Entity entity : entities){ + if(entity != player){ + if(entity.getDistanceSq(player.posX, player.posY, player.posZ) <= innerRange*innerRange){ + entity.setGlowing(true); + } + else{ + entity.setGlowing(false); + } + } + } + } + } + + public static boolean isWearing(EntityPlayer player){ + ItemStack face = player.inventory.armorInventory.get(3); + return StackUtil.isValid(face) && face.getItem() == InitItems.itemInfraredGoggles; + } + + @Override + public EnumRarity getRarity(ItemStack stack){ + return EnumRarity.RARE; + } +} 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 1c3e810a6..253588a73 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,6 +13,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.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -54,7 +55,6 @@ public class ItemArmorAA extends ItemArmor{ ActuallyAdditions.proxy.addRenderRegister(new ItemStack(this), this.getRegistryName(), "inventory"); } - @Override public EnumRarity getRarity(ItemStack stack){ return this.rarity; @@ -62,6 +62,6 @@ public class ItemArmorAA extends ItemArmor{ @Override public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ - return ItemUtil.areItemsEqual(this.repairItem, stack, false); + return StackUtil.isValid(this.repairItem) && ItemUtil.areItemsEqual(this.repairItem, stack, false); } } 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 2108e476a..80be14cb1 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/material/InitArmorMaterials.java @@ -31,6 +31,8 @@ public final class InitArmorMaterials{ public static ArmorMaterial armorMaterialCrystalGreen; public static ArmorMaterial armorMaterialCrystalWhite; + public static ArmorMaterial armorMaterialGoggles; + public static void init(){ ModUtil.LOGGER.info("Initializing Armor Materials..."); @@ -44,6 +46,8 @@ public final class InitArmorMaterials{ armorMaterialCrystalBlack = addArmorMaterial("armorMaterialCrystalBlack", ModUtil.MOD_ID+":armor_crystal_black", 12, new int[]{1, 3, 4, 1}, 13, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); armorMaterialCrystalGreen = addArmorMaterial("armorMaterialCrystalGreen", ModUtil.MOD_ID+":armor_crystal_green", 60, new int[]{6, 9, 9, 4}, 18, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); armorMaterialCrystalWhite = addArmorMaterial("armorMaterialCrystalWhite", ModUtil.MOD_ID+":armor_crystal_white", 18, new int[]{3, 6, 6, 3}, 11, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); + + armorMaterialGoggles = addArmorMaterial("armorMaterialGoggles", ModUtil.MOD_ID+":armor_goggles", 0, new int[]{0, 0, 0, 0}, 0, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC); } private static ArmorMaterial addArmorMaterial(String name, String textureName, int durability, int[] reductionAmounts, int enchantability, SoundEvent soundOnEquip){ diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 056992696..08609bef9 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -521,6 +521,7 @@ item.actuallyadditions.item_mining_lens.name=Lens of the Miner item.actuallyadditions.item_more_damage_lens.name=Lens of the Killer item.actuallyadditions.item_filling_wand.name=Handheld Filler item.actuallyadditions.item_laser_upgrade_invisibility.name=Laser Relay Modifier: Invisibility +item.actuallyadditions.item_infrared_goggles.name=Infrared Goggles #Tooltips tooltip.actuallyadditions.onSuffix.desc=On diff --git a/src/main/resources/assets/actuallyadditions/models/item/item_infrared_goggles.json b/src/main/resources/assets/actuallyadditions/models/item/item_infrared_goggles.json new file mode 100644 index 000000000..f76347dad --- /dev/null +++ b/src/main/resources/assets/actuallyadditions/models/item/item_infrared_goggles.json @@ -0,0 +1,6 @@ +{ + "parent": "actuallyadditions:item/standard_item", + "textures": { + "layer0": "actuallyadditions:items/item_infrared_goggles" + } +} diff --git a/src/main/resources/assets/actuallyadditions/textures/items/item_infrared_goggles.png b/src/main/resources/assets/actuallyadditions/textures/items/item_infrared_goggles.png new file mode 100644 index 000000000..40c05286b Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/items/item_infrared_goggles.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/models/armor/armor_goggles_layer_1.png b/src/main/resources/assets/actuallyadditions/textures/models/armor/armor_goggles_layer_1.png new file mode 100644 index 000000000..7a0a40cb3 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/models/armor/armor_goggles_layer_1.png differ diff --git a/src/main/resources/assets/actuallyadditions/textures/models/armor/armor_goggles_layer_2.png b/src/main/resources/assets/actuallyadditions/textures/models/armor/armor_goggles_layer_2.png new file mode 100644 index 000000000..ea5186182 Binary files /dev/null and b/src/main/resources/assets/actuallyadditions/textures/models/armor/armor_goggles_layer_2.png differ