Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.12.2] Multiple Structure Generation


Merthew
 Share

Recommended Posts

Quote

ArrayList<Class<?>> classesList = new ArrayList<Class<?>>(Arrays.asList(classes));

Any reason you are doing this? Biomes are singletons, you can compare them by instances, there is no need to compare the classes.

 

int x = (chunkX * 16) + random.nextInt(15);
int z = (chunkZ * 16) + random.nextInt(15);

This may cause runaway chunk generation, read and understand.

 

As for your actual issue:

Quote

public static String structureName;

The name for the template you are loading is static, thus is the same for all instances of WorldGenStructure - so as a result all your structures generate with the same template.

Link to comment
Share on other sites

The problem is that i don't know how to not use static i may just be missing some logic or knowledge of java.

*Never mind, i fixed it. sorry for my incompetence 

Edited by Merthew
Fixed it

The seven became one and the one became two.

Link to comment
Share on other sites

  • 11 months later...

Hi Merthew and VoidWa1k3r,

I'm having the same issue where I want multiple structures to be generated, but only the last one is.  I'm trying to learn Java but there are very few resources on Eclipse / Forge, especially for specific issues.  My WorldGenCustomStructures class looks nearly identical to the one you shared above on Github.  How did you fix your problem???  

I removed 'static' from my 'public static final WorldGenStructure MYSTRUCTURE = new WorldGenStructure("mystructure")' with another entry for the second one and both generateStructure statements in the overworld (case 0), but it still didn't work properly.  What am I not getting?

Thanks so much if you get this and can help,

Darkgreenminer

Edited by darkgreenminer
Didn't finish thought.
Link to comment
Share on other sites

  • 1 month later...
On 11/6/2018 at 6:13 PM, Merthew said:

The problem is that i don't know how to not use static i may just be missing some logic or knowledge of java.

*Never mind, i fixed it. sorry for my incompetence 

How did you fix it?

 

edit: nvm I believed I fixed it too, just had to tweak a few things to use "name" instead of "structureName"...

Edited by GttiqwT
Link to comment
Share on other sites

Great. It's so frustrating when it's not working and I'm trying different things.  Let me know if yours is still buggy and I'll send a copy of my WorldGenCustomStructures class.  Have you seen Harry Talks' tutorial?  It's here at https://www.youtube.com/watch?v=cq1wNwuGxu4&t=860s and one early error I had was importing Scala arrays instead of java.util (described in a couple of the comments).  If you want to try out my mod (still in beta), it's here https://www.curseforge.com/minecraft/mc-mods/skulls-and-monkeys.  It's the result of me following a few tutorials to put some fun things into the game for 1.12, recreating some of my favourite old 1.7.10 mods partially and playing around with monkeys.  I've striven for game-balance, as that's how I like to play on modded survival worlds.  What sort of mod are you developing, if I may ask?

 

Link to comment
Share on other sites

7 hours ago, darkgreenminer said:

Great. It's so frustrating when it's not working and I'm trying different things.  Let me know if yours is still buggy and I'll send a copy of my WorldGenCustomStructures class.  Have you seen Harry Talks' tutorial?  It's here at https://www.youtube.com/watch?v=cq1wNwuGxu4&t=860s and one early error I had was importing Scala arrays instead of java.util (described in a couple of the comments).  If you want to try out my mod (still in beta), it's here https://www.curseforge.com/minecraft/mc-mods/skulls-and-monkeys.  It's the result of me following a few tutorials to put some fun things into the game for 1.12, recreating some of my favourite old 1.7.10 mods partially and playing around with monkeys.  I've striven for game-balance, as that's how I like to play on modded survival worlds.  What sort of mod are you developing, if I may ask?

 

Yeah I get where you're coming from. I also watched harry talk's tutorial and at first it worked but then I got the problem that it wont spawn more than one structure otherwise it'll overlap and only spawn the latest one added. I tried to follow this tutorial again and it just didnt seem to work at all now. When I get more time ill have to do it again and then afterwards try and fix the issues with spawning more than one structure. I'm currently trying to fix the issue where it causes cascading gen lag but I dont know how to fix that quite yet either.

Link to comment
Share on other sites

Someone else had that same problem of their mod only spawning the last structure added to WorldGenCustomStructures, and I remembered that the solution I found was what a commentor named Redstone Tim mentioned, that in WorldGenStructure you have to remove 'static'.  I'm happy to email my version of these two classes to you if you want to have a look.  It took me hours and hours to get them working.  I have no idea what might cause the cascading gen lag, but fixing the multiple structure problem might help.  

 

Link to comment
Share on other sites

  • 8 months later...
On 12/15/2019 at 11:15 AM, darkgreenminer said:

Someone else had that same problem of their mod only spawning the last structure added to WorldGenCustomStructures, and I remembered that the solution I found was what a commentor named Redstone Tim mentioned, that in WorldGenStructure you have to remove 'static'.  I'm happy to email my version of these two classes to you if you want to have a look.  It took me hours and hours to get them working.  I have no idea what might cause the cascading gen lag, but fixing the multiple structure problem might help.  

 

How did you fix it? Thanks

Link to comment
Share on other sites

  • 9 months later...
Guest
This topic is now closed to further replies.
 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • 1.17 uses Mojang class names. The class is now called MobEffect. You can use forge-bot on the Forge Discord to convert.
    • Hi i have a problem since 1.17.1 is "new" i'm not able to find the class net.minecraft.potion.Effect. And if i can't extend that class then i can't make my potion effect. So does anyone know where that class is ? and do you guys have a tutorial on how to make a potion effect in 1.16.5 or 1.17.1 because i can't find any tutorial about it. Thank you for helping!!!
    • Why the fak are you to-stringing that? if(source instanceof ImpactDamage) works just fine. You could also create single static instances of your new damage type and use things like ModDamageTypes.SLASHING and the == operator, like vanilla does. Your damage type instances have NO custom data in them at all, so you should just do that (yes I realize my own, very old, code is not following that). This is not how localization works. ItemStacks are never null. The player could be, though. Use ifPresent() instead. You should use the logger Forge provides you instead.
    • When an entity is attacked it has a few ticks of damage resistance during which time no further damage can be applied. You have to set Entity#invulnerableTime to 0 after applying the damage if you want further damage to apply on the same tick.
    • Thanks for the advice, I'm now able to get the events working to a degree. The issue I'm having now is this: I have a capability for both damage type and damage resistance. There are 3 new damage types that each have a corresponding resistance. Damage type capabilities are attached to weapons, while resistance capabilities are applied to entities. I use the following methods to apply extra damage types as well as calculate resistances. The problem is that when attacking an entity, only 1 instance of the new damage types is applied. As for the debugging messages, the 3 sendMessages are being sent in the extraDamage method. In the damageResistance method, only 1 System.out.println statement is being sent. Is there something to do with the way LivingHurtEvent works that only allowed 1 to be applied? package com.cwjn.hardstuckintegration.Events; import com.cwjn.hardstuckintegration.Capabilities.DamageTypes.CapabilityDamageTypes; import com.cwjn.hardstuckintegration.Capabilities.DamageTypes.IDamageTypes; import com.cwjn.hardstuckintegration.Capabilities.Resistances.CapabilityDamageResistance; import com.cwjn.hardstuckintegration.Capabilities.Resistances.IDamageResistance; import com.cwjn.hardstuckintegration.DamageTypes.ImpactDamage; import com.cwjn.hardstuckintegration.DamageTypes.NewType; import com.cwjn.hardstuckintegration.DamageTypes.PunctureDamage; import com.cwjn.hardstuckintegration.DamageTypes.SlashDamage; import com.cwjn.hardstuckintegration.HardstuckIntegration; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.util.Hand; import net.minecraft.util.text.TranslationTextComponent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber(modid = HardstuckIntegration.modID) public class DamageEvents { @SubscribeEvent public static void extraDamage(AttackEntityEvent event) { PlayerEntity player = event.getPlayer(); //player that is attacking Entity target = event.getTarget(); //target being attacked ItemStack item = player.getItemInHand(Hand.MAIN_HAND); //item used to attack if (item != null) { IDamageTypes damage = item.getCapability(CapabilityDamageTypes.DAMAGE_TYPES_CAPABILITY).orElse(null); //get the extra damage types if (damage != null) { float impactDamage = damage.getImpactDamage(); float slashDamage = damage.getSlashDamage(); //store the extra damage types float punctureDamage = damage.getPunctureDamage(); if (impactDamage > 0) { player.sendMessage(new TranslationTextComponent("TARGET ENTITY DEALT: " + impactDamage + " POINTS OF IMPACT DAMAGE"), player.getUUID()); target.hurt(new ImpactDamage(), impactDamage); //if the item has extra impact damage, hurt the target with an instance of impact damage } if (slashDamage > 0) { player.sendMessage(new TranslationTextComponent("TARGET ENTITY DEALT: " + slashDamage + " POINTS OF SLASH DAMAGE"), player.getUUID()); target.hurt(new SlashDamage(), slashDamage); //if the item has extra slash damage, hurt the target with an instance of slash damage } if (punctureDamage > 0) { player.sendMessage(new TranslationTextComponent("TARGET ENTITY DEALT: " + punctureDamage + " POINTS OF PUNCTURE DAMAGE"), player.getUUID()); target.hurt(new PunctureDamage(), punctureDamage); //if the item has extra puncture damage, hurt the target with an instance of puncture damage } } } } @SubscribeEvent public static void damageResistance(LivingHurtEvent event) { DamageSource source = event.getSource(); //source of damage if (source instanceof NewType) { //check if the source is a subclass of the new damage types added with this mod float amount = event.getAmount(); //get initial amount of new damage, before resistances LivingEntity target = event.getEntityLiving(); //target of damage float newDamage = amount; //variable to hold post-resistance calculation damage IDamageResistance res = target.getCapability(CapabilityDamageResistance.DAMAGE_RESISTANCE_CAPABILITY).orElse(null); //get target's resistances if (res != null) { float impactRes = res.getImpactResistance(); float slashRes = res.getSlashResistance(); //store the resistances float punctureRes = res.getPunctureResistance(); switch (((NewType) source).getSourceAsString()) { //get the the source of damage as a string case "slash": if (slashRes > 0) newDamage = (amount * (100 / (100 + slashRes))); //if the target has resistances, apply math to reduce damage. else if (slashRes < 0) newDamage = (amount * (2 - (100 / (100 - slashRes)))); //if the target has negative resistances, apply math to boost damage. else newDamage = amount; //if the target has no resistances, apply initial damage unchanged System.out.println("TARGET ENTITY TOOK: " + newDamage + " SLASH DAMAGE"); //used for debugging break; case "puncture": //same as case slash, but for puncture damage if (punctureRes > 0) newDamage = (amount * (100 / (100 + punctureRes))); else if (punctureRes < 0) newDamage = (amount * (2 - (100 / (100 - punctureRes)))); else newDamage = amount; System.out.println("TARGET ENTITY TOOK: " + newDamage + " PUNCTURE DAMAGE"); break; case "impact": //same as case slash, but for impact damage if (impactRes > 0) newDamage = (amount * (100 / (100 + impactRes))); else if (impactRes < 0) newDamage = (amount * (2 - (100 / (100 - impactRes)))); else newDamage = amount; System.out.println("TARGET ENTITY TOOK: " + newDamage + " IMPACT DAMAGE"); break; } } event.setAmount(newDamage); //apply post-resistance calculation damage to the event } } }  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.