Jump to content

Recommended Posts

Posted

Check for specific entity

 

Hello,
I am new to this and I simple was not able to find an answer. I need to know how to check items, entities etc. if they are really items entities I want.
Something like this:
 

if(entityItem.getUniqueID() == Blocks.OAK_SAPLING.getUniqueID())

or maybe

if(entityItem instanceof ......)

Basically I want to compare the existing one with the pattern. It could be mob, item in hand, item in inventory, item on ground, block on specific position etc. (is there difference?)

 

 

Help

I somehow learned how to use events with @SubscribeEvent and some basic log outputs works ^^

So I wanted to create (to practice understanding this) "auto plant for saplings". Others do this with "ItemExpireEvent" and set despawn time for saplings really low. I don't want to do that that way, because I want normal despawn and differentiate when player throws it and when sapling spawns because leaves vanished or something else spawned it.

When player throws it - it won't auto plant itself. In other cases it auto plant itself.

So I need some "event" or some detection when this "in world item" (item on ground) spawns. I found that "ItemEvent" doesn't detect items spawned by dispenser or when leaves vanishes. Only that were thrown away are detected. This is basically that problem, that I don't know how to detect it. Other problem is that I don't know how to check it if it is (for practice) that SPECIFIC sapling.

 

Can somebody help my second steps? :D

Posted

You could detect the ItemEntity Joining the World, and if it's ItemStack's item is a sapling, you could schedule a task to check again after a specific delay, and if the entity still hasn't been picked up (and it's not sitting inside a planted sapling), kill it and set the block at that position to a planted sapling

This is my Forum Signature, I am currently attempting to transform it into a small guide for fixing easier issues using spoiler blocks to keep things tidy.

 

As the most common issue I feel I should put this outside the main bulk:

The only official source for Forge is https://files.minecraftforge.net, and the only site I trust for getting mods is CurseForge.

If you use any site other than these, please take a look at the StopModReposts project and install their browser extension, I would also advise running a virus scan.

 

For players asking for assistance with Forge please expand the spoiler below and read the appropriate section(s) in its/their entirety.

  Reveal hidden contents

 

Posted

Thank you so much :D It was little hard to find the methods when you didn't write it as code, but I did it - thanks :D

 

Just one question - I found that lot of people use "instanceof" rather than some method.

For example - is there any difference in this?

if(tmpEntity instanceof ItemEntity) {...

and

if(tmpEntity.getType() == EntityType.ITEM) {...

Let's say there is no difference and I want to be effective. I read that calling method with comparison should be much quicker than calling "instanceof" in java.

 

But when I want to know if block is plantable:

if(block instanceof IPlantable) {...

I don't have method for that and I need to use "instanceof" (if I don't want to list all plantable blocks - that is bad, because when I want to add new plant I have to manually put this plant into my list so this is not the way I want).

 

To summarize questions:

1) Is there difference between the first two codes?

2) Should I use "instanceof" often or is there often some method that do the same thing?

Posted
  On 12/27/2019 at 7:47 PM, diesieben07 said:

Yes. The first one checks for any entities that extend ItemEntity (or ItemEntity itself). The second one only checks for the vanilla item entity.

 

This is completely hand-wavey and has no significance without any actual proof. Always remember the quote: Premature optimization is the root of all evil. Also, instanceof in Java is stupidly fast, its one of the fastest operations (probably faster than a method call, but that also depends on the type of method call, etc.). Performance measurements are ridiculously hard in Java, due to the optimizing JIT compiler.

Expand  

Thank you so much for perfect explanation ^^

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

    • I have no idea what the flip is going on, I can load the modpack just fine at forge 42.2.0 but any forge version above it insta-crashes with exit code 1. Can somebody tell me what's going on, this is minecraft 1.20.1 Latest.log: https://pastebin.com/pBUL1ZFa
    • does anyone know how to incorporate custom noise settings into a custom dimension through the use of datagen, I have created a custon json file for the noise settings that I want but I just don't know how to get it to register with the generated json file of the custom dimension.   here is the code for the dimension class package net.hurst.lustria.worldgen.dimension; import com.mojang.datafixers.util.Pair; import net.hurst.lustria.Lustria; import net.hurst.lustria.worldgen.biome.ModBiomes; import net.hurst.lustria.worldgen.registries.LustriaNoiseSettings; import net.minecraft.core.HolderGetter; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.util.valueproviders.ConstantInt; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.*; import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; import java.util.List; import java.util.OptionalLong; public class ModDimensions { public static final ResourceKey<LevelStem> LUSTRIA_KEY = ResourceKey.create(Registries.LEVEL_STEM, ResourceLocation.fromNamespaceAndPath(Lustria.MOD_ID, "lustriadim")); public static final ResourceKey<Level> LUSTRIA_LEVEL_KEY = ResourceKey.create(Registries.DIMENSION, ResourceLocation.fromNamespaceAndPath(Lustria.MOD_ID, "lustriadim")); public static final ResourceKey<DimensionType> LUSTRIA_DIM_TYPE = ResourceKey.create(Registries.DIMENSION_TYPE, ResourceLocation.fromNamespaceAndPath(Lustria.MOD_ID, "lustriadim_type")); public static void bootstrapType(BootstapContext<DimensionType> context) { context.register(LUSTRIA_DIM_TYPE, new DimensionType( OptionalLong.of(12000), // fixedTime false, // hasSkylight true, // hasCeiling false, // ultraWarm false, // natural 1.0, // coordinateScale true, // bedWorks false, // respawnAnchorWorks -64, // minY 256, // height 256, // logicalHeight BlockTags.INFINIBURN_OVERWORLD, // infiniburn BuiltinDimensionTypes.OVERWORLD_EFFECTS, // effectsLocation 0.0f, // ambientLight new DimensionType.MonsterSettings(false, false, ConstantInt.of(0), 0))); } public static void bootstrapStem(BootstapContext<LevelStem> context) { HolderGetter<Biome> biomeRegistry = context.lookup(Registries.BIOME); HolderGetter<DimensionType> dimTypes = context.lookup(Registries.DIMENSION_TYPE); HolderGetter<NoiseGeneratorSettings> noiseGenSettings = context.lookup(Registries.NOISE_SETTINGS); NoiseBasedChunkGenerator wrappedChunkGenerator = new NoiseBasedChunkGenerator( new FixedBiomeSource(biomeRegistry.getOrThrow(Biomes.BEACH)), noiseGenSettings.getOrThrow(NoiseGeneratorSettings.CAVES)); NoiseBasedChunkGenerator noiseBasedChunkGenerator = new NoiseBasedChunkGenerator( MultiNoiseBiomeSource.createFromList( new Climate.ParameterList<>(List.of(Pair.of( Climate.parameters(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F), biomeRegistry.getOrThrow(Biomes.BEACH)), Pair.of( Climate.parameters(0.1F, 0.2F, 0.0F, 0.2F, 0.0F, 0.0F, 0.0F), biomeRegistry.getOrThrow(Biomes.BIRCH_FOREST)), Pair.of( Climate.parameters(0.3F, 0.6F, 0.1F, 0.1F, 0.0F, 0.0F, 0.0F), biomeRegistry.getOrThrow(Biomes.OCEAN)), Pair.of( Climate.parameters(0.4F, 0.3F, 0.2F, 0.1F, 0.0F, 0.0F, 0.0F), biomeRegistry.getOrThrow(Biomes.DARK_FOREST)) ))), noiseGenSettings.getOrThrow(NoiseGeneratorSettings.CAVES)); LevelStem stem = new LevelStem(dimTypes.getOrThrow(ModDimensions.LUSTRIA_DIM_TYPE), noiseBasedChunkGenerator); context.register(LUSTRIA_KEY, stem); } } minecraft version is 1.20.1
    • Please read the FAQ (https://forums.minecraftforge.net/topic/125488-rules-and-frequently-asked-questions-faq/) and post logs as described there using a site like https://mclo.gs and post the link to it here. It may have the information required to solve your problem.  
    • the error code comes up when i trry to run it and ive tried to fix it but i cant  
  • Topics

×
×
  • Create New...

Important Information

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