diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index 9840879564b..cc5088aa335 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -35,6 +35,7 @@ import mekanism.common.integration.IMCHandler; import mekanism.common.integration.MekanismHooks; import mekanism.common.integration.multipart.MultipartMekanism; +import mekanism.common.item.armor.ItemMekaSuitArmor; import mekanism.common.multiblock.MultiblockManager; import mekanism.common.network.PacketDataRequest.DataRequestMessage; import mekanism.common.network.PacketSimpleGui; @@ -83,6 +84,7 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.world.ChunkDataEvent; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; @@ -709,9 +711,10 @@ public void onWorldUnload(WorldEvent.Unload event) { } @SubscribeEvent - public void onDrawScreenPre(RenderGameOverlayEvent.Post event) { + public void onDrawScreenPre(RenderGameOverlayEvent.Post event) { MekaSuitEnergyLevel.onDrawScreenPre(event); MekanismHUD.onDrawScreenPre(event); } + } diff --git a/src/main/java/mekanism/common/entity/EntityMekaSuitArmor.java b/src/main/java/mekanism/common/entity/EntityMekaSuitArmor.java new file mode 100644 index 00000000000..7e37b268087 --- /dev/null +++ b/src/main/java/mekanism/common/entity/EntityMekaSuitArmor.java @@ -0,0 +1,105 @@ +package mekanism.common.entity; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.MoverType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class EntityMekaSuitArmor extends EntityItem { + + public EntityMekaSuitArmor(World world, Entity original, ItemStack stack) { + this(world, original.posX, original.posY, original.posZ, stack); + setPickupDelay(40); + motionX = original.motionX; + motionY = original.motionY; + motionZ = original.motionZ; + setItem(stack); + } + + public EntityMekaSuitArmor(World world, double x, double y, double z, ItemStack stack) { + super(world, x, y, z); + setItem(stack); + } + + @Override + protected void dealFireDamage(int damage) { + } + + @Override + public boolean attackEntityFrom(DamageSource source, float damage) { + return source.getDamageType().equals("outOfWorld"); + } + + @Override + public void onUpdate() { + ItemStack stack = getDataManager().get(ITEM); + if (!stack.isEmpty()) { + if (stack.getItem().onEntityItemUpdate(this)) { + return; + } + } + if (getItem().isEmpty()) { + setDead(); + } else { + super.onUpdate(); + + if (pickupDelay > 0) { + --pickupDelay; + } + + prevPosX = posX; + prevPosY = posY; + prevPosZ = posZ; + motionY -= 0.03999999910593033D; + noClip = pushOutOfBlocks(posX, (getEntityBoundingBox().minY + getEntityBoundingBox().maxY) / 2.0D, posZ); + move(MoverType.SELF, motionX, motionY, motionZ); + boolean flag = (int) prevPosX != (int) posX || (int) prevPosY != (int) posY || (int) prevPosZ != (int) posZ; + + if (flag || ticksExisted % 25 == 0) { + if (world.getBlockState(new BlockPos(posX, posY, posZ)).getMaterial() == Material.LAVA) { + motionY = 0.20000000298023224D; + motionX = (rand.nextFloat() - rand.nextFloat()) * 0.2F; + motionZ = (rand.nextFloat() - rand.nextFloat()) * 0.2F; + //this.playSound("random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + if (!world.isRemote) { + searchForOtherItemsNearby(); + } + } + + float f = 0.98F; + + if (onGround) { + f = world.getBlockState(new BlockPos(posX, getEntityBoundingBox().minY - 1, posZ)).getBlock().slipperiness * 0.98F; + } + + motionX *= f; + motionY *= 0.9800000190734863D; + motionZ *= f; + + if (onGround) { + motionY *= -0.5D; + } + + ++age; + + ItemStack item = getDataManager().get(ITEM); + + if (!world.isRemote && age >= lifespan) { + if (item.isEmpty()) { + setDead(); + } + + } + + if (!item.isEmpty() && item.getCount() <= 0) { + setDead(); + } + } + } +} diff --git a/src/main/java/mekanism/common/item/ItemModuleUpgrade.java b/src/main/java/mekanism/common/item/ItemModuleUpgrade.java index 9a31725c776..5afe8722240 100644 --- a/src/main/java/mekanism/common/item/ItemModuleUpgrade.java +++ b/src/main/java/mekanism/common/item/ItemModuleUpgrade.java @@ -2,17 +2,21 @@ import mekanism.api.EnumColor; import mekanism.common.Mekanism; +import mekanism.common.MekanismLang; import mekanism.common.base.IMetaItem; +import mekanism.common.base.IModuleUpgrade; import mekanism.common.base.IModuleUpgradeItem; -import mekanism.common.integration.MekanismHooks; import mekanism.common.moduleUpgrade; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraft.world.World; +import net.minecraftforge.fml.common.registry.ForgeRegistries; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; @@ -50,15 +54,21 @@ public void getSubItems(@Nonnull CreativeTabs tabs, @Nonnull NonNullList list, ITooltipFlag flag) { + public void addInformation(ItemStack stack, World world, List list, ITooltipFlag flag) { if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { list.add(LangUtils.localize("tooltip.hold") + " " + EnumColor.AQUA + "shift" + EnumColor.GREY + " " + LangUtils.localize("tooltip.forDetails")); } else { - list.addAll(MekanismUtils.splitTooltip(moduleUpgrade.values()[itemstack.getItemDamage()].getDescription(), itemstack)); - if (!Mekanism.hooks.DraconicEvolution && moduleUpgrade.values()[itemstack.getItemDamage()] == moduleUpgrade.ENERGY_SHIELD_UNIT){ + list.addAll(MekanismUtils.splitTooltip(moduleUpgrade.values()[stack.getItemDamage()].getDescription(), stack)); + list.add(MekanismLang.MODULE_SUPPORTED.translateColored(EnumColor.BRIGHT_GREEN).getFormattedText()); + for (Item item : ForgeRegistries.ITEMS) { + if (item instanceof IModuleUpgrade upgrade && upgrade.getValidModule(new ItemStack(item)).contains(moduleUpgrade.values()[stack.getItemDamage()])) { + list.add("- " + item.getItemStackDisplayName(new ItemStack(item))); + } + } + if (!Mekanism.hooks.DraconicEvolution && moduleUpgrade.values()[stack.getItemDamage()] == moduleUpgrade.ENERGY_SHIELD_UNIT) { list.add(EnumColor.AQUA + LangUtils.localize("tooltip.install.DR")); } - if (!Mekanism.hooks.DraconicEvolution && !Mekanism.hooks.DraconicAdditions && moduleUpgrade.values()[itemstack.getItemDamage()] == moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT){ + if (!Mekanism.hooks.DraconicEvolution && !Mekanism.hooks.DraconicAdditions && moduleUpgrade.values()[stack.getItemDamage()] == moduleUpgrade.ADVANCED_INTERCEPTION_SYSTEM_UNIT) { list.add(EnumColor.AQUA + LangUtils.localize("tooltip.install.DR")); list.add(EnumColor.AQUA + LangUtils.localize("tooltip.install.DR2")); } @@ -75,4 +85,10 @@ public String getTranslationKey(ItemStack item) { public moduleUpgrade getmoduleUpgrade(ItemStack stack) { return moduleUpgrade.values()[stack.getItemDamage()]; } + + @Override + public EnumRarity getRarity(ItemStack stack) { + return moduleUpgrade.values()[stack.getItemDamage()].getRarity(); + } + } diff --git a/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java b/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java index d04e272fd9e..25370bc24d8 100644 --- a/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java +++ b/src/main/java/mekanism/common/item/armor/ItemMekaSuitArmor.java @@ -16,6 +16,7 @@ import mekanism.common.base.IModuleUpgrade; import mekanism.common.capabilities.ItemCapabilityWrapper; import mekanism.common.config.MekanismConfig; +import mekanism.common.entity.EntityMekaSuitArmor; import mekanism.common.integration.MekanismHooks; import mekanism.common.integration.forgeenergy.ForgeEnergyItemWrapper; import mekanism.common.integration.ic2.IC2ItemManager; @@ -28,9 +29,11 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -60,7 +63,7 @@ @Optional.Interface(iface = "com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper", modid = MekanismHooks.DraconicEvolution_MOD_ID) }) public abstract class ItemMekaSuitArmor extends ItemArmor implements IEnergizedItem, - ISpecialElectricItem, IEnergyContainerItem, ISpecialArmor, IModuleUpgrade, IHazmatLike, ICustomArmor, IConfigurableItem, Magnetic , IItemHUDProvider { + ISpecialElectricItem, IEnergyContainerItem, ISpecialArmor, IModuleUpgrade, IHazmatLike, ICustomArmor, IConfigurableItem, Magnetic, IItemHUDProvider { private final float absorption; @@ -415,12 +418,6 @@ public void damageArmor(EntityLivingBase entity, @Nonnull ItemStack stack, Damag } } - @Nonnull - @Override - public String getItemStackDisplayName(@Nonnull ItemStack itemstack) { - return EnumColor.ORANGE + super.getItemStackDisplayName(itemstack); - } - @Override @Optional.Method(modid = MekanismHooks.DraconicEvolution_MOD_ID) public float getProtectionPoints(ItemStack stack) { @@ -606,4 +603,26 @@ public boolean isMagnetic(ItemStack stack) { return UpgradeHelper.isUpgradeInstalled(stack, moduleUpgrade.MAGNETIZER) && getMagnetic(stack); } + @Override + public EnumRarity getRarity(ItemStack stack) { + return EnumRarity.EPIC; + } + + + @Override + public boolean hasCustomEntity(ItemStack stack) { + return true; + } + + @Override + public Entity createEntity(World world, Entity location, ItemStack itemstack) { + EntityItem item = new EntityMekaSuitArmor(world, location, itemstack); + item.isImmuneToFire = true; + if (UpgradeHelper.isUpgradeInstalled(itemstack, moduleUpgrade.MAGNETIZER) && getMagnetic(itemstack)) { + item.setNoPickupDelay(); + } + return item; + } + + } diff --git a/src/main/java/mekanism/common/moduleUpgrade.java b/src/main/java/mekanism/common/moduleUpgrade.java index d6ebc88ee26..e54bf34083c 100644 --- a/src/main/java/mekanism/common/moduleUpgrade.java +++ b/src/main/java/mekanism/common/moduleUpgrade.java @@ -1,32 +1,35 @@ package mekanism.common; import mekanism.common.util.LangUtils; +import net.minecraft.item.EnumRarity; import java.util.Locale; +import static net.minecraft.item.EnumRarity.*; + public enum moduleUpgrade { //EMPTY("base",1,), - EnergyUnit("EnergyUnit", 8), - ATTACK_AMPLIFICATION_UNIT("attack_damage", 4), - RADIATION_SHIELDING_UNIT("radiation_shielding_unit", 1), + EnergyUnit("EnergyUnit", 8, UNCOMMON), + ATTACK_AMPLIFICATION_UNIT("attack_damage", 4, UNCOMMON), + RADIATION_SHIELDING_UNIT("radiation_shielding_unit", 1, UNCOMMON), //head - SolarRechargingUnit("SolarRechargingUnit", 8), - ElectrolyticBreathingUnit("ElectrolyticBreathingUnit", 4), - VisionEnhancementUnit("VisionEnhancementUnit", 4), - InhalationPurificationUnit("InhalationPurificationUnit", 1), - NutritionalInjectionUnit("NutritionalInjectionUnit", 1), + SolarRechargingUnit("SolarRechargingUnit", 8, RARE), + ElectrolyticBreathingUnit("ElectrolyticBreathingUnit", 4, UNCOMMON), + VisionEnhancementUnit("VisionEnhancementUnit", 4, RARE), + InhalationPurificationUnit("InhalationPurificationUnit", 1, RARE), + NutritionalInjectionUnit("NutritionalInjectionUnit", 1, RARE), //Body - JETPACK_UNIT("jetpack_unit", 1), - CHARGE_DISTRIBUTION_UNIT("charge_distribution_unit", 1), + JETPACK_UNIT("jetpack_unit", 1, RARE), + CHARGE_DISTRIBUTION_UNIT("charge_distribution_unit", 1, RARE), //legs - GYROSCOPIC_STABILIZATION_UNIT("gyroscopic_stabilization_unit", 1), - GEOTHERMAL_GENERATOR_UNIT("geothermal_generator_unit", 8), - HYDROSTATIC_REPULSOR_UNIT("hydrostatic_repulsor_unit", 4), - LOCOMOTIVE_BOOSTING_UNIT("locomotive_boosting_unit", 4), + GYROSCOPIC_STABILIZATION_UNIT("gyroscopic_stabilization_unit", 1, RARE), + GEOTHERMAL_GENERATOR_UNIT("geothermal_generator_unit", 8, RARE), + HYDROSTATIC_REPULSOR_UNIT("hydrostatic_repulsor_unit", 4, RARE), + LOCOMOTIVE_BOOSTING_UNIT("locomotive_boosting_unit", 4, RARE), //feet - HYDRAULIC_PROPULSION_UNIT("hydraulic_propulsion_unit", 4), - FROST_WALKER_UNIT("frost_walker_unit", 2), + HYDRAULIC_PROPULSION_UNIT("hydraulic_propulsion_unit", 4, RARE), + FROST_WALKER_UNIT("frost_walker_unit", 2, RARE), //mekaBow ARROWENERGY_UNIT("arrowenergy_unit", 1), @@ -35,21 +38,29 @@ public enum moduleUpgrade { DRAWSPEED_UNIT("drawspeed_unit", 3), MultipleArrowsUnit("MultiplearrowsUnit", 4), //Body - GRAVITATIONAL_MODULATING_UNIT("gravitational_modulating_unit", 1), - HEALTH_REGENERATION("Health_regeneration", 10), + GRAVITATIONAL_MODULATING_UNIT("gravitational_modulating_unit", 1, EPIC), + HEALTH_REGENERATION("Health_regeneration", 10, RARE), //head - EMERGENCY_RESCUE("Emergency_rescue", 10), + EMERGENCY_RESCUE("Emergency_rescue", 10, EPIC), //ALL - ENERGY_SHIELD_UNIT("Energy_shield_unit", 10), - ADVANCED_INTERCEPTION_SYSTEM_UNIT("Advanced_interception_system_unit",1), - MAGNETIZER("Magnetizer_unit",1); + ENERGY_SHIELD_UNIT("Energy_shield_unit", 10, RARE), + ADVANCED_INTERCEPTION_SYSTEM_UNIT("Advanced_interception_system_unit", 1,EPIC), + MAGNETIZER("Magnetizer_unit", 1,UNCOMMON); private String name; private int maxStack; + private EnumRarity rarity; moduleUpgrade(String s, int max) { name = s; maxStack = max; + rarity = EnumRarity.COMMON; + } + + moduleUpgrade(String s, int max, EnumRarity rarity) { + name = s; + maxStack = max; + this.rarity = rarity; } @@ -69,6 +80,10 @@ public int getMax() { return maxStack; } + public EnumRarity getRarity(){ + return rarity; + } + public boolean canMultiply() { return getMax() > 1; } diff --git a/src/main/resources/assets/mekanism/lang/en_us.lang b/src/main/resources/assets/mekanism/lang/en_us.lang index f08be89eb44..c343a49c46c 100644 --- a/src/main/resources/assets/mekanism/lang/en_us.lang +++ b/src/main/resources/assets/mekanism/lang/en_us.lang @@ -1822,4 +1822,6 @@ direction.west.short=W direction.east.short=E generic.mekanism.percent=% gui.on_caps=ON -gui.off_caps=OFF \ No newline at end of file +gui.off_caps=OFF + +generic.mekanism.list= - \ No newline at end of file diff --git a/src/main/resources/assets/mekanism/lang/zh_cn.lang b/src/main/resources/assets/mekanism/lang/zh_cn.lang index 33b67d09d5d..d1be3afbe7f 100644 --- a/src/main/resources/assets/mekanism/lang/zh_cn.lang +++ b/src/main/resources/assets/mekanism/lang/zh_cn.lang @@ -1799,4 +1799,5 @@ direction.west.short=W direction.east.short=E generic.mekanism.percent=% gui.on_caps=开启 -gui.off_caps=关闭 \ No newline at end of file +gui.off_caps=关闭 +generic.mekanism.list= \ No newline at end of file