Jump to content

Allow 1.8 mod to run on all 1.8 versions


GoldenStorm

Recommended Posts

I'm currently working with a large company (can't say who right now) to make a basic mod that connects some hardware they make with Minecraft.

 

In order to make it easy for our users to install the mod, I'd like to have the mod work on all versions of 1.8. I've seen a few mods before that can do that (can't remember which ones though), but some google searches haven't revealed anything.

 

How can I make a 1.8 mod work on all versions of 1.8 forge?

Link to comment
Share on other sites

Try adding this line of code above your main mod class:

@Mod(modid = mod.MODID, version = mod.VERSION, name= mod.NAME, acceptedMinecraftVersions = "[1.8,)")

 

I am not exactly sure if this will work as I've not tried it, however it was a logical conclusion after reading what is written in

net.minecraftforge.fml.common.versioning.VersionRange:

 

* Create a version range from a string representation
* <p/>
* Some spec examples are
* <ul>
* <li><code>1.0</code> Version 1.0</li>
* <li><code>[1.0,2.0)</code> Versions 1.0 (included) to 2.0 (not included)</li>
* <li><code>[1.0,2.0]</code> Versions 1.0 to 2.0 (both included)</li>
* <li><code>[1.5,)</code> Versions 1.5 and higher</li>
* <li><code>(,1.0],[1.2,)</code> Versions up to 1.0 (included) and 1.2 or higher</li>
* </ul>

 

Hope this helped and that you can continue solving your issue alone from here.

 

EDIT: Corrected the version range, thanks to GotoLink.

I still haven't published a mod because I can never get that in-dev version just right to warrant a public release. And yes, after two years of mod development I am still learning to speak Java.

 

Follow me on GitHub: https://github.com/yooksi

Contact me on Twitter: https://twitter.com/yooksi

Read my Minecraft blog: https://yooksidoesminecraft.blogspot.de/

Link to comment
Share on other sites

Hold on. Setting the acceptedMinecraftVersions might prevent it from complaining about the version, but how do you actually make a mod work with multiple versions? For example, you couldn't just take a 1.7.10 mod and make it 1.6.4 or 1.8.8 compatible just by adding those versions to the acceptedMinecraftVersions.

 

The features, approaches, and many methods and field names are different between versions. So how would you code against multiple versions?

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

The question is about 1.8, which only got minor versions following it.

Thus minor code change which shouldn't affect any mod. (Method/Field renaming is MCP noise, which ForgeGradle covers up)

Though if some code changes prevent the mod from working, you could always surround the version specific code with MinecraftForge.MC_VERSION check.

Link to comment
Share on other sites

If the differences are too large (for instance, WorldRenderer changed drastically between 1.8.0 and 1.8.8), maybe making two or three separate versions would be the easiest way after all. I can't think of an easy way of somehow dynamically switching code or classes.

Link to comment
Share on other sites

@Mod(modid = mod.MODID, version = mod.VERSION, name= mod.NAME, acceptedMinecraftVersions = "[1.8.0,1.9.0)")

Never, let me repeat NEVER say you run on a MC version that does not exist yet, and you have not tested your mod on -.-

As for making a mod work between major MC versions, short answer is you can't.

Long answer is if your mod ONLY interacts with the parts of minecraft that has not changed AT ALL then you MIGHT be able to.

But typically that only happen between minor MC revisions.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Add crash-reports with sites like https://paste.ee/ Maybe an issue with blur, essentials or cumulus_menus
    • Add the crash-report or latest.log (logs-folder) with sites like https://paste.ee/ and paste the link to it here  
    • I have a problem, I am trying to put two different effects to two different armors but when I run it only the emerald armor effect works. This is the code public class ModArmorItem extends ArmorItem{ private static final Map<ArmorMaterial, MobEffectInstance> MATERIAL_TO_EFFECT_MAP = (new ImmutableMap.Builder<ArmorMaterial, MobEffectInstance>()) .put(ModArmorMaterials.EMERALD, new MobEffectInstance(MobEffects.HERO_OF_THE_VILLAGE,200, 1,false,false, true)) .put(ModArmorMaterials.OBSIDIAN, new MobEffectInstance(MobEffects.FIRE_RESISTANCE,200, 1,false,false, true)).build(); public ModArmorItem(ArmorMaterial pMaterial, Type pType, Properties pProperties) { super(pMaterial, pType, pProperties); } @Override public void onArmorTick(ItemStack stack, Level world, Player player){ if (!world.isClientSide()) { if (hasFullSuitOfArmorOn(player)) { evaluateArmorEffects(player); } } } private void evaluateArmorEffects(Player player) { for (Map.Entry<ArmorMaterial,MobEffectInstance> entry : MATERIAL_TO_EFFECT_MAP.entrySet()){ ArmorMaterial mapArmorMaterial = entry.getKey(); MobEffectInstance mapStatusEffect = entry.getValue(); if (hasCorrectArmorOn(mapArmorMaterial, player)) { addStatusEffectForMaterial(player, mapArmorMaterial, mapStatusEffect); } } } private void addStatusEffectForMaterial(Player player, ArmorMaterial mapArmorMaterial, MobEffectInstance mapStatusEffect) { boolean hasPlayerEffect = player.hasEffect(mapStatusEffect.getEffect()); if (hasCorrectArmorOn(mapArmorMaterial, player) && !hasPlayerEffect) { player.addEffect(new MobEffectInstance(mapStatusEffect)); } } private boolean hasCorrectArmorOn(ArmorMaterial material, Player player) { for (ItemStack armorStack : player.getInventory().armor){ if (!(armorStack.getItem() instanceof ArmorItem)) { return false; } } ArmorItem helmet = ((ArmorItem)player.getInventory().getArmor(3).getItem()); ArmorItem breastplace = ((ArmorItem)player.getInventory().getArmor(2).getItem()); ArmorItem leggins = ((ArmorItem)player.getInventory().getArmor(1).getItem()); ArmorItem boots = ((ArmorItem)player.getInventory().getArmor(0).getItem()); return helmet.getMaterial() == material && breastplace.getMaterial() == material && leggins.getMaterial() == material && boots.getMaterial() == material; } private boolean hasFullSuitOfArmorOn(Player player){ ItemStack helmet = player.getInventory().getArmor(3); ItemStack breastplace = player.getInventory().getArmor(2); ItemStack leggins = player.getInventory().getArmor(1); ItemStack boots = player.getInventory().getArmor(0); return !helmet.isEmpty() && !breastplace.isEmpty() && !leggins.isEmpty() && !boots.isEmpty(); } } Also when I place two effects on the same armor, the game crashes. Here is the crash file. The code is the same, only this part is different   private static final Map<ArmorMaterial, MobEffectInstance> MATERIAL_TO_EFFECT_MAP = (new ImmutableMap.Builder<ArmorMaterial, MobEffectInstance>()) .put(ModArmorMaterials.EMERALD, new MobEffectInstance(MobEffects.HERO_OF_THE_VILLAGE,200, 1,false,false, true)) .put(ModArmorMaterials.EMERALD, new MobEffectInstance(MobEffects.FIRE_RESISTANCE,200, 1,false,false, true)).build(); I hope you guys can help me. Thanks.
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.